Kaggle泰坦尼克数据集21种算法交叉验证结果缺失问题咨询
问题原因
- 核心错误是交叉验证循环内重复覆盖
cv_results变量:遍历21个算法的for循环中,每次执行cv_results = ...都会覆盖上一个算法的计算结果,循环结束后cv_results仅保留了列表最后一个算法(二次判别分析)的10折交叉验证结果,因此输出只有10条拆分数据,没有其余20个算法的信息。 - 你贴出的代码中
Target = ['Survived]存在语法错误,缺少闭合单引号,需修改为Target = ['Survived']否则会直接报错。
修复代码
修改交叉验证和结果输出部分的逻辑,提前存储每个算法的结果即可获取全部21种算法的评分:
# 初始化空列表存储所有算法的交叉验证结果 cv_results_collect = [] for model in MLA: # 提取当前算法名称用于标识 algorithm_name = model.__class__.__name__ # 执行交叉验证 single_cv_res = model_selection.cross_validate( model, tts[data_c], np.ravel(tts[Target]), cv=cv_split, return_train_score=True ) # 给当前结果添加算法名称列 single_cv_res["algorithm"] = algorithm_name # 转换为DataFrame存入总列表 cv_results_collect.append(pd.DataFrame(single_cv_res)) # 合并所有算法的结果得到完整表 full_cv_results = pd.concat(cv_results_collect, ignore_index=True) # 输出全部210条(21个算法×10折)验证结果 print(full_cv_results) # 可选:按算法聚合输出平均得分,方便直接对比性能 print(full_cv_results.groupby("algorithm")[["test_score", "train_score", "fit_time"]].mean().sort_values("test_score", ascending=False))
补充说明
运行时如果耗时较长属于正常情况,SVM、高斯过程类算法本身拟合速度较慢,等待执行完成即可看到所有算法的结果。
内容的提问来源于stack exchange,提问作者Everything is Awesome
相关产品推荐
相关产品推荐

