【发布时间】:2019-12-13 20:01:09
【问题描述】:
我正在尝试进行二元类分类。因为我有一个小数据集(275 个样本),所以我进行了 Leave-one-out 交叉验证,并希望获得所有折叠的平均分类报告和 AUROC/AUPRC。
我已密切关注this link 得出我的结果,但我无法理解最后一行的代码在做什么。
for i in classifiers:
print(i)
originalclass = []
predictedclass = []
model=i
loo = LeaveOneOut()
print('Scores before feature selection')
scores = cross_val_score(model, subset, y,cv=loo,scoring=make_scorer(classification_report_with_accuracy_score))
print("CV score",np.mean(cross_val_score(model,subset,y,cv=loo,scoring='roc_auc')))
print(classification_report(originalclass, predictedclass))
print('Scores after feature selection')
X_reduced=feature_reduction_using_RFECV(model,subset,y)
scores = cross_val_score(model, X_reduced, y,cv=loo,scoring=make_scorer(classification_report_with_accuracy_score))
print("CV score",np.mean(cross_val_score(model,X_reduced,y,cv=loo,scoring='roc_auc')))
print(classification_report(originalclass, predictedclass))
上述代码中的平均发生在哪里?我正在计算平均 CV 分数并打印出来。但那之后的那一行最让我困惑。我一开始就初始化了 originalclass 和 predictableclass 变量,但是在最后一行打印之前它在哪里使用?
print(classification_report(originalclass, predictedclass))
修改后的代码
for i in classifiers:
print(i)
originalclass = y
model=i
loo = LeaveOneOut()
print('Scores before feature selection')
y_pred = cross_val_predict(model, subset, y, cv=loo)
print(classification_report(originalclass, y_pred))
print("CV score",np.mean(cross_val_score(model,subset,y,cv=loo,scoring='roc_auc')))
print(classification_report(originalclass, y_pred))
print('Scores after feature selection')
X_reduced=feature_reduction_using_RFECV(model,subset,y)
y_pred = cross_val_predict(model, X_reduced, y, cv=loo)
classification_report(originalclass, y_pred)
print("CV score",np.mean(cross_val_score(model,X_reduced,y,cv=loo,scoring='roc_auc')))
print(classification_report(originalclass, y_pred))
【问题讨论】:
-
你的问题没有任何意义;您当然可以平均 CV 分数(此处为
np.mean),但您不能“平均”分类报告。请参阅docs 以准确了解分类报告的具体含义 -
在交叉验证中,我们对每 n-1 折进行训练并在第 n 折进行测试。作为每次运行的结果,我们得到一个混淆矩阵,从而得到分类报告。我不能平均每个折叠的敏感性/特异性等吗?
标签: scikit-learn classification cross-validation