1. 标准化

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

  1. >>> from sklearn import preprocessing
  2. >>> import numpy as np
  3. >>> X_train = np.array([[ 1., -1., 2.],
  4. ... [ 2., 0., 0.],
  5. ... [ 0., 1., -1.]])
  6. >>> X_scaled = preprocessing.scale(X_train)
  7. >>> X_scaled
  8. array([[ 0. ..., -1.22..., 1.33...],
  9. [ 1.22..., 0. ..., -0.26...],
  10. [-1.22..., 1.22..., -1.06...]])
  11. >>> X_scaled.mean(axis=0)
  12. array([0., 0., 0.])
  13. >>> X_scaled.std(axis=0)
  14. array([1., 1., 1.])

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

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

  1. >>> scaler = preprocessing.StandardScaler().fit(X_train)
  2. >>> scaler
  3. StandardScaler(copy=True, with_mean=True, with_std=True)
  4. >>> scaler.mean_
  5. array([1. ..., 0. ..., 0.33...])
  6. >>> scaler.scale_
  7. array([0.81..., 0.81..., 1.24...])
  8. >>> scaler.transform(X_train)
  9. array([[ 0. ..., -1.22..., 1.33...],
  10. [ 1.22..., 0. ..., -0.26...],
  11. [-1.22..., 1.22..., -1.06...]])
  12. >>> X_test = [[-1., 1., 0.]] # 用同样的均值和方差来对测试数据进行标准化
  13. >>> scaler.transform(X_test)
  14. array([[-2.44..., 1.22..., -0.26...]])

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

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

  1. >>> X_train = np.array([[ 1., -1., 2.],
  2. ... [ 2., 0., 0.],
  3. ... [ 0., 1., -1.]])
  4. ...
  5. >>> min_max_scaler = preprocessing.MinMaxScaler()
  6. >>> X_train_minmax = min_max_scaler.fit_transform(X_train)
  7. >>> X_train_minmax
  8. array([[0.5 , 0. , 1. ],
  9. [1. , 0.5 , 0.33333333],
  10. [0. , 1. , 0. ]])
  11. >>> X_test = np.array([[-3., -1., 4.]]) # 将同样的变换应用到测试数据上
  12. >>> X_test_minmax = min_max_scaler.transform(X_test)
  13. >>> X_test_minmax
  14. array([[-1.5 , 0. , 1.66666667]])

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

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

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

  1. >>> X_train = np.array([[ 1., -1., 2.],
  2. ... [ 2., 0., 0.],
  3. ... [ 0., 1., -1.]])
  4. ...
  5. >>> max_abs_scaler = preprocessing.MaxAbsScaler()
  6. >>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
  7. >>> X_train_maxabs
  8. array([[ 0.5, -1. , 1. ],
  9. [ 1. , 0. , 0. ],
  10. [ 0. , 1. , -0.5]])
  11. >>> X_test = np.array([[ -3., -1., 4.]])
  12. >>> X_test_maxabs = max_abs_scaler.transform(X_test)
  13. >>> X_test_maxabs
  14. array([[-1.5, -1. , 2. ]])
  15. >>> max_abs_scaler.scale_
  16. array([2., 1., 2.])

3. 归一化

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

  1. >>> X = [[ 1., -1., 2.],
  2. ... [ 2., 0., 0.],
  3. ... [ 0., 1., -1.]]
  4. >>> X_normalized = preprocessing.normalize(X, norm='l2')
  5. >>> X_normalized
  6. array([[ 0.40..., -0.40..., 0.81...],
  7. [ 1. ..., 0. ..., 0. ...],
  8. [ 0. ..., 0.70..., -0.70...]])
  9. >>> normalizer = preprocessing.Normalizer().fit(X) # fit does nothing
  10. >>> normalizer
  11. Normalizer(copy=True, norm='l2')
  12. >>> normalizer.transform(X)
  13. array([[ 0.40..., -0.40..., 0.81...],
  14. [ 1. ..., 0. ..., 0. ...],
  15. [ 0. ..., 0.70..., -0.70...]])
  16. >>> normalizer.transform([[-1., 1., 0.]])
  17. array([[-0.70..., 0.70..., 0. ...]])

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

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

Python 学习笔记之——用 sklearn 对数据进行预处理的更多相关文章

  1. Python学习笔记_Python向Excel写入数据

    实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...

  2. Python学习笔记_从CSV读取数据写入Excel文件中

    本示例特点: 1.读取CSV,写入Excel 2.读取CSV里具体行.具体列,具体行列的值 一.系统环境 1. OS:Win10 64位英文版 2. Python 3.7 3. 使用第三方库:csv. ...

  3. 吴裕雄--天生自然python学习笔记:pandas模块导入数据

    有时候,手工生成 Pandas 的 DataFrame 数据是件非常麻烦的事情,所以我们通 常会先把数据保存在 Excel 或数据库中,然后再把数据导入 Pandas . 另 一种情况是抓 取网页中成 ...

  4. 吴裕雄--天生自然python学习笔记:pandas模块DataFrame 数据的修改及排序

    import pandas as pd datas = [[65,92,78,83,70], [90,72,76,93,56], [81,85,91,89,77], [79,53,47,94,80]] ...

  5. Python学习笔记之从文件中读取数据

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...

  6. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  7. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  8. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  9. 【Python学习笔记之二】浅谈Python的yield用法

    在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...

随机推荐

  1. 大数据框架-spark

    相关详细说明:https://www.csdn.net/article/2015-07-10/2825184 RDD:弹性分布式数据集. Operation:Transformation 和Actio ...

  2. Docker 三种UI管理平台

    docker集中化web管理平台 一.shipyard 1.启动docker,下载镜像 # systemctl restart docker # docker pull alpine # docker ...

  3. position定位笔记

    position定位 position一共有四个可选属性:static/relative/absolute/fixed 代码: <style type="text/css"& ...

  4. 只查看xilong.txt[共100行]内第20行到第30行的内容

    1: Test Environment [root@xilong startimes]# seq > xilong.txt [root@xilong startimes]# cat xilong ...

  5. Lavavel5.5源代码 - RedisQueue是怎么实现

    队列的基本功能: 1.立即执行:yes 2.延迟执行:yes 3.保证至少执行一次:yes 4.必须执行且最多执行一次:no 用到的数据结构: list.Sorted sets 延迟执行的机制: 1. ...

  6. STM32F407+STemwin学习笔记之STemwin移植

    原文链接:http://www.cnblogs.com/NickQ/p/8748011.html 环境:keil5.20  STM32F407ZGT6  LCD(320*240)  STemwin:S ...

  7. Rsync+inotify实现文件实时同步#附shell脚本

    强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ...

  8. python基础 抽象类(接口类)

    Python中没有接口.接口类,抽象类:定义 制定一个规范 #必须要导入from abc import ABCMeta,abstractmethod class Payment(metaclass = ...

  9. Go 入门 - 方法和接口

    方法和接口 方法的接受者 Go中没有类,取而代之的是在结构体上定义的方法 为了将方法(函数)绑定在某一类结构体上,我们在定义函数(方法)时引入"接受者"的概念. 方法接受者在它自己 ...

  10. 北京Uber优步司机奖励政策(1月1日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...