线性回归分析中包含字符串/分类特征(变量)?

回归算法似乎只能处理以数字表示的特征。例如:

不含分类特征的简单数据

这个数据集不包含分类特征/变量。很明显如何在这个数据上进行回归并预测价格。


但现在我想对包含分类特征的数据进行回归分析:

包含分类特征的数据集

5个特征:DistrictConditionMaterialSecurityType


我如何在这个数据上进行回归?我是否必须手动将所有字符串/分类数据转换为数字?我是说我是否需要创建一些编码规则,并根据这些规则将所有数据转换为数值。

有没有简单的方法可以将字符串数据转换为数字,而不必手动创建自己的编码规则?也许有Python中的一些库可以用来做这个?是否存在由于“错误编码”导致回归模型不正确的风险?


回答:

是的,你需要将所有数据转换为数字。这需要考虑这些属性代表什么。

通常有三种可能性:

  1. 分类数据的一热编码
  2. 序数数据的任意数字
  3. 使用分类数据的组均值(例如,城市区域的平均价格)。

你必须小心不要引入在应用案例中没有的信息。

一热编码

如果你有分类数据,你可以为每个可能的值创建0/1值的虚拟变量。

例如:

idx color0   blue1   green2   green3   red

转换为

idx blue green red0   1    0     01   0    1     02   0    1     03   0    0     1

这可以很容易地使用pandas完成:

import pandas as pddata = pd.DataFrame({'color': ['blue', 'green', 'green', 'red']})print(pd.get_dummies(data))

结果将是:

   color_blue  color_green  color_red0           1            0          01           0            1          02           0            1          03           0            0          1

序数数据的数字

创建一个可排序类别的映射,例如旧 < 翻新 < 新 → 0, 1, 2

这也可以使用pandas完成:

data = pd.DataFrame({'q': ['old', 'new', 'new', 'ren']})data['q'] = data['q'].astype('category')data['q'] = data['q'].cat.reorder_categories(['old', 'ren', 'new'], ordered=True)data['q'] = data['q'].cat.codesprint(data['q'])

结果:

0    01    22    23    1Name: q, dtype: int8

使用分类数据进行分组操作

你可以使用每个类别的过去(已知事件)的平均值。

假设你有一个包含城市最后已知平均价格的DataFrame:

prices = pd.DataFrame({    'city': ['A', 'A', 'A', 'B', 'B', 'C'],    'price': [1, 1, 1, 2, 2, 3],})mean_price = prices.groupby('city').mean()data = pd.DataFrame({'city': ['A', 'B', 'C', 'A', 'B', 'A']})print(data.merge(mean_price, on='city', how='left'))

结果:

  city  price0    A      11    B      22    C      33    A      14    B      25    A      1

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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