sklearn中LinearRegression.fit拟合模型报字符串转换错误排查
错误原因
- 核心触发原因是特征集
X中包含字符串类型字段Address:sklearn中的LinearRegression线性模型仅支持数值类型输入做矩阵运算,无法直接解析字符串值,拟合时就会抛出类型转换错误。 - 代码同时存在逻辑疏漏:你将作为预测目标的
Price列(即赋值给y的响应变量)也加入了特征集X,属于典型的数据泄露问题,这种情况下模型训练时会直接把目标值当特征学习,完全不具备预测价值。
修正方法
调整特征集X的列选择逻辑,剔除字符串字段Address和目标列Price,仅保留有效数值特征即可:
# 修正后特征集仅保留有效数值特征 X = df[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms', 'Avg. Area Number of Bedrooms', 'Area Population']] y = df['Price']
后续数据集拆分、模型实例化与拟合的代码逻辑无需修改,调整后即可正常运行:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101) from sklearn.linear_model import LinearRegression lm = LinearRegression() lm.fit(X_train, y_train)
补充说明:如果后续需要使用
Address这类文本/字符串类型特征,不能直接传入模型,需要先通过独热编码、标签编码等方式将其转换为数值格式,再和其他数值特征拼接后送入模型训练。
内容的提问来源于stack exchange,提问作者Ifeanyi George Ezeanya
相关产品推荐
相关产品推荐

