详解特征归一化
2017-02-20 20:50
232 查看
介绍
机器学习中,提取某个样本特征的过程,叫特征工程。
同一个样本,可能具备不同类型的特征,各特征的数值大小范围不一致。所谓
特征归一化,就是将不同类型的特征数值大小变为一致的过程。
举例:假设有4个样本及他们的特征如下
样本 | 特征1 | 特征2 |
---|---|---|
1 | 10001 | 2 |
2 | 16020 | 4 |
3 | 12008 | 6 |
4 | 13131 | 8 |
样本 | 特征1 | 特征2 |
---|---|---|
1 | 0 | 0 |
2 | 1 | 0.33 |
3 | 0.73 | 0.67 |
4 | 0.81 | 1 |
特征归一化有很多不同的叫法,比如:
特征缩放,
Feature Normalization,
Feature Scaling,其实都是同一个意思。
特征归一化的意义
各特征之间的大小范围一致,才能使用距离度量等算法加速梯度下降算法的收敛
在SVM算法中,一致化的特征能加速寻找支持向量的时间
不同的机器学习算法,能接受的输入数值范围不一样
两种常用特征归一化方法
下面详细介绍sklearn中最常用的特征归一化方法
MinMaxScaler和
StandardScaler。
MinMaxScaler
使用
在sklearn中,
sklearn.preprocessing.MinMaxScaler是一种用于特征归一化的方法。使用示例如下
from sklearn.preprocessing import MinMaxScaler x=[[10001,2],[16020,4],[12008,6],[13131,8]] min_max_scaler = MinMaxScaler() X_train_minmax = min_max_scaler.fit_transform(x)#归一化后的结果 X_train_minmax array([[ 0. , 0. ], [ 1. , 0.33333333], [ 0.33344409, 0.66666667], [ 0.52001994, 1. ]])
它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据
MinMaxScaler的参数
feature_range调整)。下面代码能将特征归一化到[-1,1]之间。
min_max_scaler = MinMaxScaler(feature_range=(-1,1)) X_train_minmax = min_max_scaler.fit_transform(x)#归一化后的结果 X_train_minmax array([[-1. , -1. ], [ 1. , -0.33333333], [ 0.46574339, 0.33333333], [ 0.6152873 , 1. ]])
实现
MinMaxScaler的实现公式如下
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) X_scaled = X_std * (max - min) + min
这是向量化的表达方式,说明X是矩阵,其中
X_std:将X归一化到[0,1]之间
X.min(axis=0)表示列最小值
max,min表示
MinMaxScaler的参数
feature_range参数。即最终结果的大小范围
以下例说明计算过程(max=1,min=0)
样本 | 特征1 | 特征2 |
---|---|---|
1 | 10001 | 2 |
2 | 16020 | 4 |
3 | 12008 | 6 |
4 | 13131 | 8 |
X.max | 16020 | 8 |
X.min | 10001 | 2 |
S11=(10001-10001)/(16020-10001)=0
S21=(16020-10001)/(16020-10001)=1
S31=(12008-10001)/(16020-10001)=0.333444
S41=(13131-10001)/(16020-10001)=0.52002
S12=(2-2)/(8-2)=0
S22=(4-2)/(8-2)=0.33
S32=(6-2)/(8-2)=0.6667
S42=(8-2)/(8-2)=1
可见,结果与章节“MinMaxScaler使用”中的计算结果一致。
StandardScaler
使用
在sklearn中,
sklearn.preprocessing.StandardScaler是一种用于特征归一化的方法。使用示例如下
from sklearn.preprocessing import StandardScaler x=[[10001,2],[16020,4],[12008,6],[13131,8]] X_scaler = StandardScaler() X_train = X_scaler.fit_transform(x) X_train array([[-1.2817325 , -1.34164079], [ 1.48440157, -0.4472136 ], [-0.35938143, 0.4472136 ], [ 0.15671236, 1.34164079]])
归一化后,矩阵每列的均值为0,标准差为1。注意,这里的标准差是指加了
Delta Degrees of Freedom因子后的标准差,这与传统的标准差计算公式有区别。(在numpy中,有std()函数用于计算标准差)
实现
StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。以下例说明计算过程,注意标准差是用
np.std()计算的。
样本 | 特征1 | 特征2 |
---|---|---|
1 | 10001 | 2 |
2 | 16020 | 4 |
3 | 12008 | 6 |
4 | 13131 | 8 |
列均值 | 12790 | 5 |
列标准差 | 2175.96 | 2.236 |
S11=(10001-12790)/2175.96=-1.28173
S21=(16020-12790)/2175.96=1.484
S31=(12008-12790)/2175.96=-0.35938
S41=(13131-12790)/2175.96=0.1567
S12=(2-5)/2.236=-1.342
S22=(4-5)/2.236=-0.447
S32=(6-5)/2.236=0.447
S42=(8-5)/2.236=1.3416
总结
本文详细介绍了MinMaxScaler和
StandardScaler的计算过程。有这个过程可以看出:
当我们需要将特征值都归一化为某个范围[a,b]时,选
MinMaxScaler
当我们需要归一化后的特征值均值为0,标准差为1,选
StandardScaler
参考
特徵縮放,https://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%B5%E7%B8%AE%E6%94%BEnumpy与matlab标准差计算区别,http://stackoverflow.com/questions/27600207/why-does-numpy-std-give-a-different-result-to-matlab-std
相关文章推荐
- 主成分分析(PCA)特征选择算法详解
- ios新特征 ARC详解
- 杀毒与免杀技术详解之二:特征码定位-工具及原理
- Hu矩、仿射矩和归一化傅里叶描述子(NFD)不变量特征级融合
- 黑马程序员_05. 面向对像的三大特征(详解)
- 详解oracle 12c数据库新特征CDB与PDB(热插拔数据库)以及表空间管理
- 语音特征参数MFCC提取过程详解
- 特征检测详解
- 能被2、3、4、5、6、7、8、9、10、11、13、25整除的整数的特征是?有趣的21详解
- C#面向对象特征的具体实现及作用详解
- 尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)
- 机器学习中特征归一化的方法
- 面向对象的三个基本特征详解
- 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题
- Spark Mllib里如何将trainDara训练数据的分类特征字段转换为数值字段(图文详解)
- 尺度不变特征变换匹配算法详解
- 模式识别 - 特征归一化 及 测试 代码(Matlab)
- SIFT特征详解
- 神经网络是怎样理解图片的?谷歌大脑研究员详解特征可视化
- 尺度不变特征变换匹配算法详解(转载)