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…]])

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Linux 服务器环境搭建及配置[通俗易懂]

    Linux常用命令查看进程: 方式一: ps-ef|grep端口号/名称 方式二: netstat-apn|grep端口号/名称杀死进程: kill-9PID使用vi或vim命令打开、关闭、保存文件1、vi&vim有两种工作模式:​ (1)命令模式:接受、执行vi&vim操作命令的模式,打开文件后的默认模式;​ (…

  • RBAC权限管理

    RBAC权限管理

  • lombok插件使用_cesium显示全球视野

    lombok插件使用_cesium显示全球视野Lombok是什么?lombok是java自动生成代码的插件。它能提高开发效率,减少自己编写繁琐的代码,让代码看起来更整洁简略,比如getter、setter、equals以及construct等方法。其也有val、var这种自动判断变量类型的变量定义方式(类似javascript中的let、const)。Lombok使用在开发ide中安装lombok插件,然后加上lombok的依赖包…

  • Android performClick无效

    Android performClick无效今天遇见一个问题,很奇怪,我采用的是mvp的模式开发的,我在p层调用perforClick可以,但是在fragment界面调用却不行,在此记录下

  • kmp算法入门,入门题集合

    kmp算法入门,入门题集合

  • 广东电信在线人工服务器,202.96.128.86广东电信DNS故障及解决方法

    广东电信在线人工服务器,202.96.128.86广东电信DNS故障及解决方法广东用户如果遇到能上QQ,但网页打不开,提示“找不到服务器”的现象,而且如果别人能访问,而你不能访问,多数情况下就是你的DNS解析故障造成的。解决这个问题比较有效的方法是换一个DNS服务器。下面是几个常用的广东电信DNS,广东的朋友如果遇到一些网页打不开时,可以更换下DNS看看。61.144.56.100广东省广州市电信61.144.56.101广东省广州市电信202.96.128.68广东…

发表回复

您的电子邮箱地址不会被公开。

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