使用sklearn预处理数据之标准化、归一化、正则化

2023-11-04

前言

sklearn.preprocessingsklearn库中非常重要的一个module,集成了很多预处理数据的方法,今天对常用的几个加以解释说明。

二值化

sklearn.preprocessing.binarizer(threshold=0.0, copy=True)

对数据根据给定的阈值将其映射到0和1,其中阈值默认为0.0,可接收float类型的阈值,注意数据大于阈值的时候映射为1,小于等于阈值的时候映射为0。
可用的方法有:

方法 说明
.fit(x[,y]) fit data
.fit_transform(x[,y]) fit to data, and transform it
.transform(x[,y]) transform data
.get_params() get parameters of the estimator
.set_params() set parameters of the estimator

example:

>>> from sklearn.preprocessing import Binarizer
>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> binary = Binarizer() 
>>> transformer =binary.fit(X) # fit does nothing.
>>> transformer
Binarizer(copy=True, threshold=0.0)
>>> transformer.transform(X)
array([[1., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])

binary = Binarizer()实例化一个阈值为0的二值化对象,transformer =binary.fit(X)使用这个二值化对象的fit()方法去fit X,返回一个二值化类的实例化对象,注意此时X还没有被二值化,transformer.transform(X)调用二值化对象的transform()方法对X进行二值化,返回二值化后的X。fit()方法transform()方法也可以合并为一个方法fit_transform(),这里分部调用旨在说明它们各自进行的操作。


最小最大化(属性缩放)

sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)

将数据均匀映射到给定的range(min,max),默认range为(0, 1),计算方式如下:

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

首先计算出归一化后的X_std,X与最小值的差与特征的极差(最大值与最小值之差)相比,此时将X映射到(0,1)区间上(最小值映射为0,最大值映射为1)。若采用默认的(0,1)区间,下一步不需要再计算,且等价于对X进行归一化。若指定了目标区间,则再进行下一步,将标准化后的X_std均匀映射到给定的区间上。
可用的方法有:

方法 说明
.fit(x[,y]) 计算X中的最小值和最大值,以便后面使用
.fit_transform(x[,y]) 对X做最小最大化,映射到给定区间
.transform(x[,y]) 用MinMaxScaler()对象中已经使用fit()方法计算出来的最小最大值将X映射到指定的区间
.get_params() get parameters of the estimator
.set_params() set parameters of the estimator
.inverse_transform(X) 与transform对应,对X做反最小最大化,即还原过程

example:

>>> from sklearn.preprocessing import MinMaxScaler
>>>
>>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
>>> scaler = MinMaxScaler()
>>> print(scaler.fit(data))
MinMaxScaler(copy=True, feature_range=(0, 1))
>>> print(scaler.data_max_)
[ 1. 18.]
>>> print(scaler.transform(data))
[[0.   0.  ]
 [0.25 0.25]
 [0.5  0.5 ]
 [1.   1.  ]]
>>> print(scaler.transform([[2, 2]]))
[[1.5 0. ]]

scaler = MinMaxScaler()实例化一个最小最大化对象,scaler.fit(data)计算data的最小值和最大值,返回一个对象,此时可查看此对象的属性值scaler.data_max_,然后使用scaler.transform(data)对data进行最小最大化,返回最小最大化后的结果。注意:在这个例子中,我们使用data来fit这个对象,然后去transform data,结果在(0,1)之间;我们去transform 其他的数据,则结果可能不在(0,1)区间。在机器学习过程中,我们通常使用训练数据去fit对象,然后去transform测试数据。


正则化

sklearn.preprocessing.Normalizer(norm=’l2’, copy=True)

对样本进行l1或者l2正则化,使其l1l2范数为1,标准说法是:对具有至少一个非零分量的每个样本(即数据矩阵的每一行)都独立于其他样本进行缩放,使其范数(l1l2)等于1。
l1正则化的计算方式:
X m ( i ) = X m ( i ) ∑ i X m ( i ) X_m^{(i)}=\frac{X_m^{(i)}}{\sum_iX_m^{(i)}} Xm(i)=iXm(i)Xm(i)这里 X m ( i ) X_m^{(i)} Xm(i)表示第 m m m个样本,第 i i i个特征。
l2正则化的计算方式:
X m ( i ) = X m ( i ) 2 ∑ i X m ( i ) 2 X_m^{(i)}=\sqrt\frac{{X_m^{(i)}}^2}{{\sum_iX_m^{(i)}}^2} Xm(i)=iXm(i)2Xm(i)2 这里 X m ( i ) X_m^{(i)} Xm(i)表示第 m m m个样本,第 i i i个特征。
可用的方法有:

方法 说明
.fit(x[,y]) fit data
.fit_transform(x[,y]) fit to data, and transform it
.transform(x[,y]) transform data
.get_params() get parameters of the estimator
.set_params() set parameters of the estimator

