在为线性回归编码分类特征时,有一条规则:假人的数量应比级别总数少一个(以避免共线性)。
决策树是否存在类似的规则(袋装,增强)?我之所以这样问是因为,Python的标准做法似乎是将n
级别扩展到对我而言似乎不是最佳的n
虚拟对象(sklearns OneHotEncoder
或Pandas pd.get_dummies
)。
作为编码决策树分类功能的最佳做法,您有何建议?
在为线性回归编码分类特征时,有一条规则:假人的数量应比级别总数少一个(以避免共线性)。
决策树是否存在类似的规则(袋装,增强)?我之所以这样问是因为,Python的标准做法似乎是将n
级别扩展到对我而言似乎不是最佳的n
虚拟对象(sklearns OneHotEncoder
或Pandas pd.get_dummies
)。
作为编码决策树分类功能的最佳做法,您有何建议?
Answers:
似乎您了解您能够拥有n
与相对的水平n-1
,因为与线性回归不同,您不必担心完美的共线性。
(我从R的角度来看这个问题,但我认为在Python中是相同的。)这取决于几件事,例如1)您正在使用的软件包和2)您拥有多少个因子水平。
1)如果您使用的是R的randomForest
封装,那么如果您的因子水平小于33,则可以继续进行操作,并根据需要将其保留为一项功能。那是因为在R的随机森林实施中,它将检查以查看哪个因子级别应位于拆分的一侧,而另一因子级别应位于(例如,您的5个级别可以在左侧分组,而7个可以分组)一起在右边)。如果将分类特征拆分为n
虚拟变量,则该算法将无法使用此选项。
显然,如果您使用的特定程序包无法处理分类功能,那么您只需要创建n
虚拟变量即可。
2)如上文所述,R的随机森林实现只能处理32个因子级别-如果您有更多的因子,则需要将因子分解为较小的子集,或为每个级别创建一个虚拟变量。
sklearn
......实事求是地讲,是有证据(实践经验,研究等)认为,“dummified”变量将[在R]性能比“分组”分类变量更糟
还有另一种处理分类变量的方法,称为目标/影响编码。
在此方案中,想法是使用单个浮点列对要素进行编码,其中值是共享类别的所有行上目标变量的平均值。这对于基于树的模型特别有用,因为它在特征内强加了顺序关系(即,类别右侧的值比左侧的值具有更高的平均响应),并且它更易于分割预测变量空间。
这是一个很好的主题解释:https :
//towardsdatascience.com/why-you-should-try-mean-encoding-17057262cd0
这是最初提出编码的论文的链接:http : //helios.mm.di.uoa.gr/~rouvas/ssi/sigkdd/sigkdd.vol3.1/barreca.pdf
有更多详细信息可以避免估计低计数类别的平均值,还有另一个模型CatBoost提出了针对此编码引入的偏差的解决方案,但以我的经验,这是一种编码高基数分类变量的简单且非常有用的方法。
randomForest
会自动编码,否则我应该选择n
假人,因为共线性不是RF的问题?