sklearn数据标准化
作者:董天一
学习机器学习的第一步就是要先学会做特征工程,python中的机器学习库sklearn就提供了许多便利的方法来做特征工程。数据的标准化是特征工程里面的重要环节,今天我们就来学习一下用sklearn做数据的标准化。
sklearn.preprocessing提供了许多方便的用于做数据预处理工具,在数据标准化方面,sklearn.preprocessing提供了几种scaler进行不同种类的数据标准化操作,今天的主要内容就是几种scaler的使用方法。
首先导入sklearn中的preprocessing库以及numpy。
>>> import sklearn.preprocessing as sp
>>> import numpy as np
然后创建一个numpy数组。
>>> test_X = np.array([[1., -1., 2., 0], [3., -2., 4., -1], [2., 0, -3., 1.]])
>>> test_X
用sklearn实现正态标准化有两种方法,一是利用scale函数,二是利用StandardScaler类。
正态标准化
方法一
>>> X_scaled = sp.scale(test_X)
>>> X_scaled
>>> #查看标准化后数据的均值与标准差
>>> X_scaled.mean()
>>> X_scaled.std()
方法二
>>> my_scaler = sp.StandardScaler().fit(test_X)
>>> X_scaled = my_scaler.transform(test_X)
>>> X_scaled
使用scale函数更为方便快速,而使用StandardScaler类的好处是可以把相同的标准化传递到任意其他数组中。假设我们上面的test_X是一个训练集(虽然名字不太像),那么如果想把相同的标准化操作也在测试集中执行,只要把transform的数组换成测试集的数组就可以了。
零一标准化
与StandardScaler这个类相似的,sklearn.preprocessing也同样有一个类用于零一标准化的,那就是MinMaxScaler。
>>> my_scaler2 = sp.MinMaxScaler().fit(test_X)
>>> X_scaled2 = my_scaler2.transform(test_X)
>>> X_scaled2
如果想要指定数据标准化的范围,可以在实例化MinMaxScalre对象时提供参数feature_range = (min, max)。
>>> my_scaler3 = sp.MinMaxScaler(feature_range = (0, 10)).fit(test_X) #[0 , 10]标准化
>>> X_scaled3 = my_scaler3.transform(test_X)
>>> X_scaled3
零中心化数据和稀疏数据的标准化
零中心化数据和稀疏数据标准化实质上是[-1, 1]的标准化,也算是零一标准化的一个特例。sklearn.preprocessing同样也提供了这样一个类,MaxAbsScaler。
>>> my_scaler4 = sp.MaxAbsScaler().fit(test_X)
>>> X_scaled4 = my_scaler4.transform(test_X)
>>> X_scaled4
异常值较多数据的标准化
如果数据当中异常值过多,均值和标准差都会有较大的偏差,这时采用RobustScaler进行标准化较为稳妥(鲁棒。。。)。
>>> my_scaler5 = sp.RobustScaler().fit(test_X)
>>> X_scaled5 = my_scaler5.transform(test_X)
>>> X_scaled5
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
1.崔老师爬虫实战案例免费学习视频。
2.丘老师数据科学入门指导免费学习视频。
3.陈老师数据分析报告制作免费学习视频。
4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
5.丘老师Python网络爬虫实战免费学习视频。