是RandomForestRegressor的特征句柄作为类别吗?



我使用RandomForestRegressor(从伟大的Scikt-Learn库在python)为我的项目,它给了我很好的结果,但我认为我可以做得更好。当我给'fit(…)'函数赋值时,把分类特征变成二元特征是不是更好?

的例子:而不是:

===========
continent |
===========
     1    |
===========
     2    |
===========
     3    |
===========
     2    |
===========

写如下:

===========================
is_europe | is_asia   | ...
===========================
    1     |     0     |
===========================
    0     |     1     |
===========================

因为它的工作方式是树,也许第二个选项更好,或者对于第一种选择是否同样有效?谢谢很多!

强烈推荐对分类变量进行二值化,并且期望在没有二值化器转换的情况下优于模型。如果scikit-learn认为continent = [1, 2, 3, 2]是数值(连续变量[定量的]而不是分类的[定性的]),那么它对该特征施加了人为的顺序约束。例如,假设continent=1表示is_europe, continent=2表示is_asia, continent=3表示is_america,那么在检查continent feature与响应变量y的关系时,这意味着is_asia总是在is_europeis_america之间,这并不一定是正确的,并且有可能降低模型的有效性。相比之下,将其设为虚拟变量就没有这样的问题,scikit-learn将单独处理每个二进制特征。

要将scikit-learn中的分类变量二值化,可以使用LabelBinarizer

from sklearn.preprocessing import LabelBinarizer

# your data
# ===========================
continent = [1, 2, 3, 2]
continent_dict = {1:'is_europe', 2:'is_asia', 3:'is_america'}
print(continent_dict)
{1: 'is_europe', 2: 'is_asia', 3: 'is_america'}
# processing
# =============================
binarizer = LabelBinarizer()
# fit on the categorical feature
continent_dummy = binarizer.fit_transform(continent)
print(continent_dummy)
[[1 0 0]
 [0 1 0]
 [0 0 1]
 [0 1 0]]

如果你在pandas中处理你的数据,那么它的顶级函数pandas.get_dummies也有帮助。

相关内容

  • 没有找到相关文章

最新更新