Pandas类别型变量因子化原因及方法总结

Pandas类别型变量因子化原因及方法总结

参考线性回归分析中的哑变量

哑变量(Dummy Variable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化,如职业、性别对收入的影响,战争、自然灾害对GDP的影响,季节对某些产品(如冷饮)销售的影响等等。 这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量,通常称为哑变量(dummy variables),记为D。

举一个例子,假设变量“职业”的取值分别为:工人、农民、学生、企业职员、其他,5种选项,我们可以增加4个哑变量来代替“职业”这个变量,分别为D1(1=工人/0=非工人)、D2(1=农民/0=非农民)、D3(1=学生/0=非学生)、D4(1=企业职员/0=非企业职员),最后一个选项“其他”的信息已经包含在这4个变量中了,所以不需要再增加一个D5(1=其他/0=非其他)了。这个过程就是引入哑变量的过程,其实在结合分析(conjoint analysis)中,就是利用哑变量来分析各个属性的效用值的。

在线性回归分析中引入哑变量的目的是,可以考察定性因素对因变量的影响。

参考Kaggle泰坦尼克预测(完整分析)

因为逻辑回归建模时,需要输入的特征都是数值型特征,我们通常会先对类目型的特征因子化。 
什么叫做因子化呢?举个例子:

以Cabin为例,原本一个属性维度,因为其取值可以是[‘yes’,’no’],而将其平展开为’Cabin_yes’,’Cabin_no’两个属性

原本Cabin取值为yes的,在此处的”Cabin_yes”下取值为1,在”Cabin_no”下取值为0
原本Cabin取值为no的,在此处的”Cabin_yes”下取值为0,在”Cabin_no”下取值为1

实现类别变量因子化的方法:

方法1.pandas 中的get_dummies()

dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')

扫描二维码关注公众号,回复: 9445617 查看本文章

在获得某个分类变量的哑变量之后,原来的一个特征就变成了两个特征,原数据集的更新操作:

data_train.drop('Cabin', axis=1, inplace=True)
data_train = pd.concat([data_train, dummies_Cabin], axis=1)


方法2:one hot encoding

将有N个类的一个特征编码为长度为N的二进制向量。

python实现

sklearn.preprocessing.OneHotEncoder

离散特征的编码分为两种情况:
1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}
使用pandas可以很方便的对离散型特征进行one-hot编码

import pandas as pd
df = pd.DataFrame([
            ['green', 'M', 10.1, 'class1'], 
            ['red', 'L', 13.5, 'class2'], 
            ['blue', 'XL', 15.3, 'class1']])

df.columns = ['color', 'size', 'prize', 'class label']

size_mapping = {
           'XL': 3,
           'L': 2,
           'M': 1}
df['size'] = df['size'].map(size_mapping)

class_mapping = {label:idx for idx,label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)12345678910111213141516

说明:对于有大小意义的离散特征,直接使用映射就可以了,{‘XL’:3,’L’:2,’M’:1 }

Using the get_dummies will create a new column for every unique string in a certain column:

使用get_dummies进行one-hot 编码

pd.get_dummies(df) 

发布了72 篇原创文章 · 获赞 33 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Elvirangel/article/details/104516056
今日推荐