使用train_test_split拆分的向量数据训练LinearRegression报TypeError如何解决
报错原因
你当前的X是每元素为向量的Series结构,scikit-learn的线性回归模型要求输入特征为二维数值数组,每个位置必须是单个数值,不能是列表/向量结构,因此触发了类型转换错误。
方案1:将每个向量取平均值转换为单值标量(你提到的需求)
直接对每行的向量计算均值即可,实现代码如下:
import numpy as np # 对每行向量计算平均值,转换为单值特征 X = df['vectors'].apply(lambda x: np.mean(x)).values.reshape(-1, 1)
处理后X的形状为(样本数, 1),符合模型输入要求,每个样本对应一个均值标量。
方案2:将向量展开为多列特征(推荐,保留全量信息)
如果向量的每个维度都是独立特征,不需要降维到标量,直接把向量列拆成二维数组即可,能最大程度保留数据信息,拟合效果通常优于取均值:
import numpy as np # 将向量列转换为二维numpy数组,形状为(样本数, 向量维度) X = np.array(df['vectors'].tolist())
两种方案处理完X后,再运行原有训练代码即可正常执行:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101) lm = LinearRegression() lm.fit(X_train, y_train)
内容的提问来源于stack exchange,提问作者user872009
相关产品推荐
相关产品推荐

