sklearn实现KNN回归拟合时抛出ValueError异常问题咨询
报错原因说明
该报错和你提到的数值量级、原始数据自带空值没有关系,核心问题是特征拼接逻辑错误,人为生成了大量NaN值:
- 调用
pd.concat(glasses)时未指定拼接轴,pandas默认使用axis=0做纵向行拼接 - 你提取的两个特征
A(列名YearBuilt)、B(列名YrSold)列名不匹配,纵向拼接时会生成两列结构:来自A的行对应的YrSold位置全为NaN,来自B的行对应的YearBuilt位置全为NaN - 拼接后的特征集
x行数是原始样本量的2倍,和标签y的长度也不匹配,大量自动填充的NaN值直接触发了sklearn的输入合法性校验,抛出对应错误。
修复方法
将特征拼接改为横向列拼接即可,修改对应代码行:
# 原错误代码 # x = pd.concat(glasses) # 修正后代码 x = pd.concat(glasses, axis=1)
修正后生成的特征集x行数和原始样本量一致,包含YearBuilt、YrSold两个完整特征列,不会再产生无意义的NaN填充。
快速排查技巧
后续遇到同类输入校验报错,可以在模型fit前打印特征集信息快速定位问题:
# 打印特征集维度,正确结果应为(原始样本数, 2) print(x.shape) # 统计每列空值数量,错误拼接时两列的空值数都会等于原始样本量 print(x.isna().sum())
内容的提问来源于stack exchange,提问作者MeltedStatementRecognizing
相关产品推荐
相关产品推荐

