gpt4 book ai didi

python - 如何在 sklearn 的分类报告中获得我们唯一需要的分数?

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:33 27 4
gpt4 key购买 nike

我正在使用 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])}

最佳答案

您听说过cross_validate 函数吗?它可能是您的正确选择,因此您可以计算多个值。示例:

>>> scores = cross_validate(lasso, X, y, cv=3,
... scoring=('r2', 'neg_mean_squared_error'),
... return_train_score=True)
>>> print(scores['test_neg_mean_squared_error'])
[-3635.5... -3573.3... -6114.7...]
>>> print(scores['train_r2'])
[0.28010158 0.39088426 0.22784852]

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html#sklearn.model_selection.cross_validate

希望这对您来说是一个好的解决方案!

关于python - 如何在 sklearn 的分类报告中获得我们唯一需要的分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com