如何用Pandas Python实现足球赛事多标签分类并解决RFE报错问题?
报错原因
- 你对y执行了
values.ravel()操作:原y是形状为(4560, 2)的二维数组,拉平后变成了长度为9120的一维数组,和X的4560个样本数量无法匹配,直接触发了样本数不一致的报错。 - RFE参数使用错误:
RFE(logReg, 20)中第二个入参是要保留的特征总数,不是你以为的测试百分比。你当前X总共只有2个特征,设置为20本身就无法生效。 - 原生RFE不直接支持多标签输入,需要对基础分类器做包装才能适配多标签场景。
修复方案
第一步:依赖导入
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression from sklearn.multioutput import MultiOutputClassifier
第二步:修正特征选择代码
# 用MultiOutputClassifier包装逻辑回归,适配多标签输出 logReg = MultiOutputClassifier(LogisticRegression(solver='lbfgs', max_iter=1000)) # 修正RFE参数,当前X只有2个特征,保留所有2个特征即可,可根据你后续新增的特征数量调整 rfe = RFE(logReg, n_features_to_select=2) # 直接传入原始y即可,不要用ravel拉平 rfe = rfe.fit(X, y) # 输出特征重要性结果 print(rfe.support_)
第三步:输出目标概率
训练完成后调用predict_proba方法即可得到你需要的两类概率:
# 训练模型 model = logReg.fit(X, y) # 对单条测试样本做预测 test_sample = X.iloc[0:1] # 替换为你的待预测样本 proba_list = model.predict_proba(test_sample) # 提取对应类别的概率 home_win_p = round(proba_list[0][0][1] * 100) draw_p = round(proba_list[1][0][1] * 100) # 按要求输出 print(f"Home Team Win {home_win_p}%") print(f"Draw {draw_p}%")
优化建议
你当前的标签构造逻辑存在缺陷:主队获胜、平局、客队获胜是三个互斥的结果,多标签分类可能会出现同时预测主队获胜和平局的不合理结果。更合理的方案是直接改为三分类任务,标签对应三个结果:主队赢、客队赢、平局,训练完成后直接提取对应类别的概率即可,逻辑更严谨,精度也会更高。
内容的提问来源于stack exchange,提问作者Faran mazhar
相关产品推荐
相关产品推荐

