文章目录
对于机器学习中的标准化,归一化和正则化的理解,一直都比较模糊,而且在许多技术书籍中,对于它们的使用基本都是一笔带过,不理解概念的话,就不知具体对数据做了哪些操作。因此,在这里专门对这几个概念做学习与总结。
学习之前,先抛出几个问题:
X i − X m i n X m a x − X m i n \frac{X_i -X_{min}}{X_{max} - X_{min}} Xmax−XminXi−Xmin
X i − X ‾ X m a x − X m i n \frac{X_i -\overline{X}}{X_{max} - X_{min}} Xmax−XminXi−X
标准化 = X i − μ σ 标准化 = \frac{X_i - \mu}{\sigma} 标准化=σXi−μ
这里需要研究一下公式中的两个数据 μ \mu μ 和 σ \sigma σ 的含义
μ
\mu
μ : 表示所有样本数据的均值
σ
\sigma
σ : 表示所有样本数据的标准差
总体标准差:
σ = ∑ i = 1 n ( x i − μ ) 2 n \sigma = \sqrt{ \frac{\sum_{i=1}^n(x_i - \mu)^2}{n} } σ=n∑i=1n(xi−μ)2
样本标准差:
S = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 S = \sqrt{ \frac{\sum_{i=1}^n(x_i - \overline{x})^2}{n-1} } S=n−1∑i=1n(xi−x)2
缩放与平移然后训练参数, 而标准化则会选取所有的数据进行计算。思考:
一. 标准化之前的数据和标准化之后的数据分别是啥样子的, 通过几个图片来说明?
散点图的标准化

下面是知乎中找到的对比图片,把数据从扁拍圆了。

归一化or正则化之后:


标准化之后, 可以更容易的得出最优参数 w w w和 b b b以及计算出 J ( w , b ) J(w,b) J(w,b)的最小值,从而达到加速收敛的效果。

标准化之后:

