运行MLR时出现ValueError: could not convert string to float: 'Fnatic'如何解决
代码问题原因
你触发报错的核心原因是传入模型预测的数据集包含非数值的字符串字段,与训练时的特征输入不匹配,具体有两个问题点:
- 特征列未对齐:你训练模型时使用的自变量是15个纯数值的赛事统计字段,但是你调用
predict方法时传入的LEC_team是筛选出的整行战队数据,其中包含了Team列的字符串值(比如报错里的'Fnatic'),模型无法将字符串转换为浮点型参与计算。 - 输出格式错误:
predict方法返回的是numpy数组类型的预测结果,直接和字符串拼接也会触发类型报错。
修复方案
- 先将训练用的特征列提取为公共变量,避免重复写出现拼写错误
- 预测时仅传入和训练时一致的数值特征列
- 输出时将预测结果转换为整数后再做字符串拼接
修改后的核心代码片段如下:
# 提前定义特征列,训练和预测共用 feature_cols = ["GP","AGT",'KD','CKPM','GPR','FD%','DRG%','ELD%','FBN%','BN%','LNE%','JNG%','WPM','CWPM','WCPM'] # ===== 原训练代码部分修改x的取值 ===== x = lcsTeam[feature_cols] y = lcsTeam['W'] regr = sklm.LinearRegression() regr.fit(x,y) # ===== 原预测代码部分修改 ===== # 筛选目标战队后仅提取特征列输入模型 LEC_team = LEC[LEC['Team'] == team] LEC_team_features = LEC_team[feature_cols] LECWins = regr.predict(LEC_team_features) # 预测结果取第一个值转整数后输出 print(f"{team} 本赛季在LCS赛区预计会取得 {int(LECWins[0])} 胜!")
额外注意:需要保证LEC赛事的csv文件中,所有
feature_cols对应的字段名、字段类型和LCS的csv完全一致,避免出现字段缺失、类型不匹配的衍生问题。
内容的提问来源于stack exchange,提问作者pookster
相关产品推荐
相关产品推荐

