我有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("")
答案 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])
希望这会有所帮助。如果你提供你的代码和数据,我可以更具体地写这个。