机器学习算法无法理解原始数据,所以需对原始数据进行预处理,常用预处理如下:
预处理主要使用了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(" L1 normalized data: ", 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(" Binarized data: ", data_binarized) #方法二: binarizer = preprocessing.Binarizer(threshold=0) print(" Binarized data: ", 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机器学习经典实例