2

我一直運行的是在這個website所示的「平均降低精度」措施的實施:哪個準確度得分以用於平均降低精度與scikit RandomForestClassifier

在這個例子中,作者是使用隨機森林迴歸RandomForestRegressor,但我現在用的是隨機森林分類RandomForestClassifier。因此,我的問題是,如果我也應該使用r2_score的測量精度,或者我應該切換到經典的準確性accuracy_score或馬修斯相關係數matthews_corrcoef

這裏是否有人,如果我要切換與否。爲什麼?

感謝您的幫助!


下面是從網站的情況下,你都懶得碼點擊:)

from sklearn.cross_validation import ShuffleSplit 
from sklearn.metrics import r2_score 
from collections import defaultdict 

X = boston["data"] 
Y = boston["target"] 

rf = RandomForestRegressor() 
scores = defaultdict(list) 

#crossvalidate the scores on a number of different random splits of the data 
for train_idx, test_idx in ShuffleSplit(len(X), 100, .3): 
    X_train, X_test = X[train_idx], X[test_idx] 
    Y_train, Y_test = Y[train_idx], Y[test_idx] 
    r = rf.fit(X_train, Y_train) 
    acc = r2_score(Y_test, rf.predict(X_test)) 
    for i in range(X.shape[1]): 
     X_t = X_test.copy() 
     np.random.shuffle(X_t[:, i]) 
     shuff_acc = r2_score(Y_test, rf.predict(X_t)) 
     scores[names[i]].append((acc-shuff_acc)/acc) 
print "Features sorted by their score:" 
print sorted([(round(np.mean(score), 4), feat) for 
       feat, score in scores.items()], reverse=True) 

回答

2

r2_score是迴歸(連續響應變量),而經典的分類(離散分類變量)指標諸如此類accuracy_scoref1_scoreroc_auc(最後兩個是最合適的,如果你有不平衡的y標籤)是你的任務正確的選擇。

隨機

洗牌在輸入數據矩陣中的每個特徵和測量在這些分類指標的下降聽起來像一個有效的方法來排名功能重要度。

+0

嗨@Jianxun李,感謝您的解釋。所以你不會推薦MCC?如果您談論不平衡的y標籤,則意味着正確分類的案例分佈不均勻。另外我不確定,爲什麼計算這個(標準化)的方式:'(acc-shuff_acc)/ acc'而不是'acc-shuff_acc'。你知道優點是什麼嗎? – dmeu

+0

@dmeu對不起,我忘了在帖子中包含'MCC'。我認爲它和從混淆矩陣中得出的其他分類指標一樣好。 –

+0

謝謝@李建勳!您對第一條評論中的後續問題有任何想法嗎? – dmeu