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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html错误(一) Stack Overflow at line:0 IE下解决方案

    html错误(一) Stack Overflow at line:0 IE下解决方案一今天用IE测试发现一个很奇葩的问题:代码没有什么问题,但是在浏览器中会自动弹出一个错误如: 二错误原因分析2.1  重定义了系统的触发事件名称作为自定义函数名如: onclick/onsubmit… 都是系统保留的事件名称,不允许作为重定义函数名称。2.2 出现死循环,都提示:Stackoverflowatline:0,如:在图片对象定

    2022年7月15日
    15
  • sql语句快速清空表

    sql语句快速清空表对于sql清空表有三种清空方式1.delete——是逐行删除速度极慢,不适合大量数据删除2.truncate—-删除所有数据,保留表结构,不能撤消还原3.drop——–删除表,数据和表结构一起删除,快速但是在实践过程中我发现,1,2这两种方法在处理大量数据的时候都比较慢,往往要等待许久才能清空完成。所以我考虑还有没有其他的方法达到清空表的作用呢。后来我从导出表结构中…

    2022年5月5日
    128
  • python3 typing_python类型注解

    python3 typing_python类型注解typing介绍Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返回什

    2022年7月29日
    15
  • 如何使用Python读取大文件

    如何使用Python读取大文件

    2021年11月26日
    51
  • 汇编语言标志位介绍

    汇编语言标志位介绍一、运算结果标志位1、进位标志CF(CarryFlag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(ParityFlag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如…

    2022年7月12日
    23
  • Android实现自由单选、复选按钮效果+样式美化[通俗易懂]

    Android实现自由单选、复选按钮效果+样式美化[通俗易懂]背景Android开发中会遇到将单选按钮排布在多行的情况,一般只能通过自定义控件的形式,绘制单选按钮,网络上也有很多这样的文章,但一般情况下自定义的控件在界面美观性、效果方面稍有欠缺。因此,我们打算用CheckBox+LinearLayout来实现一种多行单选按钮组的效果。效果如下:思路Android中要实现单选按钮要用到RadioGroup+RadioButton的布局结…

    2022年5月13日
    45

发表回复

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

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