数据编码

把文本型、字符型数据转换成数值型的方法

 

labelencode

从名字上看,这是对标签进行编码,实际上可以对任何数据进行编码

作法很简单,就是将序列中不同值给个序号,以代表这个字符型数据。

 

示例代码

from sklearn.preprocessing import LabelEncoder  # 标签专用

label = np.array(['','不好','不好','','不好','','不好'])
encoding=LabelEncoder()
classes = encoding.fit_transform(label)  # 把字符型特征转化成整型
print(encoding.classes_)            # ['好','不好']
print(classes)                      # [1 0 0 1 0 1 0]

label = encoding.inverse_transform(classes)     # 还原
print(label)

上面把好与不好变成了0,1

 

这种方法简单,但是有很大问题。

思考以下问题:

比如特征是[‘鸡’,‘鸭’,‘鹅’],彼此之间完全独立,没有关联性和大小,

再如特征是[‘小学’,‘初中’,‘高中’],彼此之间不完全独立,有“大小”之分,小学<初中<高中,但彼此之间无法数据计算

又如特征是[‘<45’,‘<90’,‘<135’],彼此之间不完全独立,不仅有“大小”之分,彼此间也可以数据计算

单纯的变为 0 1 2,忽略了特征本身之间的联系,传达了不准确的信息,影响建模效果。

 

独热编码-onehot encode

也叫哑编码,就是用二进制来表示特征,生成稀疏矩阵。

作用

1. 转换成数值型

2. 解决labelencode的问题

3. 增加维度

 

示例代码

from sklearn.preprocessing import OneHotEncoder
import numpy as np

train = np.array([  [0, 1, 2],
                    [1, 1, 0],
                    [2, 0, 1],
                    [3, 1, 1]])
one_hot = OneHotEncoder()
one_hot = one_hot.fit(train)
result = one_hot.transform([[1, 0, 1]]).toarray()
print result                                        # [[0. 1. 0. 0. 1. 0. 0. 1. 0.]]

# print(one_hot.transform([[1, 0, 1]]).todense())   # 将结果保存起来  稀疏矩阵,转为密集矩阵
# print one_hot.inverse_transform(result)           # 还原
# print one_hot.get_feature_names()                 

### 解释
# one column 0 1 2 3-->0 1 2 3
# two column 0 1-->0 1
# three column 0 1 2-->0 1 2

# 1 0 1 --> 1==> 0 1 0 0
#           0==> 1 0
#           1==> 0 1 0


### test1
train = np.array([  ['0', 1, 2],
                    ['1', 1, 0],
                    ['2', 0, 1],
                    ['3', 1, 1]])
one_hot = OneHotEncoder()
one_hot.fit(train)
print(one_hot.transform([['1', 0, 1]]).toarray())    # [[0. 1. 0. 0. 1. 0. 0. 1. 0.]]

### test2
train = np.array([  ['0', 'a', 2],
                    ['1', 'a', 0],
                    ['2', 'b', 1],
                    ['3', 'a', 1]])
one_hot = OneHotEncoder()
one_hot.fit(train)
print(one_hot.transform([['1', 'b', 1]]).toarray())    # ValueError: could not convert string to float: a

sklearn中独热编码不能直接处理非数值的字符串,需要先根据 LableEncode 进行编码,再进行独热编码

 

 

二值化编码

很简单,设定阈值,大于为1,小于为0

from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import KBinsDiscretizer

具体用法请百度

转载于:https://www.cnblogs.com/yanshw/p/10709844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值