如何数据中有异常点,标准化和归一化之后的数据区别会是什么样子的呢?标准化更好保持了样本间距。当样本中有异常点时,归一化有可能将正常的样本“挤”到一起去。比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。如果不幸的是1和2的分类标签还是相反的,那么,当我们用梯度下降来做分类模型训练时,模型会需要更长的时间收敛,因为将样本分开需要更大的努力!而标准化在这方面就做得很好,至少它不会将样本“挤到一起”。
标准化之后,数据的均值为0 ,这个可以很明显的看出来,相加一下就得出来了。但是如何证明数据的标准差为1 呢?
标准化公式: a i = x i − μ σ a_i = \frac{x_i - \mu}{\sigma} ai=σxi−μ
其中标准差 σ \sigma σ的公式为:
σ = ∑ i = 1 n ( x i − μ ) 2 n \sigma = \sqrt{ \frac{\sum_{i=1}^n(x_i - \mu)^2}{n} } σ=n∑i=1n(xi−μ)2
推理如下:
假设新数据为
a
i
a_i
ai, 新数据的均值为0,则新数据的标准差可以简化如下:
新标准差 = ∑ i = 1 n ( a i ) 2 n 新标准差 = \sqrt{ \frac{\sum_{i=1}^n(a_i )^2}{n} } 新标准差=n∑i=1n(ai)2
下面只需要证明:
∑ i = 1 n ( a i ) 2 = n \sum_{i=1}^n(a_i )^2 = n ∑i=1n(ai)2=n
其中:
( a i ) 2 = ( x i − μ ) 2 / ( ∑ i = 1 n ( x i − μ ) 2 n ) (a_i)^2 = (x_i - \mu)^2 / (\frac{\sum_{i=1}^n(x_i - \mu)^2}{n}) (ai)2=(xi−μ)2/(n∑i=1n(xi−μ)2)
这种情况下,把 ( a i ) 2 (a_i)^2 (ai)2累加起来, 分母和分子不就抵消了吗,可以得出:
∑ i = 1 n ( a i ) 2 = n \sum_{i=1}^n(a_i )^2 = n ∑i=1n(ai)2=n
因此,成功证明,数据在标准化之后,计算出的标准差为1。
首先说说标准化和归一化的联系:
标准化和归一化其实本质上都是对数据的线性变换,(也就是说,变换前后,数据的形状是一样的,数据的排列顺序没有改变)
我们以标准化为例,说明一下数据是如何平移变换的:
X i − μ σ = X i σ − μ σ \frac{X_i - \mu}{\sigma} = \frac{X_i }{\sigma} - \frac{\mu}{\sigma} σXi−μ=σXi−σμ
当数据给定后,可以认为 μ \mu μ和 σ \sigma σ都是常数, 因此数据就是先缩放 σ \sigma σ,再平移 μ σ \frac{\mu}{\sigma} σμ, 这就是一个线性变换。
标准化,归一化的用途:
什么时候使用归一化,什么时候使用的正则化:
如果对处理后的数据范围有严格要求,使用归一化。
如果数据不稳定,存在极端的最大最小值,建议使用标准化。
使用距离度量相似性或者使用PCA技术进行降维的时候,建议使用标准化。
问题: 均值为0 方差为1 的分布一定是正态分布吗?(自查)
在训练模型的过程中,有许多参数需要通过对损失函数求极小值来确定, 求参数的过程中,希望梯度下降到最小值点, 最终找到合适的w确定模型。
一个原始的,不带正则的线性损失函数如下:
E ( w ) = 1 2 ∑ n = 1 N { t n − w T ϕ ( x n ) } 2 (1) E(\mathbf w) =\frac{1}{2} \sum_{n=1}^{N}\{t_n-\mathbf w^T \phi (\mathbf x_n)\}^2 \tag{1} E(w)=21n=1∑N{tn−wTϕ(xn)}2(1)
E ( w ) E(\mathbf w) E(w) 是损失函数
t n t_n tn 是测试集合的真实输出,可以看作是训练时候的标签
w \mathbf w w是权重,需要训练得到
ϕ ( ) \phi () ϕ() 是基函数
n 表示测试样本的个数
这个损失函数可以看作是一个平方差的和, 增加的常数因子是为了方便计算
加上正则化的的损失函数如下:
1
2
∑
n
=
1
N
{
t
n
−
w
T
ϕ
(
x
n
)
}
2
+
λ
2
w
T
w
(2)
\frac{1}{2} \sum_{n=1}^{N}\{t_n-\mathbf w^T \phi (\mathbf x_n)\}^2 + \frac{\lambda}{2} \mathbf w^T \mathbf w \tag{2}
21n=1∑N{tn−wTϕ(xn)}2+2λwTw(2)
从公式中我们可以看出, 我们可以将 λ \lambda λ(也被称之为正则化系数)设置大一些,使得对参数的限制增强。我们加入的正则项,会在训练过程中自动限制参数过大的现象,从而减少过拟合。
1 2 ∑ n = 1 N { t n = w T ϕ ( x n ) } 2 + λ 2 w T w \frac{1}{2}\sum_{n=1}^N\{t_n = \pmb{w}^T \phi(\pmb{x}_n)\}^2 + \frac{\lambda}{2}\pmb{w}^T\pmb{w} 21n=1∑N{tn=wTϕ(xn)}2+2λwTw
再来介绍一下什么是一次正则,二次正则。
1
2
∑
n
=
1
N
{
t
n
−
w
T
ϕ
(
x
n
)
}
2
+
λ
2
∑
j
=
1
M
∣
w
j
∣
q
(3)
\frac{1}{2} \sum_{n=1}^{N}\{t_n-\mathbf w^T \phi (\mathbf x_n)\}^2 + \frac{\lambda}{2} \sum_{j=1}^{M} {\vert w_j \vert}^q \tag{3}
21n=1∑N{tn−wTϕ(xn)}2+2λj=1∑M∣wj∣q(3)
公式里的q就表示模型的阶次,我们可以取 q=1,q=2等等。其中二次正则是比较常用的。这里介绍一下一次正则项的优势: 可以降低维度, 比二次正则更稀疏, 但是, 一次正则有拐点,不是处处可微的,这就给计算带来了难度。
终于搞懂了标准化,归一化和正则化的区别了。标准化和归一化是作用于训练数据,而正则化是作用与训练参数防止过拟合的。 一般来讲,只要模型涉及距离计算的,都需要使用标准化或者正则化,具体使用哪个方法,可以视模型的实际情况来确定。
参考文档:
https://blog.csdn.net/kdongyi/article/details/83932945
https://zhuanlan.zhihu.com/p/29957294
https://www.zhihu.com/question/20467170/answer/839255695
https://blog.csdn.net/weixin_36604953/article/details/102652160
公式参考:
https://www.cnblogs.com/daizongqi/p/11525397.html
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