如何将RandomForest二值化以在python中绘制ROC?

问题描述 投票:1回答:1

我有21个班级。我正在使用RandomForest。我想绘制一个ROC曲线,所以我检查了scikit ROC with SVM中的示例

该示例使用SVM。 SVM具有如下参数:概率和decision_function_shape,RF不具有这些参数。

那么如何将RandomForest二值化并绘制ROC?

谢谢

编辑

创建虚假数据。所以有20个功能和21个类(每个类3个样本)。

df = pd.DataFrame(np.random.rand(63, 20))
label = np.arange(len(df)) // 3 + 1 
df['label']=label
df


#TO TRAIN THE MODEL: IT IS A STRATIFIED SHUFFLED SPLIT
clf = make_pipeline(RandomForestClassifier())   
xSSSmean10 = []
for i in range(10):
    sss = StratifiedShuffleSplit(y, 10, test_size=0.1, random_state=i) 
    scoresSSS = cross_validation.cross_val_score(clf, x, y , cv=sss)

    xSSSmean10.append(scoresSSS.mean())
result_list.append(xSSSmean10)
print("") 
python-3.x scikit-learn random-forest roc
1个回答
0
投票

对于多标记随机森林,您的21个标签中的每一个都具有二元分类,您可以为21个类别中的每一个创建ROC曲线。对于每个标签,您的y_train应为0和1的矩阵。

假设您从sklearn中拟合了一个多标记随机森林并将其命名为rf,并在测试列车拆分后得到X_test和y_test。您可以使用以下方法在python中为您的第一个标签绘制ROC曲线:

from sklearn import metrics 
probs = rf.predict_proba(X_test)
fpr, tpr, threshs = metrics.roc_curve(y_test['name_of_your_first_tag'],probs[0][:,1])

希望这可以帮助。如果您提供代码和数据,我可以更具体地编写。

© www.soinside.com 2019 - 2024. All rights reserved.