一、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.]])
网友评论