example:

>>> from sklearn.preprocessing import Normalizer
>>> X = [[4, 1, 2, 2],
...      [1, 3, 9, 3],
...      [5, 7, 5, 1]]
>>> transformer = Normalizer().fit(X) # fit does nothing.
>>> transformer
Normalizer(copy=True, norm='l2')
>>> transformer.transform(X)
array([[0.8, 0.2, 0.4, 0.4],
       [0.1, 0.3, 0.9, 0.3],
       [0.5, 0.7, 0.5, 0.1]])

同样,这里的fit()方法只是用数据 X X X确定了标准化对象的参数,返回一个对象,然后transform()才是真正的实现标准化过程,返回标准化后的结果。


标准化

标准化通过计算训练集中样本的相关统计量(均值和单位方差),存储均值和标准差,对每个特征单独进行中心化和缩放,使用变换方法对测试数据进行使用。
标准化的计算方式是:
X n o r m = X − X m e a n X s t d X_{norm}=\frac{X-X_{mean}}{X_{std}} Xnorm=XstdXXmean

数据集的标准化是许多机器学习估计器的一个常见要求:如果单个特征看起来不像标准正态分布数据(例如均值为0的高斯分布和单位方差),它们的性能可能会很差。

例如,在学习算法的目标函数中使用的许多元素(如支持向量机的RBF核或线性模型的L1和L2正则化)都假设所有特征以0为均值,并且具有相同的方差。如果一个特征的方差比其他特征大几个数量级,那么它可能会主导目标函数,使估计器无法按照预期正确地学习其他特征。

该scaler还可以通过传递with_mean=False来应用于稀疏的CSR或CSC矩阵,以避免破坏数据的稀疏结构。

标准化有两种实现方式,,一是调用sklearn.preprocessing.scale()函数,二是实例化一个sklearn.preprocessing.StandardScaler()对象,后者的好处是可以保存训练得到的参数(均值、方差),直接使用其对象对测试数据进行转换。

sklearn.preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True)[source]

sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)

可用的方法有:

方法 说明
.fit(x[,y]) 计算X中的均值和标准差,以便后面使用
.fit_transform(x[,y]) 对X做标准化,映射为0均值单位方差的正态分布
.transform(x[,y]) 用存有均值和方差的标准化方法对x做标准化
.get_params() get parameters of the estimator
.set_params() set parameters of the estimator
.inverse_transform(X) 将数据回退到原始表示形式
.partial_fit(X[, y]) 为以后的缩放在线计算均值和标准差

example:

>>> from sklearn.preprocessing import StandardScaler
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> print(scaler.mean_)
[0.5 0.5]
>>> print(scaler.transform(data))
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]
>>> print(scaler.transform([[2, 2]]))
[[3. 3.]]

partial_fit(X[, y])的说明:

Online computation of mean and std on X for later scaling. All of X is processed as a single batch. This is intended for cases when fit is not feasible due to very large number of n_samples or because X is read from a continuous stream.

The algorithm for incremental mean and std is given in Equation 1.5a,b in Chan, Tony F., Gene H. Golub, and Randall J. LeVeque. “Algorithms for computing the sample variance: Analysis and recommendations.” The American Statistician 37.3 (1983): 242-247:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用sklearn预处理数据之标准化、归一化、正则化 的相关文章

