gpt4 book ai didi

python - RandomForestRegressor 特征是否作为类别处理?

转载 作者:行者123 更新时间:2023-11-30 08:55:09 24 4
gpt4 key购买 nike

我正在为我的项目使用RandomForestRegressor(来自Python中出色的Scikt-Learn库),它给了我很好的结果,但我认为我可以做得更好。当我为“fit(..)”函数提供功能时,将分类特征作为二元特征更好吗?

示例:而不是:

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

做一些类似的事情:

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

因为它作为一棵树工作,也许第二个选项更好,或者对于第一个选项它的作用是否相同?非常感谢!

最佳答案

强烈建议对分类变量进行二值化,并且预计其性能优于不进行二值化变换的模型。如果 scikit-learn 将大陆 = [1, 2, 3, 2] 视为数值(连续变量 [定量] 而不是分类变量 [定性]),它会强加一个该特征的人为顺序约束。例如,假设 Continental=1 表示 is_europeContinental=2 表示 is_asia,而 Continental= 3 表示 is_america,那么它意味着在检查时 is_asia 始终位于 is_europeis_america 之间大陆特征与响应变量y的关系,这不一定正确,并且有可能降低模型的有效性。相比之下,使其成为虚拟变量就没有这样的问题,并且 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 也会有所帮助。

关于python - RandomForestRegressor 特征是否作为类别处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31364746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com