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

我在项目中使用了来自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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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