随机推荐

  • 对接微信支付接口开发详细步骤

    1 第一步 我们需要从哪里入手 当然我们需要有微信商家账号怎样申请商家账号呢 当然还是需要有一个已经审核过的微信公众号 这样的话 首先你必须先有个审核通过的微信公众号 这里就不说怎么审核公众号了这个公众号比较好弄 如何申请微信商户号 如图
  • ORA-01578的处理

    某天一台数据库测试机出现 ORA 01578 虽说这是测试机但是这是客户用的 随便处理也不行 仔细研究一下 ORA 01578 ORACLE data block corrupted file 2 block 69449 ORA 01110
  • LeetCode(Python)—— 只出现一次的数字(简单)

    只出现一次的数字 概述 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗 输入 2 2 1 输出 1 输入 4 1 2 1 2
  • [机缘参悟-77]:深度思考-《天道》中强势文化、弱势文化与人的行为模式的关系

    目录 一 文化属性与人的行为模式 二 强势文化与弱势文化 2 1 弱势文化的本质与其行为模式 2 2 强势文化的本质与其行为模式 三 强势文化造就强者 弱势文化造就弱者 一 文化属性与人的行为模式 文化 是一个广义词 它的概括面相当的广泛
  • 二分查找算法及其实例

    二分查找算法及其实例 问题一 二分查找 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 示例 1 输入 nums 1 0
  • Win7连接网络打印机步骤

    Win7客户端添加网络打印机 1 进入打印机官网 先下载对应型号的打印机驱动 2 找到控制面板 gt 点击硬件和声音 gt 设备和打印机 3 点击添加打印机按钮 选择添加网络 无线或Bluetooth打印机 4 搜索可用的打印机 5 找到对
  • 2023中国民营100强投资趋势

    导读 根据民企注册地了解到 民企100强企业几乎一半分布在华东地区 其次分布在华南 华北和华中地区 从省份来看 广东 浙江是主要分布的省份 企业数量分别是19家 江苏省有14家 北京市有8家 上海市有7家 河北省 山东省各6家 关注公众号
  • taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1 render 函数 2 constructor 构造函数 3 在各个生命周期钩子函数中修改state的属性或者参数 4
  • 华为OD机试真题 (python)之支持优先级的队列

    题目描述 支持优先级的队列 实现一个支持优先级的队列 高优先级先出队列 同优先级时先进先出如果两个输入数据和优先级都相同 则后一个数据不入队列被丢弃 队列存储的数据内容是一个整数 输入描述 组待存入队列的数据 包含内容和优先级 输出描述 队
  • java corn 定时任务调度,每分钟执行一次,每半个小时执行一次

    java corn 表达式 每分钟执行一次 Scheduled cron 0 1 每半个小时执行一次 Scheduled cron 0 0 30 springboot 类 EnableScheduling Configuration Slf
  • 自定义截图方法,如何在RobotFrameWork的日志中显示

    用RobotFrameWork做UI自动化时 一般初学者都会选择第三方扩展库SeleniumLibrary进行UI自动化测试 随然已经封装许多浏览器操作方法 但在实际应用 某些方法还是不能满足我们的需求 于是乎 我们就舍弃SeleniumL
  • 以服务方式启动安防监控系统EasyNVR程序出现播放异常,是什么原因?

    EasyNVR安防视频监控平台的特点是基于RTSP Onvif协议 将前端设备统一接入 在平台进行转码 直播 处理及分发 在智慧安防视频监控场景中 EasyNVR可实现实时监控 云端录像 检索与回放 云存储 告警 级联等视频能力 极大满足行
  • 1.2 Ubauntu 使用

    一 完成VMware Tools安装 双击 VMwareTool 打开 Ubuntu 终端快捷键 Alt Control T 切换汉语的快捷键是Alt 空格 ls 打印出当前所在目录中所有文件和文件夹 cd 桌面 进入桌面文件夹 sudo
  • java生成有理数_第四届蓝桥杯Java B——有理数类

    有理数就是可以表示为两个整数的比值的数字 一般情况下 我们用近似的小数表示 但有些时候 不允许出现误差 必须用两个整数来表示一个有理数 这时 我们可以建立一个 有理数类 下面的 class Rational private long ra
  • Python-使用空值进行赋值-None

    0 摘要 在Python中 尤其是数组当中 对于一些异常值往往需要进行特殊处理 为了防止异常值与正常数据混淆 影响最终计算结果 常用的方法是将异常值置零或者置空 置零的方法较为简单 本文主要介绍如果对python中的数据进行置空 1 赋值为
  • 【TreeMap】-根据 key 或 value 排序

    1 根据 key 排序 引言 TreeMap 中key 可以自动对 String 类型或8大基本类型的包装类型进行排序 但是 TreeMap 无法直接对自定义类型进行排序 当我们想对对 TreeMap 中 key 中的自定义类型排序时 必须
  • 已解决:极品飞车9 Most Wanted无故跳出回桌面问题

    情况 1 可以进入游戏 2 新建用户 并可以进行第一项挑战赛 3 进行到某项赛事 生涯或挑战 时 再无法进去了 Loading 之后立即跳回桌面 程序结束 如果情况相同 那你可有救了 几经周折 找到这个地址 NEED For SPEED M
  • 使用io流一行一行读取txt文件

    io流分为字符流和字节流 字节流是万能流 可以处理任何数据 包含图片 视频 文字等 传输单位为字节 字符流只能读取文本数据 传输单位为字符 一 字节 的定义 字节 Byte 是一种计量单位 表示数据量多少 它是计算机信息技术用于计量存储容量
  • Linux系统与Windows系统之间的文件上传与下载

    Linux系统与Windows系统之间的文件上传与下载 在日常开发过程中 常常会遇到需要在Linux与Windows系统之间的文件的传输 有一些常用的方法与命令 在此记录 1 文件上传 从Windows系统上传文件到Linux系统中 有以下
  • 使用sklearn预处理数据之标准化、归一化、正则化

    文章目录 前言 二值化 最小最大化 属性缩放 正则化 标准化 前言 sklearn preprocessing是sklearn库中非常重要的一个module 集成了很多预处理数据的方法 今天对常用的几个加以解释说明 二值化 sklearn