数据的预处理

  机器学习算法无法理解原始数据,所以需对原始数据进行预处理,常用预处理如下:

  预处理主要使用了preprocessing包,所以需对该包进行导入:

import numpy as np
from sklearn import preprocessing
data=np.array([
        [3,-1.5,2,-5.4],
        [0,4,-0.3,2.1],
        [1,3.3,-1.9,-4.3]
        ])

  1.均值移除(Mean removal) 

#将特征数据的分布调整成标准正太分布,也叫高斯分布,
#也就是使得数据的均值维0,方差为1.标准化是针对每一列而言的
#方法一
data_standardized=preprocessing.scale(data)
print('Mean=',data_standardized.mean(axis=0))#特征均值几乎为0
print('Std=',data_standardized.std(axis=0))#标准差为1
#方法二
scaler=preprocessing.StandardScaler().fit(data)
print('Mean=',scaler.transform(data).mean(axis=0))#特征均值几乎为0
print('Std=',scaler.transform(data).std(axis=0))#标准差为1

  2.范围缩放(Scaling)

#为了对付那些标准差相当小的特征并且保留下稀疏数据中的0值
#方法一:计算公式如下:
#X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
#X_scaled = X_std / (max - min) + min
data_minmax_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled = data_minmax_scaler.fit_transform(data)
print("Min max scaled data:", data_scaled)
#方法二:特征中绝对值最大的那个数为1,其他数以此维标准分布在[[-1,1]之间
max_abs_scaler = preprocessing.MaxAbsScaler()
x_train_maxsbs = max_abs_scaler.fit_transform(data)
print("Max abs scaled data:", x_train_maxsbs)

  3.归一化(Normalization)

# 正则化:保证每个特征向量的值都缩放到相同的数值范围内,
#提高不同特征特征数据的可比性,如数据有许多异常值可使用此方法
#方法一:第二个参数可谓l1与l2,最常用为调整到l1范数,使所有特征向量之和为1
data_normalized = preprocessing.normalize(data, norm='l1')
print("\nL1 normalized data:\n", data_normalized)
#方法二:
normalizer = preprocessing.Normalizer(copy=True, norm='l2').fit(data)#创建正则器
normalizer.transform(data)

       4.二值化(Binarization)

# 将数值型的特征数据转换成布尔类型的值
# 方法一
data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)#比1.4大的为1,小的为0
print("\nBinarized data:\n", data_binarized)
#方法二:
binarizer = preprocessing.Binarizer(threshold=0)
print("\nBinarized data:\n", binarizer.transform(data)) 

  5.独热编码(One-Hot Encoding)

# http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
encoder = preprocessing.OneHotEncoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print("Encoded vector:", encoded_vector)
print("_values_:", encoder.n_values_)#值的每个特征的最大数量。
print("Encoded vector:", encoder.feature_indices_)

  6.弥补缺失值

#
imp = preprocessing.Imputer(missing_values='NaN', axis=0)#NaN可换成其他
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
x = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(x))#填入(1+7)/2和(2+3+6)/3

  7.生成多项式的特征

# 生成多项式的特征,得到高阶相互作用特征
poly = preprocessing.PolynomialFeatures(2)# 创建2次方的多项式
print(poly.fit_transform(data))

  8.定制变压器

#定制变压器:辅助数据清洗或处理
transformer = preprocessing.FunctionTransformer(np.log1p)
print(transformer.transform(np.array([[0, 1], [2, 3]])))

 

参考文献:http://blog.csdn.net/sinat_33761963/article/details/53433799

     http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

     http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

     Python机器学习经典实例

posted @ 2017-11-19 20:27  NSGUF  阅读(1021)  评论(0编辑  收藏  举报