2017-05-29 57 views
1

我有21個班。我正在使用RandomForest。我想繪製ROC曲線,所以我在scikit中檢查了示例ROC with SVM如何將RandomForest二進制化以在Python中繪製ROC?

該示例使用SVM。支持向量機具有如下參數:概率和RF不具有的decision_function_shape。

那麼如何二值化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

'predict_proba()'相當於'decision_function()'。你可以使用它。 –

回答

0

對於多標記隨機森林,每個21個標籤有一個二元分類,並且可以創建爲每個21類的ROC曲線。 您的y_train應該是每個標籤的0和1的矩陣。

假設你適合sklearn的多標記隨機森林並稱其爲rf,並且在測試列車拆分後具有X_test和y_test。

從sklearn進口指標 probs = rf.predict_proba(X_test) FPR,TPR,threshs = metrics.roc_curve(y_test ['你的名頭:您可以使用此圖在python ROC曲線您的第一個標籤標籤'],probs [0] [:,1])

希望這會有所幫助。如果你提供你的代碼和數據,我可以更具體地寫這個。

+0

在我創建的模型中,y_train是從1到21的矩陣(因爲有21個類)。這就是爲什麼我想對它進行二進制化。我的代碼只是交叉驗證模型的訓練。數據只是一個帶有1到21的標籤的矩陣。我將在編輯中加入一些示例。 – Aizzaac

相關問題