数据预处理3:处理分类型特征(2)

  • preprocessing.OneHotEncoder

之前在舱门Embarked这一列中,我们使用[0,1,2]代表了三个不同的舱门,然而这种转换是正确的吗?

体重(>45kg,>90kg,>135kg) 各个取值之间有联系,且是可以互相计算的,比如120kg - 45kg = 90kg,分类之间可以通过数学计算互相转换。这是有距变量。

对特征进行编码时,三类数据被我们转化成[0,1,2],而这在算法看来是都是体重那种分类的方法,也就是连续可计算的。

而像舱门这里S Q C和性别男女这样的只是一个名义变量而没有可计算的性质,而是有你没我的性质,这种情况下我们要使用哑变量来处理。

简言之以舱门为例,
就是把S Q C 对应0 1 2这样一个一位数组而改成放在一个二维数组中,S Q C 分别对应一个特征的1
就像
S [ [1 0 0],
Q [0 1 0],
C [0 0 1] ]

以此图数据集为例
以此图数据集为例

from sklearn.preprocessing import OneHotEncoder
X = data.iloc[:,1:-1]
X.head(2)

在这里插入图片描述

enc = OneHotEncoder(categories='auto').fit(X)#请sklearn自己看看有多少类
result = enc.transform(X).toarray()#请把这个结果转换成数组
result
#性别 男 女 
#舱门 S Q C\
#一共五类变量
enc.transform(X)#这是一个稀疏矩阵对象是由0和1组成的矩阵

<889x5 sparse matrix of type ‘<class ‘numpy.float64’>’
with 1778 stored elements in Compressed Sparse Row format>

#依然可以直接一步到位
OneHotEncoder(categories='auto').fit_transform(X).toarray()
#依然可以还原
pd.DataFrame(enc.inverse_transform(result))

在这里插入图片描述

enc.get_feature_names()
#如果特征特多可以调用这个查看

在这里插入图片描述
再把处理好的数据放回去移除之前没有热值化的Age和Embarked

#axis=1,表示跨行进行合并,也就是将量表左右相连,
#如果是axis=0,就是将量表上下相连
newdata = pd.concat([data,pd.DataFrame(result)],axis=1)
newdata.head()

在这里插入图片描述

newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.columns = ["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]
newdata.head()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值