泰坦尼克数据集独热编码后训练报KeyError:指定特征不在索引
兄弟,看你的报错信息我瞬间就get到问题了——你代码里喊着要找的列全是Airbnb数据集的(比如host_name_svd_0、amenities_svd_0这类),但你明明说在处理泰坦尼克数据集啊!这完全是数据集和特征列对不上导致的KeyError,咱们一步步来解决:
先搞懂报错本质
你的colsX列表里塞了一堆不属于泰坦尼克数据集的特征名,而你的dfX是处理后的泰坦尼克数据,自然找不到这些列,所以直接抛出了KeyError。那些带svd、host、amenities的列都是Airbnb项目里的特征,和泰坦尼克半毛钱关系都没有。
具体解决步骤
核对特征列与数据集的匹配度
先打印出你当前泰坦尼克数据集的所有列,看看你实际有哪些特征:print(dfX.columns.tolist())然后对比
colsX里的内容,把那些Airbnb相关的列全部删掉,替换成你做了独热编码的泰坦尼克特征(比如Pclass_1、Sex_male、Embarked_S这类)。检查数据集加载逻辑
你大概率是在代码里不小心加载了Airbnb的数据集文件!去翻一下数据加载的代码块,确保读入的是泰坦尼克的处理后文件(比如titanic_onehot.csv这类),而不是其他项目的数据文件。验证独热编码的结果
你说已经完成了独热编码,那可以用这段代码快速找出colsX里哪些列是不存在的:# 找出colsX中不在dfX里的列 missing_cols = [col for col in colsX if col not in dfX.columns] print("缺失的特征列:", missing_cols)把这些
missing_cols从colsX里彻底移除,或者确认是不是你在做独热编码时漏生成了某些列。
额外提醒
如果是你复用了其他项目(比如Airbnb分类)的代码模板,一定要把所有和数据集相关的变量、特征列、文件路径全部替换成泰坦尼克的内容,不然很容易出现这种张冠李戴的低级错误。
内容的提问来源于stack exchange,提问作者Cihan Yatbaz

