回归算法似乎正在处理以数字表示的特征。 例如:
此数据集不包含分类特征/变量。很清楚如何对这些数据进行回归并预测价格。
但现在我想对包含分类特征的数据进行回归分析:
有5个特征:District
、Condition
、Material
、Security
, 类型
如何对这些数据进行回归?我是否必须手动将所有字符串/分类数据转换为数字?我的意思是如果我必须创建一些编码规则并根据这些规则将所有数据转换为数值。
是否有任何简单的方法可以将字符串数据转换为数字,而无需手动创建自己的编码规则?也许 Python 中有一些库可以用于此目的?是否存在由于“错误编码”而导致回归模型不正确的风险?
最佳答案
是的,您必须将所有内容都转换为数字。这需要考虑这些属性代表什么。
通常有三种可能:
- 分类数据的 One-Hot 编码
- 序数数据的任意数字
- 对分类数据使用诸如组均值之类的东西(例如,市区的平均价格)。
您必须小心,不要注入(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/