Random或features句柄是否作为类别?

2024-04-18 20:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用randomforestrestregressor(来自python中伟大的Scikt学习库)进行我的项目, 它给了我很好的结果,但我认为我可以做得更好。 当我为“fit(…)”功能提供功能时, 将分类特征作为二进制特征更好吗?你知道吗

示例: 而不是:

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

制作类似于:

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

因为它像树一样工作也许第二种选择更好, 或者对第一个选项也一样? 多谢了!你知道吗


Tags: 项目功能示例is选项二进制分类特征
1条回答
网友
1楼 · 发布于 2024-04-18 20:42:14

强烈建议对分类变量进行二值化,并期望其性能优于不使用二值化器转换的模型。如果scikit-learncontinent = [1, 2, 3, 2]视为数值(连续变量[定量]而不是分类[定性]),则会对该特征施加人工顺序约束。例如,假设continent=1表示is_europecontinent=2表示is_asiacontinent=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也会有所帮助。你知道吗

相关问题 更多 >