在Google Colab运行LinearRegression模型时遇特征名用户警告,如何解决?
解决LinearRegression预测时的特征名警告问题
问题原因
训练模型时传入的是带列名的DataFrame(df.drop('price', axis='columns')),但预测时传入的是纯数值列表转成的numpy数组([[3000,3,0]]),sklearn检测到特征名不匹配,因此抛出警告。
解决方法
方法1:用带特征名的DataFrame传递预测数据
直接构造和训练数据列名一致的DataFrame来预测,既匹配特征名,也能避免因特征顺序变化导致的错误:
# 构造和训练集列名完全一致的DataFrame pred_data = pd.DataFrame([[3000, 3, 0]], columns=['area', 'bedrooms', 'age']) model.predict(pred_data)
方法2:关闭特定警告(临时方案,不推荐)
如果确认特征顺序完全匹配,只是不想看到警告,可以用warnings模块屏蔽:
import warnings warnings.filterwarnings("ignore", message="X does not have valid feature names") model.predict([[3000, 3, 0]])
方法3:训练时统一使用numpy数组
训练时把DataFrame转成numpy数组,这样预测时传数组就不会触发特征名检查:
# 训练时将输入数据转为numpy数组 X = df.drop('price', axis='columns').values y = df.price.values model.fit(X, y) # 预测时直接传入数组 model.predict([[3000, 3, 0]])
说明
优先推荐方法1,它能明确对应特征含义,代码可读性更高,也能避免潜在的顺序错误。
内容的提问来源于stack exchange,提问作者Gaurav Mahajan
相关产品推荐
相关产品推荐

