使用OneHotEncoder编码分类变量后,是否需删除原列?特征重要性疑问
关于独热编码后原始列处理与特征重要性的疑问
我使用OneHotEncoder对邮政编码(zipcode)进行编码后输入随机森林模型,代码如下:
from sklearn.preprocessing import OneHotEncoder one_hot = OneHotEncoder() encoded = one_hot.fit_transform(df[['zipcode']]) df[one_hot.categories_[0]] = encoded.toarray()请问是否需要从自变量中删除原始的zipcode列?还是sklearn会自动处理该问题?
我提出此疑问主要是因为zipcode列显示为第二重要特征,这是否是所有独热编码后特征的重要性聚合?
解答:
- 必须手动删除原始zipcode列:sklearn不会自动处理重复特征问题。原始zipcode列和独热编码生成的列属于同一信息的不同表达,同时输入模型会造成特征冗余,既干扰模型训练逻辑,也会让特征重要性计算出现偏差。
- zipcode列的重要性不是聚合结果:随机森林的特征重要性是针对单个独立特征计算的。如果原始zipcode列没被删除,模型会把它当成单独特征评估重要性,独热编码后的每一列也会各自计算重要性。你看到原始zipcode列排第二,是因为模型误将类别型的zipcode当成数值型特征处理(比如认为"10001"比"10002"有数值顺序意义),这不符合zipcode作为类别特征的实际含义,属于错误的重要性评估结果。
内容的提问来源于stack exchange,提问作者user5434
相关产品推荐
相关产品推荐

