cogito ergo sum
一、问题描述
在使用数据对算法进行训练时,需要先对数据进行预处理。现在主要来学习一下scikit-learn中的数据预处理的方法。
二、具体方法
2.1标准化(standardization)
假设数据是存放在矩阵中,每个矩阵的行是一个数据x,列则代表数据的特征。
标准化的公式为:
$x_{mean}$代表属性的平均值,$x_{std}$代表属性的方差。
from sklearn import preprocessing
import numpy as np
x_scale=preprocessing.scale(x)
sklearn.preprocessing.scale(X, axis=0, with_mean=True,with_std=True,copy=True)
参数解释:
X:数组或者矩阵
axis:int类型,初始值为0,axis用来计算均值 means 和标准方差 standard deviations. 如果是0,则单独的标准化每个特征(列),如果是1,则标准化每个观测样本(行)。
with_mean: boolean类型,默认为True,表示将数据均值规范到0
with_std: boolean类型,默认为True,表示将数据方差规范到
2.2 特征取值缩小到(0,1)
线性放缩的公式为:
均是以特征,也就是列为单位进行线性放缩
x=preprocessing.minmax_scale(x)
2.3正则化(Normalization)
对每个样本计算其p-范数,然后对每个样本的元素除以这个数,这样每个样本的p-范数都是1
x=preprocessing.normalize(x,norm='2')
2.4二值化
将每个数据变为0或者1.
preprocessing.binarize(x,threshold=0.0)
2.5缺失值处理
许多数据集在实际使用的时候都会出现缺失值的情况。
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
#先对imp类进行训练,通过数据。
然后使用
imp.transform(y)
对y的缺失值进行补充