SK-Learn高斯朴素贝叶斯预测报错:无法将字符串转为数值型
问题原因及解决办法
错误的核心是你构造的测试输入格式完全不对:
- 训练模型时,传入的
raw[['elo', 'opponent_rating', 'winner_loser_elo_diff']]是纯数值的特征矩阵(每行一个样本,每列对应一个特征的数值) - 但你写的
test1 = [['elo', 1000], ['opponent_rating', 800], ['winner_loser_elo_diff', 200]]是包含列名字符串的结构,模型会把这些字符串当作特征值处理,自然无法转换成数值类型,触发报错。
正确的测试输入写法
写法1:纯数值二维数组(注意特征顺序和训练时一致)
test1 = [[1000, 800, 200]] chess_gnb.predict(test1)
这里的子列表对应一个样本,三个数值依次对应elo、opponent_rating、winner_loser_elo_diff的取值,和训练时的特征列顺序必须完全匹配。
写法2:用DataFrame匹配列名(避免顺序错误)
如果怕记混特征顺序,可以用pandas构造带列名的DataFrame,模型会自动对应正确的特征:
import pandas as pd test_df = pd.DataFrame({ 'elo': [1000], 'opponent_rating': [800], 'winner_loser_elo_diff': [200] }) chess_gnb.predict(test_df)
另外说明,目标变量winner是字符串类型不影响这个错误,高斯朴素贝叶斯可以处理字符串类型的分类目标,问题完全出在测试输入的格式上。
内容的提问来源于stack exchange,提问作者imad97
相关产品推荐
相关产品推荐

