Sklearn–(2)

Sklearn–(2)

首先介绍数据标准化工具onehot[独热编码]:

One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。以手写数字识别为例,我们需要将0-9共十个数字标签转化成onehot标签。例如:数字标签“6”转化为onehot标签就是[0,0,0,0,0,0,1,0,0,0].
我第一次利用以下函数进行编码:

def convert2onehot(data):
    # covert data to onehot representation
    return pd.get_dummies(data, prefix=data.columns)

结果报错:
很明显职业一项我们一共有15个而该函数只能提供10个以下的编码,只能另觅他法喽,

ValueError: Length of 'prefix' (15) did not match the length of the columns being encoded (9).

虽然已经有很多人在 stackoverflow 和 sklearn 的 github issue 上讨论过这个问题,但目前为止的 sklearn 版本仍没有增加OneHotEncoder对字符串型类别变量的支持,所以一般都采用曲线救国的方式:

  • 方法一 :先用 LabelEncoder() 转换成连续的数值型变量,再用 OneHotEncoder() 二值化;
  • 方法二 :直接用 LabelBinarizer() 进行二值化;
import pandas as pd
#import Numpy as np
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import LabelBinarizer
from sklearn.preprocessing import MultiLabelBinarizer
col_names = ["age", "workclass", "fnlwgt", "education", "education-num", "marital-status", "occupation", 
             "relationship", "race", "sex", "capital-gain", "capital-loss", "hours-per-week", "native-country", "result"]
data = pd.read_csv("D://ML//Data//adult.csv", names=col_names)
#利用函数将文字标准化为tensorflow可以处理的数字
#OneHotEncoder(sparse = False).fit_transform( data[['age','education-num']] )
data['age']=LabelBinarizer().fit_transform(data['age'])
data['workclass']=LabelBinarizer().fit_transform(data['workclass'])
data['fnlwgt']=data['fnlwgt']/100
data['fnlwgt']=OneHotEncoder(sparse = False).fit_transform( data[['fnlwgt']] )
data['education']=LabelBinarizer().fit_transform(data['education'])
data['education-num']=LabelBinarizer().fit_transform(data['education-num'])
data['marital-status']=LabelBinarizer().fit_transform(data['marital-status'])
data['occupation']=LabelBinarizer().fit_transform(data['occupation'])
data['relationship']=LabelBinarizer().fit_transform(data['relationship'])
data['race']=LabelBinarizer().fit_transform(data['race'])
data['sex']=LabelBinarizer().fit_transform(data['sex'])
data['capital-gain']=LabelBinarizer().fit_transform(data['capital-gain'])
data['capital-loss']=LabelBinarizer().fit_transform(data['capital-loss'])
data['hours-per-week']=LabelBinarizer().fit_transform(data['hours-per-week'])
data['native-country']=LabelBinarizer().fit_transform(data['native-country'])
data['result']=LabelBinarizer().fit_transform(data['result'])

print(data[:10])

打印结果如下所示:

 age  workclass  fnlwgt  education  education-num  marital-status  \
0    0          0     0.0          0              0               0   
1    0          0     0.0          0              0               0   
2    0          0     0.0          0              0               1   
3    0          0     0.0          0              0               0   
4    0          0     0.0          0              0               0   
5    0          0     0.0          0              0               0   
6    0          0     0.0          0              0               0   
7    0          0     0.0          0              0               0   
8    0          0     0.0          0              0               0   
9    0          0     0.0          0              0               0   

   occupation  relationship  race  sex  capital-gain  capital-loss  \
0           0             0     0    1             0             1   
1           0             1     0    1             1             1   
2           0             0     0    1             1             1   
3           0             1     0    1             1             1   
4           0             0     0    0             1             1   
5           0             0     0    0             1             1   
6           0             0     0    0             1             1   
7           0             1     0    1             1             1   
8           0             0     0    0             0             1   
9           0             1     0    1             0             1   

   hours-per-week  native-country  result  
0               0               0       0  
1               0               0       0  
2               0               0       0  
3               0               0       0  
4               0               0       0  
5               0               0       0  
6               0               0       0  
7               0               0       1  
8               0               0       1  
9               0               0       1  

猜你喜欢

转载自blog.csdn.net/Power1_Power2/article/details/79673547