sklearn preprocessing 数据预处理(OneHotEncoder)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lanchunhui/article/details/72794317

0. StandardScaler

去均值时,在测试集上进行预测时减去的均值是训练集上得到的均值;

import sklearn.preprocessing as prep

def standard_scale(X_train, X_test):
	preprocessor = prep.StandardScaler().fit(X_train)
	X_train = preprocessor.transform(X_train)
	X_test = preprocessor.transform(X_test)
	return X_train, X_test

1. one hot encoder

sklearn.preprocessing.OneHotEncoder

one hot encoder 不仅对 label 可以进行编码,还可对 categorical feature 进行编码:

>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()

>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  

>>> enc.n_values_
array([2, 3, 4])

>>> enc.feature_indices_
array([0, 2, 5, 9])

>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])

为 OneHotEncoder 类传递进来的数据集:

[[0, 0, 3], 
[1, 1, 0], 
[0, 2, 1], 
[1, 0, 2]]

每一列代表一个属性,fit 操作之后:

  • 对象encn_values_成员变量,记录着每一个属性的最大取值数目,如本例第一个属性:0, 1, 0, 1 ⇒ 2,0, 1, 2, 0 ⇒ 3,3, 0, 1, 24
    • 即各个属性(feature)在 one hot 编码下占据的位数;
  • 对象 encfeature_indices_,则记录着属性在新 One hot 编码下的索引位置,
    • feature_indices_ 是对 n_values_ 的累积值,不过 feature_indices 的首位是 0;

进一步通过 fit 好的 one hot encoder 对新来的特征向量进行编码:

>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])
  • 前 2 位 1, 0,对 0 进行编码
  • 中间 3 位 0, 1, 0 对 1 进行编码;
  • 末尾 4 位 0, 1, 0, 0 对 1 进行编码;
展开阅读全文

没有更多推荐了,返回首页