我一直在运行这个网站上展示的’平均准确度下降‘度量方法的实现:
在示例中,作者使用的是随机森林回归器RandomForestRegressor
,但我使用的是随机森林分类器RandomForestClassifier
。因此,我的疑问是,我是否也应该使用r2_score
来衡量准确度,或者应该切换到经典的准确度accuracy_score
或马修斯相关系数matthews_corrcoef
?
这里有谁知道我是否应该切换?为什么?
感谢任何帮助!
如果你懒得点击,这里是网站上的代码:
from sklearn.cross_validation import ShuffleSplitfrom sklearn.metrics import r2_scorefrom collections import defaultdictX = boston["data"]Y = boston["target"]rf = RandomForestRegressor()scores = defaultdict(list)#crossvalidate the scores on a number of different random splits of the datafor 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)
回答:
r2_score
适用于回归(连续响应变量),而经典的分类(离散分类变量)指标如accuracy_score
和f1_score
、roc_auc
(后两者在你有不平衡的y标签时最为合适)是你的任务的正确选择。
通过随机打乱输入数据矩阵中的每个特征并测量这些分类指标的下降,听起来像是对特征重要性进行排序的有效方法。