欢迎关注”生信修炼手册”!
数据的质量决定了模型的上限,在真实的数据分析中,输入的数据会存在缺失值,不同特征的取值范围差异过大等问题,所以首先需要对数据进行预处理。
预处理是数据挖掘的第一步,该步骤实际上包含了很多不同的操作手法,大致分为以下几类
1. 缺失值的处理,当样本量很大,缺失值很少时,直接删除缺失值对应的样本,并不会导致样本规模的大幅下降,此时直接删除缺失值是一种可取的办法,但是对于小样本量,且缺失值较多的场景,就需要考虑对缺失值进行插补
2. 标准化,很多的机器学习算法对特征的分布是有预定的假设的,比如需要服从正态分布,对于不符合分布的数据,需要进行标准化,转化为正态分布,另外,考虑到不同特征的量纲不同,也需要进行缩放,比如到缩放到0到1的区间,保证了不同特征在模型中的可比性
3. 稀疏化,也叫做离散化,指的是根据业务场景对特征进行分段处理,比如按照某个阈值,将考试分数划分为及格和不及格两类,从而将连续性的数值变换为0,1两个离散型的变量
4. 特征编码,对于分类变量,近期映射为数值型
5. 特征提取,适用于自然语言处理,图形识别领域的机器学习,因为原始的数据数据是文本,图像等数据,不能直接用于建模,所以需要通过特征提取转换为适合建模的矩阵数据
在scikit-learn中,在preprocessing子模块中提供了多种预处理的方法,具体用法如下
1. 标准化
标准化的目标是使得变量服从标准正态分布,标准化的方式如下
代码如下
>>> from sklearn import preprocessing
>>> import numpy as np
>>> x = np.array([1, -2, 3, -4, 5, 6]).reshape(-1, 1)
>>> x
array([[ 1],
[-2],
[ 3],
[-4],
[ 5],
[ 6]])
>>> scaler = preprocessing.StandardScaler().fit(x)
>>> x_scaled = scaler.transform(x)
>>> x_scaled
array([[-0.13912167],
[-0.97385168],
[ 0.41736501],
[-1.53033836],
[ 0.97385168],
[ 1.25209502]])
```
2. 线性缩放
适合针对标准差很小的数据集进行处理,根据数据的最大值和最小值,将原始数据缩放到0到1这个区间代码如下
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> x_scaled = min_max_scaler.fit_transform(x)
>>> x_scaled
array([[0.5],
[0.2],
[0.7],
[0. ],
[0.9],
[1. ]])
也可以通过feature_range参数设定具体的缩放区间
>>> min_max_scaler = preprocessing.MinMaxScaler(feature_range=(-5, 5))
>>> x_scaled = min_max_scaler.fit_transform(x)
>>> x_scaled
array([[ 0.],
[-3.],
[ 2.],
[-5.],