机器学习 之 最小二乘法,各种损失函数
最小二乘法就是机器学习的开始,设这个最简单的式子是:
y=wx+by=wx+by=wx+b
平方损失函数为:
L=12∑i=1n(ti−yi)2L=\frac{1}{2}\sum_{i=1}^n(t_i-y_i)^2L=21i=1∑n(ti−yi)2
之所以有12\frac{1}{2}21是因为在接下来化简过程中会非常漂亮(仅限于高数,矩阵不算),其中tit_iti是已测数据的结果集,现成的。那么如何降低损失函数呢?就是求导让其对www求导等于0,那就是整个损失函数的最低点(损失函数是下凸函数):
L=12∑i=1n(ti−yi)2=12∑i=1n(ti−(wxi+b))2=12∑i=1n(ti2+w2xi2+b2−2tiwxi−2tib+2wxib)L =\frac{1}{2} \sum_{i=1}^n(t_i-y_i)^2\\ =\frac{1}{2} \sum_{i=1}^n(t_i-(wx_i+b))^2\\ =\frac{1}{2} \sum_{i=1}^n(t_i^2+w^2x_i^2+b^2-2t_iwx_i-2t_ib+2wx_ib)L=21i=1∑n(ti−yi)2=21i=1∑n(ti−(wxi+b))2=21i=1∑n(ti2+w2xi2+b2−2tiwxi−2tib+2wxib)
ϑLϑw=∑i=1n(wxi2−tixi+xib)\frac{\vartheta L}{\vartheta w}=\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib)ϑwϑL=i=1∑n(wxi2−tixi+xib)
ϑLϑb=∑i=1n(b−ti+wxi)\frac{\vartheta L}{\vartheta b}=\sum_{i=1}^n(b-t_i+wx_i)ϑbϑL=i=1∑n(b−ti+wxi)
接下来让偏导等于0,求出w,bw,bw,b:
∑i=1n(wxi2−tixi+xib)=0w∑i=1nxi=∑i=1n(ti−b)w=∑i=1n(ti−b)∑i=1nxi\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib)=0\\ w\sum^n_{i=1}x_i=\sum_{i=1}^n(t_i-b)\\ w=\frac{\sum_{i=1}^n(t_i-b)}{\sum^n_{i=1}x_i}i=1∑n(wxi2−tixi+xib)=0wi=1∑nxi=i=1∑n(ti−b)w=∑i=1nxi∑i=1n(ti−b)
∑i=1n(b−ti+wxi)=0nb=∑i=1n(ti−wxi)b=∑i=1n(ti−wxi)n\sum_{i=1}^n(b-t_i+wx_i)=0\\ nb=\sum^n_{i=1}(t_i-wx_i)\\ b=\frac{\sum^n_{i=1}(t_i-wx_i)}{n}i=1∑n(b−ti+wxi)=0nb=i=1∑n(ti−wxi)b=n∑i=1n(ti−wxi)
就这样算出来了。注意www中有bbb,bbb中有www。用均值取代掉∑\sum∑:
w=t‾−bx‾w=\frac{\overline{t}-b}{\overline{x}}w=xt−b
b=t‾−wx‾b=\overline{t}-w\overline{x}b=t−wx
相互带入,完全一样的:
w0x‾+b0=t‾w_0\overline{x}+b_0=\overline{t}w0x+b0=t
意料之外,情理之中,表示数据集均值在这条直线上,接下来用这个式子带入上面的偏导式,消b0b_0b0(b最小值的时候),这样就会出现w0w_0w0了。
ϑLϑw=∑i=1n(wxi2−tixi+xib0)=∑i=1n(wxi2−tixi+xi(t‾−w0x‾))=w∑i=1nxi2−∑i=1ntixi+(t‾−w0x‾)∑i=1nxi=w0nx2‾−ntx‾+(t‾−w0x‾)nx‾=0w0=tx‾−t‾x‾x2‾−x‾2\frac{\vartheta L}{\vartheta w}=\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib_0)\\ =\sum_{i=1}^n(wx_i^2-t_ix_i+x_i(\overline{t}-w_0\overline{x}))\\ =w\sum^n_{i=1}x_i^2-\sum^n_{i=1}t_ix_i+(\overline{t}-w_0\overline{x})\sum_{i=1}^nx_i\\ =w_0n\overline{x^2}-n\overline{tx}+(\overline{t}-w_0\overline{x})n\overline{x}=0\\ w_0=\frac{\overline{tx}-\overline{t}\overline{x}}{\overline{x^2}-\overline{x}^2}ϑwϑL=i=1∑n(wxi2−tixi+xib0)=i=1∑n(wxi2−tixi+xi(t−w0x))=wi=1∑nxi2−i=1∑ntixi+(t−w0x)i=1∑nxi=w0nx2−ntx+(t−w0x)nx=0w0=x2−x2tx−tx
更一般的,大家都这么写:
w=1n∑i=1nxiti−t‾x‾1n∑i=1nxi2−x‾x‾w=\frac{\frac{1}{n}\sum_{i=1}^nx_it_i-\overline{t}\overline{x}}{\frac{1}{n}\sum^n_{i=1}x^2_i-\overline{x}\overline{x}}w=n1∑i=1nxi2−xxn1∑i=1nxiti−tx
bbb直接用www推出,自此最小二乘法推导完毕。
接下来用线代推,用线代推不仅更简洁,更重要的一点是,它支持多www,也就是多元超平面,这个是高数方法永远也解决不了的了(它会得出n个等式)。
f=wn∗1xn∗1+bn∗1f=\textbf{w}_{n*1}\textbf{x}_{n*1}+\textbf{b}_{n*1}f=wn∗1xn∗1+bn∗1
设一共n组数据,每组数据有k个参数。
这里进行了一个整理,把bbb添加进www里了,具体见下:
w=(bw),x=(1x)\textbf{w} = \begin{pmatrix} b \\ w \end{pmatrix} , \textbf{x} = \begin{pmatrix} 1 \\ x \end{pmatrix} w=(bw),x=(1x)
这样wTx=b+wx\textbf{w}^T\textbf{x}=b+wxwTx=b+wx,按照这个角度来说,b用w0w_0w0来表示比较合适了,接下来的参数为w1,w2...w_1,w_2...w1,w2...,而变量也是从1,x1,x2...,x_1,x_2...,x1,x2...特别完美,实际上的矩阵就是n+1的,参数矩阵第一个是w0w_0w0,变量矩阵第一个是111,直接wx\textbf{wx}wx得出解,下面都是多变量多参数的了。
损失函数为
L=∑i=1n(ti−wTxi)2L=\sum^n_{i=1}(t_i-\textbf{w}^T\textbf{x}_i)^2L=i=1∑n(ti−wTxi)2
取代∑\sum∑,变成如下的:
L=(t−Xw)T(t−Xw)L=(\textbf{t}-\textbf{X}\textbf{w})^T(\textbf{t}-\textbf{X}\textbf{w})L=(t−Xw)T(t−Xw)
L=wTXTXw−2wTXTt+tTtL=\textbf{w}^T\textbf{X}^T\textbf{Xw}-2\textbf{w}^T\textbf{X}^T\textbf{t}+\textbf{t}^T\textbf{t}L=wTXTXw−2wTXTt+tTt
注意此时的X\textbf XX是n∗kn*kn∗k的矩阵,包含所有的数据了(但x\textbf xx是k∗1k*1k∗1矩阵),这里w\textbf ww是k∗1k*1k∗1矩阵,只有这样Xw\textbf{Xw}Xw才是n∗1n*1n∗1的矩阵,是所有的解,转置相乘恰好就是平方差的形式。
接下来自然是求导了:
ϑLϑw=(ϑLϑw0ϑLϑw1⋮ϑLϑwk)\frac{\vartheta L}{\vartheta \textbf{w}}= \begin{pmatrix} \frac{\vartheta L}{\vartheta w_0} \\ \frac{\vartheta L}{\vartheta w_1} \\ \vdots \\ \frac{\vartheta L}{\vartheta w_k} \end{pmatrix} ϑwϑL=⎝⎜⎜⎜⎛ϑw0ϑLϑw1ϑL⋮ϑwkϑL⎠⎟⎟⎟⎞
ϑLϑw=2XTXw−2XTt=0\frac{\vartheta L}{\vartheta \textbf{w}}=2\textbf{X}^T\textbf{X}\textbf{w}-2\textbf{X}^T\textbf{t}=0ϑwϑL=2XTXw−2XTt=0
这里的矩阵求导是固定式子(这里是对www求导),(wTx)′=x,(xTw)′=x,(wTw)′=2w,(wTCw)′=2Cw(w^Tx)'=x,(x^Tw)'=x,(w^Tw)'=2w,(w^TCw)'=2Cw(wTx)′=x,(xTw)′=x,(wTw)′=2w,(wTCw)′=2Cw(跟普通函数求导差不多)。
XTXw=XTt\textbf{X}^T\textbf{X}\textbf{w}=\textbf{X}^T\textbf{t}XTXw=XTt
w=(XTX)−1XTt\textbf{w}=(\textbf{X}^T\textbf{X})^{-1}\textbf{X}^T\textbf{t}w=(XTX)−1XTt
这就是w\textbf ww的最小值,注意是所有的(包括w,bw,bw,b),矩阵最小二乘法完毕。
这样求得的式子是线性的,有时候平方式子可能更拟合(这是很有可能的),即f=w0+w1x+w2x2f=w_0+w_1x+w_2x^2f=w0+w1x+w2x2,这样参数就会是超过两个。但是,越高阶,其实就没有多少作用了,它会在有数据的地方过拟合,没数据的地方偏十万八千里。
如何验证模型的最优复杂度?就是用验证集测,得出最好的。
当数据集特别小,以至于分出一个验证集太奢侈,那么就将数据集分成k份,每次取一份作为验证集,其他作为测试集,一圈下来取平均值(交叉验证)。当k=n时,也就是验证集就一个数据,这叫留一交叉验证LOOCV。
那么什么是模型复杂度?就是www尽可能的小和少:
∑i=0kwi2\sum^k_{i=0}w_i^2i=0∑kwi2
那么损失函数就变成了:
L′=L+λwTwL'=L+\lambda \textbf w^T\textbf wL′=L+λwTw
L(w)=(t−Xw)T(t−Xw)+λwTwL(\textbf w)=(\textbf t-\textbf X\textbf w)^T(\textbf t-\textbf X\textbf w)+\lambda \textbf w^T\textbf wL(w)=(t−Xw)T(t−Xw)+λwTw
ϑLϑw=2XTXw−2XTt+2λw=0\frac{\vartheta L}{\vartheta \textbf{w}}=2\textbf{X}^T\textbf{X}\textbf{w}-2\textbf{X}^T\textbf{t}+2\lambda\textbf w=0ϑwϑL=2XTXw−2XTt+2λw=0
w=(XTX+λE)−1XTt\textbf w=(\textbf{X}^T\textbf{X}+\lambda\textbf{E})^{-1}\textbf{X}^T\textbf{t}w=(XTX+λE)−1XTt
λ\lambdaλ值太小,函数就可能太过复杂(后面项就没多大用了),值太大,又不利于逼近数据(太简化了)。 这就叫正则化误差,正则化最小二乘法。也叫结构误差,这个以后讲。如何确定λ\lambdaλ(超参数)选什么好呢?交叉验证。
岭回归: 以损失部分信息(说明加入正则化项确实有深刻的缺点)、降低精度(加入正则化项)为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。实际上也是新瓶装旧酒,都一样的。
为了保证回归系数w\textbf ww可求,岭回归模型在目标函数上加了一个L2范数的惩罚项
J(w)=∑(y−Xw)2+λ∣∣w∣∣22=∑(y−Xw)2+∑λw2J(\textbf w)=\sum(y-\textbf X\textbf w)^2+\lambda||\textbf w||^2_2\\ =\sum(y-\textbf X\textbf w)^2+\sum\lambda \textbf w^2J(w)=∑(y−Xw)2+λ∣∣w∣∣22=∑(y−Xw)2+∑λw2
w=(XTX+λI)−1XTy\textbf w=(\textbf X^T\textbf X+\lambda\textbf I)^{-1}\textbf X^Tyw=(XTX+λI)−1XTy
单位矩阵III的对角线上全是1,像一条山岭一样,这也是岭回归名称的由来。
每日小常识
0-1损失函数
L(Y,f(X))={1Y≠f(X)0Y=f(X)L(Y,f(X))=\left\{\begin{array}{l} 1 &Y\neq f(X)\\ 0 &Y=f(X) \end{array}\right.L(Y,f(X))={10Y=f(X)Y=f(X)
特点是比较严格,直接分类,但它是一个非凸函数,不太适用。
绝对值损失函数
L(Y,f(x))=∣Y−f(x)∣L(Y,f(x))=|Y-f(x)|L(Y,f(x))=∣Y−f(x)∣
log对数损失函数
L(Y,P(Y∣X))=−logP(Y∣X)L(Y,P(Y|X))=-logP(Y|X)L(Y,P(Y∣X))=−logP(Y∣X)
log对数损失函数能非常好的表征概率分布,如果需要知道结果属于每个类别的置信度,那它非常合适。但健壮性不强,对噪声敏感。
大名鼎鼎的平方损失函数
L(Y∣f(X))=∑N(Y−f(X))2L(Y|f(X))=\sum_N(Y-f(X))^2L(Y∣f(X))=N∑(Y−f(X))2
不解释
指数损失函数
L(Y∣f(X))=e−yf(x)L(Y|f(X))=e^{-yf(x)}L(Y∣f(X))=e−yf(x)
对噪声非常敏感
Hinge损失函数
L(y,f(x))=max(0,1−yf(x))L(y,f(x))=max(0,1-yf(x))L(y,f(x))=max(0,1−yf(x))
SVM就用这个损失函数
交叉熵损失函数
这个后面讲,值得注意的是对数损失函数和交叉熵损失函数是等价的。
机器学习 之 最小二乘法,各种损失函数相关推荐
- 一文看懂机器学习中的常用损失函数
作者丨stephenDC 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 导语:损失函数虽然简单,却相当基础,可以看做是机器学习的一个组件.机器学习的其他组件,还包括激 ...
- 机器学习中的常见问题—损失函数
机器学习中的常见问题--损失函数 一.分类算法中的损失函数 在分类算法中,损失函数通常可以表示成损失项和正则项的和,即有如下的形式: J(w)=∑iL(mi(w))+λR(w)J(w)=∑iL(mi( ...
- 机器学习中的各种损失函数(Hinge loss,交叉熵,softmax)
机器学习中的各种损失函数 SVM multiclass loss(Hinge loss) 这是一个合页函数,也叫Hinge function,loss 函数反映的是我们对于当前分类结果的不满意程度.在 ...
- 机器学习中常见的损失函数_机器学习中最常见的损失函数
机器学习中常见的损失函数 现实世界中的DS (DS IN THE REAL WORLD) In mathematical optimization and decision theory, a los ...
- 机器学习之最小二乘法完成一元线性回归【内附Python实现】
最小二乘法代码实现 import numpy as np import matplotlib.pyplot as plt# 利用最小二乘法定义损失函数,w与b是预测函数的未知参数,ponits是坐标信 ...
- 机器学习笔记七:损失函数与风险函数
一.损失函数 回顾之前讲过的线性回归模型,我们为了要学习参数使得得到的直线更好的拟合数据,我们使用了一个函数 这个函数就是比较模型得到的结果和"真实值"之间的"差距&qu ...
- 机器学习中目标函数、损失函数以及正则项的通俗解释
目录: 前言: 1.什么是目标函数? 2.损失函数 3.正则化 总结: 目录: 前言: 今天看到一篇很精简的文章来说明目标函数.损失函数以及正则项是什么.以下是文章正文. 转自:https://xia ...
- 机器学习中目标函数、损失函数、代价函数之间的区别和联系
首先给出结论:损失函数和代价函数是同一个东西,目标函数是一个与他们相关但更广的概念,对于目标函数来说在有约束条件下的最小化就是损失函数(loss function) 举个例子解释一下:(图片来自And ...
- 入门|机器学习中常用的损失函数你知多少?
本文作者将常用的损失函数分为了两大类:分类和回归.然后又分别对这两类进行了细分和讲解,其中回归中包含了一种不太常见的损失函数:平均偏差误差,可以用来确定模型中存在正偏差还是负偏差. 机器通过损失函数进 ...
最新文章
- JavaEE 获取路径全攻略
- python简单体育竞技模拟_Python程序设计思维练习---体育竞技分析-阿里云开发者社区...
- sqlserver 实现数据库全文检索
- C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
- 百度黄埔学院学员开题 | ‘首席 AI 架构师’实战之旅开启!
- 最大正方形Python解法
- java NIO 复习
- 实测!让M1芯片版mac也能写入NTFS格式磁盘,完整教程附上!
- python如何进行人口预测_如何使用matlab建立人口预测模型
- 计算机二级vf查询,计算机二级《VFP》知识点讲解:查询和视图
- [日推荐]『足球欧洲』.这里有关于足球的一切!
- 机动车c1科三考试语言灯光,史上最全科目三灯光模拟图解
- 论文笔记-基于代码属性图和Bi-GRU的软件脆弱性检测方法
- bimodal or multimodal data test and analysis in R
- 国内免费cdn汇总2023最新
- 【Python自动化办公】批量将Excel表格数据导出为PDF文件
- Hive学习之抽样(tablesample)
- (详细)强化学习--贝尔曼方程
- 师徒制,多么好的工具
- NSA局长:美军网络部队已处于战备状态