python归一化函数_机器学习-归一化方法

python归一化函数_机器学习-归一化方法1.归一化(Normalization)引入归一化,是由于在不同评价指标(特征指标)中,其量纲或是量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,可能导致某些指标被忽视,影响到数据分析的结果。为了消除特征数据之间的量纲影响,需要进行归一化处理,以解决特征指标之间的可比性。原始数据经过归一化处理后,各指标处于同一数量级,以便进行综合对比评价。1.必要性举例:以房价问题为例,假设我们…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. 归一化 (Normalization)

引入归一化,是由于在不同评价指标(特征指标)中,其量纲或是量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,可能导致某些指标被忽视,影响到数据分析的结果。

为了消除特征数据之间的量纲影响,需要进行归一化处理,以解决特征指标之间的可比性。原始数据经过归一化处理后,各指标处于同一数量级,以便进行综合对比评价。

1. 必要性

举例:

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

h_\theta (x) = \theta_1 x_1 + \theta_2 x_2

Cost function 等高线可能如下:

python归一化函数_机器学习-归一化方法

解决的方法是尝试将所有特征的尺度都尽量缩放到 0 到 1 之间。如图:

python归一化函数_机器学习-归一化方法

2. 场合

图像或是视频的数据值处于固定区间,往往对整个样本进行归一化。但是,有一些样本,比如多个特征序列组成的样本,要对每列进行归一化。还有一些是多传感器序列以及多通道信号,都要分别对每列进行归一化。

总结就是如果样本中具有不同量纲的指标,最好进行归一化。 在深度学习任务中,仍然需要进行归一化。

3. 归一化方法

3.1 min-max 标准化

又称线性归一化、离差归一化。

使用线性函数将原始数据线性化的方法转换到[0 1]的范围,归一化公式如下:

x_{norm} = \frac{x – x_{min}}{x_{max} – x_{min}}

使用场景概括:

在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用此方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

3.2 Z-score 标准化方法

零均值标准化,此归一化方式要求原始数据的分布可以近似为高斯分布

将原始数据集归一化为均值为0、方差1的数据集。

x^* = \frac{x – \mu}{\sigma}

其中,\mu、\sigma 分别为原始数据集的均值和方法。

使用场景概括:

在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,此法表现更好。

3.3 非线性归一化

常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。例如:

x^* = log_{10}(x)

2. 归一化方法 python 实现

Python实现上述归一化方法。

2.1 自实现

def minMaxNorm(dataSet_org):

”’min-max normalization”’

numSamples, dim = dataSet_org.shape

dataSet_norm = np.zeros((numSamples, dim), dtype=np.float32)

minData = np.min(dataSet_org, axis=0)

maxData = np.max(dataSet_org, axis=0)

for ii in range(dim):

dataSet_norm[:, ii] = (dataSet_org[:, ii] – minData[ii]) / (maxData[ii] – minData[ii])

return dataSet_norm

def zScoreNorm(dataSet_org):

”’Z score normalization”’

numSamples, dim = dataSet_org.shape

dataSet_norm = np.zeros((numSamples, dim), dtype=np.float32)

mu = np.average(dataSet_org, axis=0)

sigma = np.std(dataSet_org, axis=0)

for ii in range(dim):

dataSet_norm[:, ii] = (dataSet_org[:, ii] – mu[ii]) / sigma[ii]

return dataSet_norm

2.2 Scikit-learn 函数

2.2.1 max-min 归一化

MinMaxScaler缩放到 [0, 1]

>>> from sklearn import preprocessing

>>> import numpy as np

>>> 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_minmax

