随机森林回归器是否将特征视为类别?

我在项目中使用了来自Python优秀的Scikit-Learn库的RandomForestRegressor,它给我带来了不错的结果,但我认为我可以做得更好。当我将特征传递给’fit(..)’函数时,是否应该将分类特征转换为二进制特征呢?

例如:而不是这样:

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

可以这样做:

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

因为它是以树的形式工作的,所以第二种选项可能更好,或者第一种选项会同样有效吗?非常感谢!


回答:

将分类变量二值化是高度推荐的,预计会比没有二值化转换的模型表现更好。如果scikit-learncontinent = [1, 2, 3, 2]视为数值(连续变量[定量]而不是分类[定性]),它会对该特征施加人为的顺序约束。例如,假设continent=1表示is_europecontinent=2表示is_asiacontinent=3表示is_america,那么这意味着is_asia总是介于is_europeis_america之间,当检查continent特征与你的响应变量y的关系时,这不一定是正确的,并且有可能会降低模型的有效性。相反,将其转换为虚拟变量就没有这样的问题,scikit-learn会分别处理每个二进制特征。

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

from sklearn.preprocessing import LabelBinarizer# 你的数据# ===========================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'}# 处理# =============================binarizer = LabelBinarizer()# 拟合分类特征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也很有帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注