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

时间:2017-05-29 14:04:49

标签: python-3.x scikit-learn random-forest roc

我有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("") 

1 个答案:

答案 0 :(得分: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])

希望这会有所帮助。如果你提供你的代码和数据,我可以更具体地写这个。