array([[ 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_minmax

array([[-1.5 , 0. , 1.66666667]])

检查缩放器(scaler)属性,来观察在训练集中学习到的转换操作的基本性质:

>>> min_max_scaler.scale_

array([ 0.5 , 0.5 , 0.33…])

>>> min_max_scaler.min_

array([ 0. , 0.5 , 0.33…])

2.2.2 零均值归一化

StandardScaler:

>>> X_train = np.array([[ 1., -1., 2.],

… [ 2., 0., 0.],

… [ 0., 1., -1.]])

>>> scaler = preprocessing.StandardScaler().fit(X_train)

>>> scaler

StandardScaler(copy=True, with_mean=True, with_std=True)

>>> scaler.mean_

array([ 1. …, 0. …, 0.33…])

>>> scaler.scale_

array([ 0.81…, 0.81…, 1.24…])

>>> X_train_scaled = scaler.transform(X_train)

array([[ 0. …, -1.22…, 1.33…],

[ 1.22…, 0. …, -0.26…],

[-1.22…, 1.22…, -1.06…]])

# 查看标准化后的均值与方差

>>> np.mean(X_train_scaled[:, 2]) # 查看最后一列的均值

0.0

>>> np.std(X_train_scaled[:, 0]) # 查看第一列的方差

0.99999999999999989

在新的数据上实现和训练集相同缩放操作:

>>> X_test = [[-1., 1., 0.]]

>>> X_test_scaled = scaler.transform(X_test)

array([[-2.44…, 1.22…, -0.26…]])

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183196.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月11日 下午12:46
下一篇 2022年10月11日 下午12:46


相关推荐

  • 智谱大模型API请求地址如何正确配置?

    智谱大模型API请求地址如何正确配置?

    2026年3月12日
    4
  • 线性判别分析+matlab,线性判别分析

    线性判别分析+matlab,线性判别分析线性判别分析 LinearDiscri 简称 LDA 是一种监督学习方法 LDA 是在目前机器学习 数据挖掘领域经典且热门的一个算法 据我所知 百度的商务搜索部里面就用了不少这方面的算法 LDA 的原理是 将带上标签的数据 点 通过投影的方法 投影到维度更低的空间中 使得投影后的点 会形成按类别区分 一簇一簇的情况 相同类别的点 将会在投影后的空间中更接近 要说明白 LD

    2026年3月19日
    3
  • linux 5432端口,无法连接到端口5432上的postgresql[通俗易懂]

    linux 5432端口,无法连接到端口5432上的postgresql[通俗易懂]问题描述我安装了包含PostgreSQL8.4的BitnamiDjangostack。当我运行psql-Upostgres时,我收到以下错误:psql:couldnotconnecttoserver:NosuchfileordirectoryIstheserverrunninglocallyandacceptingconnectionsonUnixd…

    2022年6月19日
    241
  • Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」

    Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」昨日,著名JavaWeb框架Struts官方再发高危安全漏洞补丁升级(最新版本为:2.3.15.1),升级修补了多个安全漏洞,其中包括一个远程任意代码的高危安全漏洞,这些漏洞可以影响到Struts2.0.0-Struts2.3.15的所有版本。攻击者可以利用该漏洞,执行恶意Java代码,最终导致网站数据被窃取、网页被篡改等严重后果。基于Struts2使用广泛,目前很多网站还没有升级,另外

    2022年7月13日
    19
  • 频谱仪的更改ip_通过局域网(LAN)读取频谱分析仪图像的方法

    频谱仪的更改ip_通过局域网(LAN)读取频谱分析仪图像的方法频谱分析仪在WiFi产品的开发过程中是一种必不可少的有力工具,是射频工程师的得力助手。通常,工程师使用软盘去读取频谱分析仪的图像,这不仅复杂而且现在软盘也不容易买到,即使买到也未必能用,在这里我给出使用局域网(LAN)访问频谱分析仪图像的方法。今天,我发现了一个不用软盘也能存取频谱分析仪上的图像的方法,我从一开始就觉得,既然频谱分析仪后面留有GPIB和LAN接口,就一定能通过GPIB或者LAN…

    2022年8月11日
    19
  • JS前端生成二维码的几种方式「建议收藏」

    JS前端生成二维码的几种方式「建议收藏」这里简单介绍几种前端实现js生成二维码的方式

    2022年8月31日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号