哑变量编码-python

2018-08-13  本文已影响647人  斑马上树

一、Dummy Variable定义

虚拟变量又称虚设变量、名义变量或哑变量,引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的作用,而且接近现实。

例如:

1. 分离异常因素的影响,例如分析我国GDP的时间序列,必须考虑“文革”因素对国民经济的破坏性影响,剔除不可比的“文革”因素。 

2. 检验不同属性类型对因变量的作用,例如工资模型中的文化程度、季节对销售额的影响。 

3. 提高模型的精度,相当与将不同属性的样本合并,扩大了样本容量(增加了误差自由度,从而降低了误差方差

二、编码方式

1、dummy encoding

dummy encoding就是把一个有h个level的变量变成h-1个变量,比如3个level的变量就表示成成10,01,或00。

python实现

pd.get_dummies( drop_first=False, dummy_na=True),新增(h-1)个变量,可处理string类型数据(string 转换为 integers 类型)。

2、One-Hot Encoding

one-hot encoding就是用h个变量来代表这h个level,比如3个level的变量就表示成100,010,001。

python实现

pd.get_dummies( drop_first=True, dummy_na=True),新增(h)个变量,可处理string类型数据。

sklearn.preprocessing.OneHotEncoder(),不可以直接处理 string。

3、DictVectorizer

将字典类型表示的属性,转换为向量类型。

python实现

#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)

measurements = [{'city':'Beijing','country':'CN','temperature':33.},{'city':'London','country':'UK','temperature':12.},{'city':'San Fransisco','country':'USA','temperature':18.}]

#从sklearn.feature_extraction导入

DictVectorizerfrom sklearn.feature_extraction import DictVectorizervec = DictVectorizer()

#输出转化后的特征矩阵print vec.fit_transform(measurements).toarray()

#输出各个维度的特征含义print vec.get_feature_names()

output

'''

[[ 1. 0. 0. 1. 0. 0. 33.]

 [ 0. 1. 0. 0. 1. 0. 12.]

 [ 0. 0. 1. 0. 0. 1. 18.]]

['city=Dubai', 'city=London', 'city=San Fransisco', 'country=CN', 'country=UK', 'country=USA', 'temperature']

'''

PS:另一个有趣的例子

measurements = [

    {'city=Dubai': True, 'city=London': True, 'temperature': 33.},

    {'city=London': True, 'city=San Fransisco': True, 'temperature': 12.},

    {'city': 'San Fransisco', 'temperature': 18.},

]

vec.fit_transform(measurements).toarray()

output

array([[ 1., 1., 0., 33.],

          [  0.,  1.,  1.,  12.],

          [  0.,  0.,  1.,  18.]])

上一篇 下一篇

猜你喜欢

热点阅读