You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sklearn中使用分层K折交叉验证后输出分类结果?

问题原因

cross_validate函数的返回值是存储交叉验证性能指标(如拟合时间、测试得分等)的字典,并非训练完成的分类器对象,因此无法调用predict方法,这就是报错的核心原因。

解决方案

根据你的需求,分两种场景给出对应代码:

场景1:获取训练集的分层K折交叉验证预测结果

如果你想得到训练集中每个样本在交叉验证过程中的预测值(用于评估模型在训练集的交叉验证表现),可以使用cross_val_predict函数:

from sklearn.model_selection import cross_val_predict
from sklearn.metrics import classification_report

# 获取训练集的交叉验证预测结果
train_cv_pred = cross_val_predict(clf, X_train, y_train, cv=5, stratify=y_train)
target_names = ['Alive', 'Dead']
# 输出训练集的交叉验证分类报告
print(classification_report(y_train, train_cv_pred, target_names=target_names))

场景2:用交叉验证评估后,预测测试集数据

如果你只是想用分层K折交叉验证评估模型的泛化能力,之后仍要预测测试集数据,需要先通过交叉验证确认性能,再用完整的训练集重新训练分类器,之后再进行测试集预测:

from sklearn.model_selection import cross_validate

# 用分层K折交叉验证评估模型性能
cv_results = cross_validate(clf, X_train, y_train, cv=5, stratify=y_train)
# 查看交叉验证的测试得分
print("交叉验证测试得分:", cv_results['test_score'])

# 用完整训练集重新训练分类器
clf.fit(X_train, y_train)
# 预测测试集
R_y_pred = clf.predict(X_test)
target_names = ['Alive', 'Dead']
# 输出测试集分类报告
print(classification_report(y_test, R_y_pred, target_names=target_names))

如果需要在交叉验证过程中同时完成模型调优和最终训练,可以使用GridSearchCV,它会在交叉验证后自动用最优参数拟合完整训练集:

from sklearn.model_selection import GridSearchCV

# 定义参数网格(示例)
param_grid = {'n_estimators': [100, 200], 'max_depth': [None, 10]}
# 初始化GridSearchCV,使用分层K折
grid_clf = GridSearchCV(clf, param_grid, cv=5, stratify=y_train)
# 拟合训练集
grid_clf.fit(X_train, y_train)
# 输出最优参数和交叉验证得分
print("最优参数:", grid_clf.best_params_)
print("最优交叉验证得分:", grid_clf.best_score_)

# 用最优模型预测测试集
R_y_pred = grid_clf.predict(X_test)
print(classification_report(y_test, R_y_pred, target_names=target_names))

内容的提问来源于stack exchange,提问作者Encipher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:52:16