博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 学习笔记之——用 sklearn 对数据进行预处理
阅读量:5024 次
发布时间:2019-06-12

本文共 3615 字,大约阅读时间需要 12 分钟。

1. 标准化

标准化是为了让数据服从一个零均值和单位方差的标准正态分布。也即针对一个均值为 \(mean\) 标准差为 \(std\) 的向量 \(X\) 中的每个值 \(x\),有 \(x_{scaled} = \frac{x - mean}{std}\)

>>> from sklearn import preprocessing>>> import numpy as np>>> X_train = np.array([[ 1., -1.,  2.],...                     [ 2.,  0.,  0.],...                     [ 0.,  1., -1.]])>>> X_scaled = preprocessing.scale(X_train)>>> X_scaled                                          array([[ 0.  ..., -1.22...,  1.33...],       [ 1.22...,  0.  ..., -0.26...],       [-1.22...,  1.22..., -1.06...]])>>> X_scaled.mean(axis=0)array([0., 0., 0.])>>> X_scaled.std(axis=0)array([1., 1., 1.])

默认针对每列来进行标准化,也即针对每个特征进行标准化。可以通过设置 axis=1 来对每行进行标准化,也即对每个样本进行标准化。

此外,我们还可以用训练数据的均值和方差来对测试数据进行相同的标准化处理。

>>> scaler = preprocessing.StandardScaler().fit(X_train)>>> scalerStandardScaler(copy=True, with_mean=True, with_std=True)>>> scaler.mean_                                      array([1. ..., 0. ..., 0.33...])>>> scaler.scale_                                       array([0.81..., 0.81..., 1.24...])>>> scaler.transform(X_train)                           array([[ 0.  ..., -1.22...,  1.33...],       [ 1.22...,  0.  ..., -0.26...],       [-1.22...,  1.22..., -1.06...]])>>> X_test = [[-1., 1., 0.]] # 用同样的均值和方差来对测试数据进行标准化>>> scaler.transform(X_test)                array([[-2.44...,  1.22..., -0.26...]])

2. 将数据缩放到一定范围

有时候,我们需要数据处在给定的最大值和最小值范围之间,常常是 0 到 1 之间,这样数据的最大绝对值就被限制在了单位大小以内。

>>> X_train = np.array([[ 1., -1.,  2.],...                     [ 2.,  0.,  0.],...                     [ 0.,  1., -1.]])...>>> min_max_scaler = preprocessing.MinMaxScaler()>>> X_train_minmax = min_max_scaler.fit_transform(X_train)>>> X_train_minmaxarray([[0.5       , 0.        , 1.        ],       [1.        , 0.5       , 0.33333333],       [0.        , 1.        , 0.        ]])>>> X_test = np.array([[-3., -1.,  4.]]) # 将同样的变换应用到测试数据上>>> X_test_minmax = min_max_scaler.transform(X_test)>>> X_test_minmaxarray([[-1.5       ,  0.        ,  1.66666667]])

当 MinMaxScaler() 传入一个参数 feature_range=(min, max),我们可以将数据缩放到我们想要的范围内。

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))X_scaled = X_std * (max - min) + min

此外,我们还可以将数据限制在 [-1, 1] 之间,通过除以每个特征的最大绝对值。

>>> X_train = np.array([[ 1., -1.,  2.],...                     [ 2.,  0.,  0.],...                     [ 0.,  1., -1.]])...>>> max_abs_scaler = preprocessing.MaxAbsScaler()>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)>>> X_train_maxabs               array([[ 0.5, -1. ,  1. ],       [ 1. ,  0. ,  0. ],       [ 0. ,  1. , -0.5]])>>> X_test = np.array([[ -3., -1.,  4.]])>>> X_test_maxabs = max_abs_scaler.transform(X_test)>>> X_test_maxabs                 array([[-1.5, -1. ,  2. ]])>>> max_abs_scaler.scale_         array([2.,  1.,  2.])

3. 归一化

归一化的目的是让每个样本具有单位范数。也即针对向量 \(X\) 中的每个值 \(x\),有 \(x_{normalized} = \frac{x}{||X||}\)

>>> X = [[ 1., -1.,  2.],...      [ 2.,  0.,  0.],...      [ 0.,  1., -1.]]>>> X_normalized = preprocessing.normalize(X, norm='l2')>>> X_normalized                                      array([[ 0.40..., -0.40...,  0.81...],       [ 1.  ...,  0.  ...,  0.  ...],       [ 0.  ...,  0.70..., -0.70...]])>>> normalizer = preprocessing.Normalizer().fit(X)  # fit does nothing>>> normalizerNormalizer(copy=True, norm='l2')>>> normalizer.transform(X)                            array([[ 0.40..., -0.40...,  0.81...],       [ 1.  ...,  0.  ...,  0.  ...],       [ 0.  ...,  0.70..., -0.70...]])>>> normalizer.transform([[-1.,  1., 0.]])             array([[-0.70...,  0.70...,  0.  ...]])

默认是对每行数据用 \(L2\) 范数进行归一化,我们也可以选择 \(L1\) 范数或者针对每列进行归一化。

获取更多精彩,请关注「seniusen」!

1240

转载于:https://www.cnblogs.com/seniusen/p/10017584.html

你可能感兴趣的文章
quickSort by javascript
查看>>
判断手机旋转代码 屏幕旋转的事件和样式
查看>>
hdu1071算面积问题
查看>>
把一列多行数据合并成一条数据
查看>>
ansible之setup、条件判断、tags、循环handlers
查看>>
数据泵如何生成导出文件的DDL脚本
查看>>
Git/Bitbucket Workflow
查看>>
pygame学习资料
查看>>
6.上传前图片预览
查看>>
腾讯云:搭建 Node.js 环境
查看>>
status 返回当前请求的http状态码
查看>>
Docker基本操作
查看>>
向值栈放数据
查看>>
List集合(有序单列集合)
查看>>
初识跨终端Web
查看>>
CountDownTimer完整具体演示样例
查看>>
ubuntu删除g2o
查看>>
ThreadLocal的认知与见解
查看>>
利用Google Map API获取给定地址的经纬度
查看>>
iOS 8个实用小技巧(总有你不知道的和你会用到的)
查看>>