数组形状错误成因解析及替代解决方案咨询
Sklearn朴素贝叶斯predict方法数组形状错误问题解析
错误成因
Sklearn所有监督学习模型(包括朴素贝叶斯)的predict方法要求输入的特征数据必须是二维数组,形状格式为(样本数量, 特征数量)。你传入的是一维数组,这类数组无法让模型明确区分「样本数」和「每个样本的特征数」——比如你的例子里,一维数组['The cat is sleeping in the sun.' 'The dog is barking at the moon.'],模型无法判断这是2个单特征样本,还是1个双特征样本,因此抛出形状不匹配的报错。
已验证的解决方案
你使用的data = data.reshape(-1, 1)是标准解决方法,-1会让numpy自动计算对应维度的长度,这里相当于将一维数组转换为(样本数, 1)的二维数组,明确告诉模型:这是N个样本,每个样本有1个特征。
其他可选解决方案
- 使用
numpy.expand_dims添加维度:import numpy as np data = np.expand_dims(data, axis=1) # axis=1表示在列方向新增维度,效果和reshape(-1,1)一致 - 转换为嵌套列表结构:
data = [[item] for item in data] - 转换为pandas DataFrame:
import pandas as pd data = pd.DataFrame(data, columns=['text_feature'])
预期输出
处理后模型应输出:[{"Cat": "Sleeping", "Dog": "barking"}]
内容的提问来源于stack exchange,提问作者user17716493
相关产品推荐
相关产品推荐

