The 文档 https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html在此类问题上可以说是你最好的朋友;从这个简单的例子来看,很明显你不应该使用for
循环也不调用fit
。调整示例以使用KFold
像你一样做:
from sklearn.model_selection import KFold, cross_validate
from sklearn.datasets import load_boston
from sklearn.tree import DecisionTreeRegressor
X, y = load_boston(return_X_y=True)
n_splits = 5
kf = KFold(n_splits=n_splits, shuffle=True)
model = DecisionTreeRegressor()
scoring=('r2', 'neg_mean_squared_error')
cv_results = cross_validate(model, X, y, cv=kf, scoring=scoring, return_train_score=False)
cv_results
Result:
{'fit_time': array([0.00901461, 0.00563478, 0.00539804, 0.00529385, 0.00638533]),
'score_time': array([0.00132656, 0.00214362, 0.00134897, 0.00134444, 0.00176597]),
'test_neg_mean_squared_error': array([-11.15872549, -30.1549505 , -25.51841584, -16.39346535,
-15.63425743]),
'test_r2': array([0.7765484 , 0.68106786, 0.73327311, 0.83008371, 0.79572363])}
如何创建混淆矩阵?我需要为每个折叠创建它吗
没有人能告诉你,如果你need为每个折叠创建一个混淆矩阵 - 这是你的选择。如果您选择这样做,最好跳过cross_validate
并“手动”执行该过程 - 请参阅我的答案如何显示每个交叉验证折叠的混淆矩阵和报告(召回率、精度、fmeasure) https://stackoverflow.com/questions/53531167/how-to-display-confusion-matrix-and-report-recall-precision-fmeasure-for-eac/55050146#55050146.
如果是,如何计算最终/平均混淆矩阵?
不存在“最终/平均”混淆矩阵;如果你想计算比k
如链接答案中所述(每个 k 倍一个),您需要有一个单独的验证集......