我正在使用 sklearn cross_val_score
获得如下结果。
import numpy as np
my_results = cross_val_score(clf, X, y, cv=10, scoring = 'accuracy')
print(np.mean(my_results))
因此,这使我的交叉验证更加准确。要获得我的其他分数,我必须再次执行分类以获得结果。
precision = cross_val_score(clf, X, y, cv=k_fold, scoring = 'precision_weighted')
#print(precision.mean())
recall = cross_val_score(clf, X, y, cv=k_fold, scoring = 'recall_weighted')
#print(recall.mean())
f1 = cross_val_score(clf, X, y, cv=k_fold, scoring = 'f1_weighted')
#print(f1.mean())
我只对准确率、加权平均精度、加权平均召回率、加权平均 f-measure 和 auc
感兴趣,并且想通过仅执行 cross_val_score
来获得这些分数一次。
我遇到了 sklearn 的 classification_report
:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html .
但是,它不支持cross_val_score
。我想知道在 sklearn 中是否有办法做到这一点。
如果需要,我很乐意提供更多详细信息。
编辑:
我尝试按照@t_e_o 的建议进行操作。但是,它产生的结果是错误的。例如,考虑鸢尾花数据集。
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features.
y = iris.target
from sklearn.ensemble import RandomForestClassifier
clf=RandomForestClassifier(random_state = 0, class_weight="balanced")
from sklearn.model_selection cross_val_score, cross_validate
cross_val_score(clf, X, y, cv=10, scoring = 'accuracy')
cross_validate(clf, X, y, cv=10, scoring = ('accuracy'))
我得到的结果如下。
#cross_val_score
array([0.53333333, 0.73333333, 0.66666667, 0.8 , 0.73333333,
0.6 , 0.86666667, 0.86666667, 0.6 , 0.8 ])
#cross_validate
{'fit_time': array([0.01695228, 0.01396275, 0.01296329, 0.01496124, 0.0149579 ,
0.01097107, 0.01395988, 0.01495957, 0.01396394, 0.0149579 ]),
'score_time': array([0.00199723, 0.00199652, 0.00199461, 0.00199294, 0.00199652,
0.00199389, 0.00199485, 0.00199366, 0.00099611, 0.00099897]),
'test_score': array([0.53333333, 0.73333333, 0.66666667, 0.8 , 0.73333333,
0.6 , 0.86666667, 0.86666667, 0.6 , 0.8 ]),
'train_score': array([0.94074074, 0.91851852, 0.92592593, 0.93333333, 0.91851852,
0.91851852, 0.91111111, 0.8962963 , 0.91851852, 0.91851852])}
我是一名优秀的程序员,十分优秀!