python - 具有字符串/分类特征(变量)的线性回归分析?

标签 python machine-learning regression linear-regression feature-selection

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

simple data without categorical features

此数据集不包含分类特征/变量。很清楚如何对这些数据进行回归并预测价格。


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

data-set with categorical features

5个特征:DistrictConditionMaterialSecurity , 类型


如何对这些数据进行回归?我是否必须手动将所有字符串/分类数据转换为数字?我的意思是如果我必须创建一些编码规则并根据这些规则将所有数据转换为数值。

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

最佳答案

是的,您必须将所有内容都转换为数字。这需要考虑这些属性代表什么。

通常有三种可能:

  1. 分类数据的 One-Hot 编码
  2. 序数数据的任意数字
  3. 对分类数据使用诸如组均值之类的东西(例如,市区的平均价格)。

您必须小心,不要注入(inject)您在申请案例中没有的信息。

一种热编码

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

E. g.

idx color
0   blue
1   green
2   green
3   red

idx blue green red
0   1    0     0
1   0    1     0
2   0    1     0
3   0    0     1

这可以通过 pandas 轻松完成:

import pandas as pd

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

将导致:

   color_blue  color_green  color_red
0           1            0          0
1           0            1          0
2           0            1          0
3           0            0          1

序数数据的数字

创建可排序类别的映射,例如。 G。 旧 < 翻新 < 新 → 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.codes
print(data['q'])

结果:

0    0
1    2
2    2
3    1
Name: q, dtype: int8

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

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

假设您有一个数据框,其中包含最后已知的城市平均价格:

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  price
0    A      1
1    B      2
2    C      3
3    A      1
4    B      2
5    A      1

关于python - 具有字符串/分类特征(变量)的线性回归分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007308/

相关文章:

python - 如何对连续音频进行分类

python - 使用 numpy 进行有损多项式回归

python - Python 和 R 之间的线性回归系数之间的差异

python - Solr 和用户数据

python - 使用正则表达式解析 .srt 文件

python - ValueError : Error when checking input: expected dense_1_input to have shape (24, )但得到形状为(1,)的数组

python - 处理硬编码路径的回归测试

python - 如何在字典的字符串周围使用 f 字符串格式

python - 如何向 pandas df 中的分组项目添加标量值

machine-learning - 如何使用Knime对文本进行分类