精华内容
下载资源
问答
  • 最小二乘法代价函数
    千次阅读
    2020-09-18 14:51:49

    最小二乘法就是机器学习的开始,设这个最简单的式子是:
    y = w x + b y=wx+b y=wx+b

    平方损失函数为:
    L = 1 2 ∑ i = 1 n ( t i − y i ) 2 L=\frac{1}{2}\sum_{i=1}^n(t_i-y_i)^2 L=21i=1n(tiyi)2

    之所以有 1 2 \frac{1}{2} 21是因为在接下来化简过程中会非常漂亮(仅限于高数,矩阵不算),其中 t i t_i ti是已测数据的结果集,现成的。那么如何降低损失函数呢?就是求导让其对 w w w求导等于0,那就是整个损失函数的最低点(损失函数是下凸函数):
    L = 1 2 ∑ i = 1 n ( t i − y i ) 2 = 1 2 ∑ i = 1 n ( t i − ( w x i + b ) ) 2 = 1 2 ∑ i = 1 n ( t i 2 + w 2 x i 2 + b 2 − 2 t i w x i − 2 t i b + 2 w x i b ) 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=1n(tiyi)2=21i=1n(ti(wxi+b))2=21i=1n(ti2+w2xi2+b22tiwxi2tib+2wxib)

    ϑ L ϑ w = ∑ i = 1 n ( w x i 2 − t i x i + x i b ) \frac{\vartheta L}{\vartheta w}=\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib) ϑwϑL=i=1n(wxi2tixi+xib)

    ϑ L ϑ b = ∑ i = 1 n ( b − t i + w x i ) \frac{\vartheta L}{\vartheta b}=\sum_{i=1}^n(b-t_i+wx_i) ϑbϑL=i=1n(bti+wxi)
    接下来让偏导等于0,求出 w , b w,b w,b
    ∑ i = 1 n ( w x i 2 − t i x i + x i b ) = 0 w ∑ i = 1 n x i = ∑ i = 1 n ( t i − b ) w = ∑ i = 1 n ( t i − b ) ∑ i = 1 n x i \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=1n(wxi2tixi+xib)=0wi=1nxi=i=1n(tib)w=i=1nxii=1n(tib)

    ∑ i = 1 n ( b − t i + w x i ) = 0 n b = ∑ i = 1 n ( t i − w x i ) b = ∑ i = 1 n ( t i − w x i ) 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=1n(bti+wxi)=0nb=i=1n(tiwxi)b=ni=1n(tiwxi)

    就这样算出来了。注意 w w w中有 b b b b b b中有 w w w。用均值取代掉 ∑ \sum
    w = t ‾ − b x ‾ w=\frac{\overline{t}-b}{\overline{x}} w=xtb

    b = t ‾ − w x ‾ b=\overline{t}-w\overline{x} b=twx

    相互带入,完全一样的:
    w 0 x ‾ + b 0 = t ‾ w_0\overline{x}+b_0=\overline{t} w0x+b0=t

    意料之外,情理之中,表示数据集均值在这条直线上,接下来用这个式子带入上面的偏导式,消 b 0 b_0 b0(b最小值的时候),这样就会出现 w 0 w_0 w0了。
    ϑ L ϑ w = ∑ i = 1 n ( w x i 2 − t i x i + x i b 0 ) = ∑ i = 1 n ( w x i 2 − t i x i + x i ( t ‾ − w 0 x ‾ ) ) = w ∑ i = 1 n x i 2 − ∑ i = 1 n t i x i + ( t ‾ − w 0 x ‾ ) ∑ i = 1 n x i = w 0 n x 2 ‾ − n t x ‾ + ( t ‾ − w 0 x ‾ ) n x ‾ = 0 w 0 = t x ‾ − t ‾ x ‾ x 2 ‾ − 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=1n(wxi2tixi+xib0)=i=1n(wxi2tixi+xi(tw0x))=wi=1nxi2i=1ntixi+(tw0x)i=1nxi=w0nx2ntx+(tw0x)nx=0w0=x2x2txtx

    更一般的,大家都这么写:
    w = 1 n ∑ i = 1 n x i t i − t ‾ x ‾ 1 n ∑ i = 1 n x i 2 − 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=n1i=1nxi2xxn1i=1nxititx

    b b b直接用 w w w推出,自此最小二乘法推导完毕。

    接下来用线代推,用线代推不仅更简洁,更重要的一点是,它支持多 w w w,也就是多元超平面,这个是高数方法永远也解决不了的了(它会得出n个等式)。
    f = w n ∗ 1 x n ∗ 1 + b n ∗ 1 f=\textbf{w}_{n*1}\textbf{x}_{n*1}+\textbf{b}_{n*1} f=wn1xn1+bn1

    设一共n组数据,每组数据有k个参数。
    这里进行了一个整理,把 b b b添加进 w w w里了,具体见下:
    w = ( b w ) , x = ( 1 x ) \textbf{w} = \begin{pmatrix} b \\ w \end{pmatrix} , \textbf{x} = \begin{pmatrix} 1 \\ x \end{pmatrix} w=(bw),x=(1x)

    这样 w T x = b + w x \textbf{w}^T\textbf{x}=b+wx wTx=b+wx,按照这个角度来说,b用 w 0 w_0 w0来表示比较合适了,接下来的参数为 w 1 , w 2 . . . w_1,w_2... w1,w2...,而变量也是从1 , x 1 , x 2 . . . ,x_1,x_2... ,x1,x2...特别完美,实际上的矩阵就是n+1的,参数矩阵第一个是 w 0 w_0 w0,变量矩阵第一个是 1 1 1,直接 wx \textbf{wx} wx得出解,下面都是多变量多参数的了。
    损失函数为
    L = ∑ i = 1 n ( t i − w T x i ) 2 L=\sum^n_{i=1}(t_i-\textbf{w}^T\textbf{x}_i)^2 L=i=1n(tiwTxi)2

    取代 ∑ \sum ,变成如下的:
    L = ( t − Xw ) T ( t − Xw ) L=(\textbf{t}-\textbf{X}\textbf{w})^T(\textbf{t}-\textbf{X}\textbf{w}) L=(tXw)T(tXw)

    L = w T X T Xw − 2 w T X T t + t T t L=\textbf{w}^T\textbf{X}^T\textbf{Xw}-2\textbf{w}^T\textbf{X}^T\textbf{t}+\textbf{t}^T\textbf{t} L=wTXTXw2wTXTt+tTt

    注意此时的 X \textbf X X n ∗ k n*k nk的矩阵,包含所有的数据了(但 x \textbf x x k ∗ 1 k*1 k1矩阵),这里 w \textbf w w k ∗ 1 k*1 k1矩阵,只有这样 Xw \textbf{Xw} Xw才是 n ∗ 1 n*1 n1的矩阵,是所有的解,转置相乘恰好就是平方差的形式。
    接下来自然是求导了:
    ϑ L ϑ w = ( ϑ L ϑ w 0 ϑ L ϑ w 1 ⋮ ϑ L ϑ w k ) \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 = 2 X T Xw − 2 X T t = 0 \frac{\vartheta L}{\vartheta \textbf{w}}=2\textbf{X}^T\textbf{X}\textbf{w}-2\textbf{X}^T\textbf{t}=0 ϑwϑL=2XTXw2XTt=0

    这里的矩阵求导是固定式子(这里是对 w w w求导), ( w T x ) ′ = x , ( x T w ) ′ = x , ( w T w ) ′ = 2 w , ( w T C w ) ′ = 2 C w (w^Tx)'=x,(x^Tw)'=x,(w^Tw)'=2w,(w^TCw)'=2Cw (wTx)=x,(xTw)=x,(wTw)=2w,(wTCw)=2Cw(跟普通函数求导差不多)。
    X T Xw = X T t \textbf{X}^T\textbf{X}\textbf{w}=\textbf{X}^T\textbf{t} XTXw=XTt

    w = ( X T X ) − 1 X T t \textbf{w}=(\textbf{X}^T\textbf{X})^{-1}\textbf{X}^T\textbf{t} w=(XTX)1XTt

    这就是 w \textbf w w的最小值,注意是所有的(包括 w , b w,b w,b),矩阵最小二乘法完毕。

    这样求得的式子是线性的,有时候平方式子可能更拟合(这是很有可能的),即 f = w 0 + w 1 x + w 2 x 2 f=w_0+w_1x+w_2x^2 f=w0+w1x+w2x2,这样参数就会是超过两个。但是,越高阶,其实就没有多少作用了,它会在有数据的地方过拟合,没数据的地方偏十万八千里。
    如何验证模型的最优复杂度?就是用验证集测,得出最好的。

    当数据集特别小,以至于分出一个验证集太奢侈,那么就将数据集分成k份,每次取一份作为验证集,其他作为测试集,一圈下来取平均值(交叉验证)。当k=n时,也就是验证集就一个数据,这叫留一交叉验证LOOCV。

    那么什么是模型复杂度?就是 w w w尽可能的小和少:
    ∑ i = 0 k w i 2 \sum^k_{i=0}w_i^2 i=0kwi2

    那么损失函数就变成了:
    L ′ = L + λ w T w L'=L+\lambda \textbf w^T\textbf w L=L+λwTw

    L ( w ) = ( t − Xw ) T ( t − Xw ) + λ w T w L(\textbf w)=(\textbf t-\textbf X\textbf w)^T(\textbf t-\textbf X\textbf w)+\lambda \textbf w^T\textbf w L(w)=(tXw)T(tXw)+λwTw

    ϑ L ϑ w = 2 X T Xw − 2 X T t + 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=2XTXw2XTt+2λw=0

    w = ( X T X + λ E ) − 1 X T t \textbf w=(\textbf{X}^T\textbf{X}+\lambda\textbf{E})^{-1}\textbf{X}^T\textbf{t} w=(XTX+λE)1XTt
    λ \lambda λ值太小,函数就可能太过复杂(后面项就没多大用了),值太大,又不利于逼近数据(太简化了)。 这就叫正则化误差,正则化最小二乘法。也叫结构误差,这个以后讲。如何确定 λ \lambda λ(超参数)选什么好呢?交叉验证。

    岭回归: 以损失部分信息(说明加入正则化项确实有深刻的缺点)、降低精度(加入正则化项)为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。实际上也是新瓶装旧酒,都一样的。

    为了保证回归系数 w \textbf w w可求,岭回归模型在目标函数上加了一个L2范数的惩罚项
    J ( w ) = ∑ ( y − Xw ) 2 + λ ∣ ∣ w ∣ ∣ 2 2 = ∑ ( y − Xw ) 2 + ∑ λ w 2 J(\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^2 J(w)=(yXw)2+λw22=(yXw)2+λw2

    w = ( X T X + λ I ) − 1 X T y \textbf w=(\textbf X^T\textbf X+\lambda\textbf I)^{-1}\textbf X^Ty w=(XTX+λI)1XTy

    单位矩阵 I I I的对角线上全是1,像一条山岭一样,这也是岭回归名称的由来。

    每日小常识

    0-1损失函数
    L ( Y , f ( X ) ) = { 1 Y ≠ f ( X ) 0 Y = 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))=Yf(x)

    log对数损失函数
    L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y,P(Y|X))=-logP(Y|X) L(Y,P(YX))=logP(YX)
    log对数损失函数能非常好的表征概率分布,如果需要知道结果属于每个类别的置信度,那它非常合适。但健壮性不强,对噪声敏感。

    大名鼎鼎的平方损失函数
    L ( Y ∣ f ( X ) ) = ∑ N ( Y − f ( X ) ) 2 L(Y|f(X))=\sum_N(Y-f(X))^2 L(Yf(X))=N(Yf(X))2

    不解释

    指数损失函数
    L ( Y ∣ f ( X ) ) = e − y f ( x ) L(Y|f(X))=e^{-yf(x)} L(Yf(X))=eyf(x)

    对噪声非常敏感

    Hinge损失函数
    L ( y , f ( x ) ) = m a x ( 0 , 1 − y f ( x ) ) L(y,f(x))=max(0,1-yf(x)) L(y,f(x))=max(0,1yf(x))

    SVM就用这个损失函数

    交叉熵损失函数
    这个后面讲,值得注意的是对数损失函数和交叉熵损失函数是等价的。

    更多相关内容
  • 最小二乘法代价函数

    千次阅读 2022-02-21 16:09:53
    最小二乘法:又称作最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。可以用于曲线拟合,解决一些优化问题。 公式: 如何计算?(以预测函数为过原地的函数举例) 将所有点,(预测值-真实值)...

    最小二乘法:又称作最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。可以用于曲线拟合,解决一些优化问题。

    公式:

    如何计算?(以预测函数为过原地的函数举例)

    将所有点,(预测值-真实值)的平方相加,再求均值。

    代价函数:又叫损失函数。用于描述预测模型与真实数据,之间的偏差。损失,顾名思义,与真实值相比,损失了或者偏差了多少,其值越小, 模型越拟合真实值。(这里以过原点的预测函数举例

     画红线的部分就为,过原点这个预测函数的代价函数。可以看出,它是一个二次函数,所以当代价函数取最低点时,此时误差最小,w的取值就为预测函数的最佳取值,拟合程度就越高。

    这里的代价函数时二次函数,很多时候代价函数是一个抛物面,以及超平面等等。

     总结: 机器学习的目标就是找到代价函数的最小值来实现对数据的最优拟合。

    视频:【线性回归、代价函数、损失函数】动画理解,发财致富_哔哩哔哩_bilibili

    展开全文
  • 文章目录最小二乘法代数求解step1:f=∑i=1n(yi−(w0+w1xi))2f=\sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i))^2f=∑i=1n​(yi​−(w0​+w1​xi​))2为平方损失函数;step2:分别对该函数的w0w_0w0​和w1w_1w1​求偏导;step3:...

    前置知识

    平方损失函数

    在这里插入图片描述假设上图的红线就是拟合出的函数 y = w 0 + w 1 x y=w_0+w_1x y=w0+w1x,那么每个数据点(xi,yi)所对应的误差就是 y i − ( w 0 + w 1 x i ) y_{i}-(w_0+w_1x_i) yi(w0+w1xi)上面的误差往往也称之为「残差」。但是在机器学习中,我们更喜欢称作「损失」,即真实值和预测值之间的偏离程度。那么,对 𝑛个全部数据点而言,其对应的残差损失总和就为:

    ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) \sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i)) i=1n(yi(w0+w1xi))

    更进一步,在线性回归中,我们一般使用残差的平方和来表示所有样本点的误差。公式如下:

    ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 \sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i))^2 i=1n(yi(w0+w1xi))2

    使用残差平方和的好处在于能保证损失始终是累加的正数,而不会存在正负残差抵消的问题。对于此公式而言,机器学习中有一个专门的名词,那就是平方损失函数。而为了得到拟合参数 𝑤0 和 𝑤1 最优的数值,我们的目标就是让平方损失函数最小。

    最小二乘法

    代数求解

    step1: f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 f=\sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i))^2 f=i=1n(yi(w0+w1xi))2为平方损失函数;

    step2:分别对该函数的 w 0 w_0 w0 w 1 w_1 w1求偏导;

    ∂ f ∂ w 0 = − 2 ∑ i = 1 n y i − n w 0 − ∑ i = 1 n w 1 x i \frac{\partial{f}}{\partial{w_0}}=-2\sum_{i=1}^ny_i-nw_0-\sum_{i=1}^nw_1x_i w0f=2i=1nyinw0i=1nw1xi ∂ f ∂ w 1 = − 2 ∑ i = 1 n ( x i y i − w 0 x i + w 1 x i 2 ) \frac{\partial{f}}{\partial{w_1}}=-2\sum_{i=1}^n(x_iy_i-w_0x_i+w_1x_i^2) w1f=2i=1n(xiyiw0xi+w1xi2)

    step3:分别令偏导为零;

    首先,这是一个二次函数,极值就是最值。其次只要足够偏移,平方损失函数的值就会不断变大,所以是不可能取到极大值的,那么偏导为0的时候就只可能取到极小值了。

    w 1 = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 (7b) w_{1}=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{7b} w1=nxi2(xi)2nxiyixiyi(7b) w 0 = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 (7b) w_{0}=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{7b} w0=nxi2(xi)2xi2yixixiyi(7b)到目前为止,已经求出了平方损失函数最小时对应的参数值,这也就是最佳拟合直线。

    矩阵推导

    讲在前面,矩阵推到较为复杂,之所以还要赘述,是因为当数据量较大时,矩阵方式求解速度会更快。

    step1:函数式转化为矩阵形式;

    一元线性函数的表达式为 y ( x , w ) = w 0 + w 1 x y(x,w)=w_0+w_1x y(x,w)=w0+w1x,表达成矩阵形式为:
    [ 1 , x 1 1 , x 2 ⋯ 1 , x 9 1 , x 10 ] [ w 0 w 1 ] = [ y 1 y 2 ⋯ y 9 y 10 ] \left[ \begin{array}{c}{1, x_{1}} \\ {1, x_{2}} \\ {\cdots} \\ {1, x_{9}} \\ {1, x_{10}}\end{array}\right] \left[ \begin{array}{c}{w_{0}} \\ {w_{1}}\end{array}\right] = \left[ \begin{array}{c}{y_{1}} \\ {y_{2}} \\ {\cdots} \\ {y_{9}} \\ {y_{10}}\end{array}\right] 1,x11,x21,x91,x10[w0w1]=y1y2y9y10即: y ( x , w ) = X W y(x, w) = XW y(x,w)=XW平方损失函数为: f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 = ( y − X W ) T ( y − X W ) f = \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}}^2 =(y-XW)^T(y-XW) f=i=1n(yi(w0+w1xi))2=(yXW)T(yXW)计算乘法分配律得到: f = y T y − y T ( X W ) − ( X W ) T y + ( X W ) T ( X W ) f = y^{T}y - y^{T}(XW) - (XW)^{T}y + (XW)^{T}(XW) f=yTyyT(XW)(XW)Ty+(XW)T(XW)在该公式中 y y y X W XW XW 皆为相同形式的 ( m , 1 ) (m,1) (m,1) 矩阵,由此两者相乘属于线性关系,所以等价转换如下: f = y T y − ( X W ) T y − ( X W ) T y + ( X W ) T ( X W ) = y T y − 2 ( X W ) T y + ( X W ) T ( X W ) f = y^{T}y - (XW)^{T}y - (XW)^{T}y + (XW)^{T}(XW)\\ = y^{T}y - 2 (XW)^{T}y + (XW)^{T}(XW) f=yTy(XW)Ty(XW)Ty+(XW)T(XW)=yTy2(XW)Ty+(XW)T(XW)

    step2:矩阵对系数 W W W求偏导;

    f = y T y − 2 ( X W ) T y + ( X W ) T ( X W ) f= y^{T}y - 2 (XW)^{T}y + (XW)^{T}(XW) f=yTy2(XW)Ty+(XW)T(XW)第一项为常数项可以直接省去,第二项为一次项根据求导公式:
    ∂ x T ∂ x = I \frac{\partial{x^T}}{\partial{x}}=I xxT=I可得第二项求导结果为 2 X T y 2X^Ty 2XTy,第三项为二次项,根据求导公式:
    ∂ u T v ∂ x = ∂ u T ∂ x v + ∂ v T ∂ x u \frac{\partial{u^Tv}}{\partial{x}}=\frac{\partial{u^T}}{\partial{x}}v+\frac{\partial{v^T}}{\partial{x}}u xuTv=xuTv+xvTu
    可以求得:
    ∂ ( ( X W ) T ( X W ) ) ∂ W = ∂ ( W T X T ) ∂ W W X + ∂ ( W T X T ) ∂ W W X = 2 X T X W \frac{\partial{((XW)^T(XW))}}{\partial{W}}=\frac{\partial{(W^TX^T)}}{\partial{W}}WX+\frac{\partial{(W^TX^T)}}{\partial{W}}WX=2X^TXW W((XW)T(XW))=W(WTXT)WX+W(WTXT)WX=2XTXW

    step3:令偏导为0;

    此步骤原因请参考代数部分解释,不再赘述。

    ∂ f ∂ W = 2 X T X W − 2 X T y = 0 \frac{\partial{f}}{\partial{W}}=2X^TXW-2X^Ty=0 Wf=2XTXW2XTy=0化简得: W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)1XTy

    至此,两种方法推导均已完成。

    展开全文
  • MATLAB | 最小二乘法的两种解读

    千次阅读 2022-01-07 21:50:21
    大部分的最小二乘法公式推导,都是使用的 代价函数偏导 的方式来求得的,在这里首先展示如何通过代价函数求偏导的方式得到最小二乘公式,再展示李扬老师讲解的如何由向量到子空间的距离得来最小二乘法公式。...

    最小二乘法

    大部分的最小二乘法公式推导,都是使用的 代价函数偏导 的方式来求得的,在这里首先展示如何通过代价函数求偏导的方式得到最小二乘公式,再展示李扬老师讲解的如何由向量到子空间的距离得来最小二乘法公式。

    代价函数与最小二乘法

    假设我们的拟合结果为:

    h θ ( x ) = ∑ i = 0 n θ i x i = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_{\theta}(x)=\sum_{i=0}^{n} \theta_{i} x_{i}=\theta_{0}+\theta_{1} x_{1}+\cdots+\theta_{n} x_{n} hθ(x)=i=0nθixi=θ0+θ1x1++θnxn

    则平方损失函数为:

    J ( θ ) = ∑ j = 1 m ( h θ ( x ( j ) ) − y ( j ) ) 2 = ∑ j = 1 m ( ∑ i = 0 n θ i x i ( j ) − y ( j ) ) 2 J(\theta)=\sum_{j=1}^{m}\left(h_{\theta}\left(x^{(j)}\right)-y^{(j)}\right)^{2}=\sum_{j=1}^{m}\left(\sum_{i=0}^{n} \theta_{i} x_{i}^{(j)}-y^{(j)}\right)^{2} J(θ)=j=1m(hθ(x(j))y(j))2=j=1m(i=0nθixi(j)y(j))2

    其中 x ( j ) , y ( j ) x^{(j)},y^{(j)} x(j),y(j)为一组数据点, x ( j ) x^{(j)} x(j)是长度为 n + 1 n+1 n+1的向量, y ( j ) y^{(j)} y(j)是数值,而 x i → \overrightarrow{x_i} xi 我们定义为长为 m m m的向量,这在之后会被用到,注意这里为了追求整齐性,我们直接定义 x 0 x_0 x0衡为常数1:
    x ( j ) = ( 1 , x 1 ( j ) , … , x n ( j ) ) x i → = ( x i ( 1 ) , x i ( 2 ) , … , x i ( m ) ) \begin{aligned} &x^{(j)}=\left(1, x_{1}^{(j)}, \ldots, x_{n}^{(j)} \right)\\ &\overrightarrow{x_{i}}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \ldots, x_{i}^{(m)}\right) \end{aligned} x(j)=(1,x1(j),,xn(j))xi =(xi(1),xi(2),,xi(m))

    平方损失函数的形式只有极小值,没有极大值,我们要使代价函数最小,我们要找到其极值点,即偏导均为0的点,代价函数对于各参数偏导如下:

    ∂ J ( θ ) θ i = 2 ∑ j = 1 m ( h θ ( x ( j ) ) − y ( j ) ) x i ( j ) , i = 0 , 1 , 2 , . . . n \frac{\partial J(\theta)}{\theta_{i}}=2 \sum_{j=1}^{m}\left(h_{\theta}\left(x^{(j)}\right)-y^{(j)}\right) x_i^{(j)},i=0,1,2,...n θiJ(θ)=2j=1m(hθ(x(j))y(j))xi(j),i=0,1,2,...n
    令偏导为0得:
    ∑ j = 1 m ( h θ ( x ( j ) ) − y ( j ) ) x i ( j ) = 0 , i = 0 , 1 , 2 , . . . , n ⇒ ∑ j = 1 m ( h θ ( x ( j ) ) x i ( j ) ) = ∑ j = 1 m ( y ( j ) x i ( j ) ) , i = 0 , 1 , 2 , . . . , n \begin{aligned} &\sum_{j=1}^{m}\left(h_{\theta}\left(x^{(j)}\right)-y^{(j)}\right) x_i^{(j)}=0,i=0,1,2,...,n \\ \Rightarrow &\sum_{j=1}^{m}\left(h_{\theta}\left(x^{(j)}\right)x_i^{(j)}\right)=\sum_{j=1}^{m}\left(y^{(j)}x_i^{(j)}\right),i=0,1,2,...,n \end{aligned} j=1m(hθ(x(j))y(j))xi(j)=0,i=0,1,2,...,nj=1m(hθ(x(j))xi(j))=j=1m(y(j)xi(j)),i=0,1,2,...,n

    实际上若是令:

    X = [ − ( x ( 1 ) ) − − ( x ( 2 ) ) − ⋮ − ( x ( m ) ) − ] Y = [ y ( 1 ) y ( 2 ) ⋮ y ( m ) ] θ = [ θ 0 θ 1 ⋮ θ n ] X=\left[\begin{array}{c} -\left(x^{(1)}\right)- \\ -\left(x^{(2)}\right)- \\ \vdots \\ -\left(x^{(m)}\right)- \end{array}\right] \quad Y=\left[\begin{array}{c} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{array}\right] \quad \theta=\left[\begin{array}{c} \theta_0 \\ \theta_1\\ \vdots \\ \theta_n \end{array}\right] X=(x(1))(x(2))(x(m))Y=y(1)y(2)y(m)θ=θ0θ1θn
    为了尽量写的清晰明了,在这里对比一下 X X X X ′ X^{\prime} X
    X = [ − ( x ( 1 ) ) − − ( x ( 2 ) ) − ⋮ − ( x ( m ) ) − ] X ′ = [ − ( x 0 → ) − − ( x 1 → ) − ⋮ − ( x n → ) − ] X=\left[\begin{array}{c} -\left(x^{(1)}\right)- \\ -\left(x^{(2)}\right)- \\ \vdots \\ -\left(x^{(m)}\right)- \end{array}\right] \quad X^{\prime}=\left[\begin{array}{c} -\left(\overrightarrow{x_0}\right)- \\ -\left(\overrightarrow{x_1}\right)- \\ \vdots \\ -\left(\overrightarrow{x_n}\right)- \end{array}\right] X=(x(1))(x(2))(x(m))X=(x0 )(x1 )(xn )
    则有:
    ∑ j = 1 m ( h θ ( x ( j ) ) x i ( j ) ) = ∑ j = 1 m ( y ( j ) x i ( j ) ) , i = 0 , 1 , 2 , . . . , n ⇒ x i → X θ = x i → Y , i = 0 , 1 , 2 , . . . , n ⇒ X ′ X θ = X ′ Y ⇒ θ = ( X ′ X ) − 1 X ′ Y \begin{aligned} \sum_{j=1}^{m}\left(h_{\theta}\left(x^{(j)}\right)x_i^{(j)}\right)&=\sum_{j=1}^{m}\left(y^{(j)}x_i^{(j)}\right),i=0,1,2,...,n \\ \Rightarrow \overrightarrow{x_i}X\theta&=\overrightarrow{x_i}Y,i=0,1,2,...,n \\ \Rightarrow X^{\prime}X\theta&=X^{\prime}Y \\ \Rightarrow \theta&=(X^{\prime}X)^{-1}X^{\prime}Y \end{aligned} j=1m(hθ(x(j))xi(j))xi XθXXθθ=j=1m(y(j)xi(j)),i=0,1,2,...,n=xi Y,i=0,1,2,...,n=XY=(XX)1XY

    向量到子空间的距离与最小二乘法

    注意,为了迎合(线代/高代)的习惯,以下内容推导过程依旧使用常用的 A X = b AX=b AX=b符号,但在最后使用时,为了对多项式函数或多元函数各变量进行对应,将其修改为 X θ = Y X\theta=Y Xθ=Y的符号体系,请大家注意对应。

    实数域上的线性方程组 A s × n X n × 1 = b s × 1 A_{s \times n}X_{n\times1}=b_{s\times1} As×nXn×1=bs×1大部分情况下 s > n s>n s>n无解,现在想找一个 X 0 X_0 X0使得 ∣ A X 0 − b ∣ \left|A X_{0}-b\right| AX0b最小,这就是所谓的最小二乘法。

    ∣ A X 0 − b ∣  最小  ⟺  对于任意的  X  都有  ∣ A X 0 − b ∣ ≤ ∣ A X − b ∣ ⟺ A X 0 + b ⊥ U  其中  U = { A X ∣ X ∈ R n } = L ( α 1 , ⋯   , α n ) ⟺ A X 0 − b ⊥ α i ( i = 1 , 2 , ⋯   , n ) ⟺ ( α 1 ′ ⋮ α n ′ ) ( A X 0 − b ) = 0 ( i = 1 , 2 , ⋯   , n ) ⟺ A ′ ( A X 0 − b ) = 0 ⟺ A ′ A X 0 = A ′ b . \begin{aligned} \left|A X_{0}-b\right| \text { 最小 } & \Longleftrightarrow \text { 对于任意的 } X \text { 都有 }\left|A X_{0}-b\right| \leq|A X-b| \\ & \Longleftrightarrow A X_{0}+b \perp U \text { 其中 } U=\left\{A X \mid X \in \mathbb{R}^{n}\right\}=L\left(\alpha_{1}, \cdots, \alpha_{n}\right) \\ & \Longleftrightarrow A X_{0}-b \perp \alpha_{i}(i=1,2, \cdots, n) \\ & \Longleftrightarrow\left(\begin{array}{c} \alpha_{1}^{\prime} \\ \vdots \\ \alpha_{n}^{\prime} \end{array}\right)\left(A X_{0}-b\right)=0(i=1,2, \cdots, n) \\ & \Longleftrightarrow A^{\prime}\left(A X_{0}-b\right)=0 \\ & \Longleftrightarrow A^{\prime} A X_{0}=A^{\prime} b . \end{aligned} AX0b 最小  对于任意的 X 都有 AX0bAXbAX0+bU 其中 U={AXXRn}=L(α1,,αn)AX0bαi(i=1,2,,n)α1αn(AX0b)=0(i=1,2,,n)A(AX0b)=0AAX0=Ab.

    若最小的 X 0 X_0 X0存在,则一定满足 A ′ A X 0 = A ′ b A^{\prime} A X_{0}=A^{\prime} b AAX0=Ab形式,现证明该方程组一定有解,原因是:

    r ( A ′ A , A ′ b ) = r ( A ′ ( A , b ) ) ≤ r ( A ′ ) = r ( A ) . r\left(A^{\prime} A, A^{\prime} b\right)=r\left(A^{\prime}(A, b)\right) \leq r\left(A^{\prime}\right)=r(A) . r(AA,Ab)=r(A(A,b))r(A)=r(A).

    同时 r ( A ′ A , A ′ b ) ≥ r ( A ′ A ) = r ( A ) r\left(A^{\prime} A, A^{\prime} b\right) \geq r\left(A^{\prime} A\right)=r(A) r(AA,Ab)r(AA)=r(A),这就说明:

    r ( A ′ A , A ′ b ) = r ( A ) = r ( A ′ A ) . r\left(A^{\prime} A, A^{\prime} b\right)=r(A)=r\left(A^{\prime} A\right) . r(AA,Ab)=r(A)=r(AA).

    因此要求解让 ∣ X θ − Y ∣ \left|X \theta-Y\right| XθY取最小值的 θ \theta θ 只需求解 ( X ′ X ) − 1 X ′ Y (X^{\prime}X)^{-1}X^{\prime}Y (XX)1XY

    最小二乘法与多项式拟合

    以下展示自己编写最小二乘法拟合多项式与MATLAB自带函数 polyfit 拟合多项式的参数对比,注意,为了和MATLAB自带函数保持一致, θ \theta θ 向量变为第一个参数为 θ n \theta_n θn ,最后一个参数为 θ 0 \theta_0 θ0 , X X X 矩阵也做了相应的调整:

    % 最小二乘法多项式拟合
    
    % 原三次函数+随机噪声
    f=@(x)x.^3+6.*x.^2-2.*x+4+(rand(size(x))-.5).*20;
    
    % 构造原始数据
    x=-5:.1:5;
    y=f(x);
    
    % 自己写一个最小二乘
    n=3;% 最高次数为三次
    X=(x').^(n:-1:0);
    theta1=((X'*X)\X'*y')';
    
    % MATLAB自带多项式拟合
    theta2=polyfit(x,y,n);
    
    % 输出对比
    disp(theta1)
    disp(theta2)
    
    % 一个小技巧,下面的写法能够快速将
    % 参数向量变成有关x的多项式匿名函数
    func=matlabFunction(poly2sym(theta1));
    

    theta1=
    0.9686 6.0178 -1.8845 4.3362
    theta2=
    0.9686 6.0178 -1.8845 4.3362

    多项式拟合结果绘图:

    % 绘图部分
    
    % 保持坐标区域不刷新并添加网格
    ax=gca;hold(ax,'on');grid(ax,'on');
    
    % 绘制原数据点和拟合结果
    plot(x,y,'o','MarkerFaceColor',[94,142,179]./255);
    plot(x,func(x),'Color',[0,64,115]./255,'LineWidth',2);
    
    % 修饰一下
    ax.FontName='cambria';
    ax.LineWidth=1.5;
    ax.GridLineStyle='--';
    ax.XColor=[1,1,1].*.3;
    ax.YColor=[1,1,1].*.3;
    ax.ZColor=[1,1,1].*.3;
    

    在这里插入图片描述

    最小二乘法与多元线性回归

    以下展示自己编写最小二乘法进行多元线性回归与MATLAB自带函数 regress 进行多元线性回归的参数对比:

    % 最小二乘法多元线性回归
    
    % 原二元函数+随机噪声
    f=@(x1,x2) 3.*x1+4.*x2+5+(rand(size(x1))-.5).*10;
    
    % 构造原始数据
    [x1,x2]=meshgrid(-5:.5:5,-5:.5:5);
    y=f(x1,x2);
    
    % 自己写一个最小二乘
    X=[x1(:),x2(:),ones(size(x1(:)))];
    theta1=((X'*X)\X'*y(:));
    
    % MATLAB多元线性回归
    theta2=regress(y(:),X);
    
    % 输出对比
    disp(theta1)
    disp(theta2)
    
    % 构造拟合结果的二元匿名函数
    func=matlabFunction([sym('x1'),sym('x2'),1]*theta1);
    

    theta1=
    2.9285 4.0688 4.7520
    theta2=
    2.9285 4.0688 4.7520

    多元线性回归结果绘图:

    % 绘图部分
    
    % 保持坐标区域不刷新并添加网格
    ax=gca;hold(ax,'on');grid(ax,'on');
    
    % 绘制原数据点和拟合结果
    mesh(x1,x2,func(x1,x2),'FaceColor','flat','FaceAlpha',.8)
    scatter3(x1(:),x2(:),y(:),20,'filled')
    
    % 修饰一下
    ax.FontName='cambria';
    ax.LineWidth=1.5;
    ax.GridLineStyle='--';
    ax.XColor=[1,1,1].*.3;
    ax.YColor=[1,1,1].*.3;
    ax.ZColor=[1,1,1].*.3;
    view(30,20)
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 各种最小二乘法汇总(算例及MATLAB程序)修改提高.rar
  • 最小二乘法的原理理解

    万次阅读 多人点赞 2021-11-28 14:57:38
    在上文一文让你彻底搞懂最小二乘法(超详细推导)中我们提到过,发明最小二乘法的勒让德认为,让误差的平方和最小估计出来的模型是最接近真实情形的(误差=真实值-理论值)。换句话说,勒让德认为最佳的拟合准则是使 ...
  • 参考文章:最小二乘与交叉熵代价函数的区别(作用及公式推导)
  • 线性最小二乘法

    千次阅读 2020-07-08 21:37:50
    最小二乘法是一种相对来说比较简单而且易于理解的算法,在分类回归算法中经常使用。最近在学习Deep Learning这本书,遇到线性最小二乘,刚开始对于书本上的公式还不是很理解,后来经过查阅资料,对线性最小二乘的...
  • 昨晚再次看到"under fittng"以及"over fitting"这个视频(是第四个视频吧)的时候,里面讲到了这个问题,也就是在线性回归中,对房价的预测为什么使用了J = 1/2*(y-h(x))^2作为代价函数来求解参数。 接
  • 最小二乘法、正则化

    千次阅读 2021-11-11 16:49:45
    本篇主要内容涉及最小二乘法的矩阵表达与几何意义,从概率的视角,来推导最小二乘法,最后考虑在特征维数大于样本数量的情况,引入正则化项。
  • 最小二乘法曲线拟合(代码注释)

    千次阅读 2022-02-14 22:16:23
    最小二乘法曲线拟合(代码注释)
  • 数学模型之最小二乘法

    万次阅读 2019-11-02 16:39:05
    前言废话     前面讲了线性回归分析,从观测数据中确定线性...1、多元函数求最值(也有的说法把这当成最小二乘法) 2、利用线代的几何意义 3、梯度下降法 一、多元函数求最值 从本质上来说,上述均方误差和就是...
  • 普通最小二乘法

    千次阅读 2018-08-02 23:59:57
    sklearn中的LinearRegression类拟合了一个带有系数w=(w1,w2,...,wp)w=(w1,w2,...,wp)w=(w_1,w_2,...,w_p)的线形模型,使得数据集实际观测数据和预测数据之间的残差平方和最小: minw||Xw−y||22minw||Xw−y||22min_...
  • 梯度下降目的是最小化损失函数: 批量梯度下降(Batch Gradient Descent,BGD) 优点: (1)准确率高。 缺点: (1)训练和收敛速度慢。 (2)可能不会收敛到最小值,而是在附近震荡。解决方法:采用学习率衰减的...
  • 正规方程是通过求解代价函数的导数,令导数为0来求theta的值。 第一个等式是线性回归的代价函数,第二个等式是将其写成向量化的形式。 我们知道向量的转置乘以该向量的含义是求出向量中各元素的平方和 令...
  • 使用最小二乘法计算多元线性回归的公式推导

    万次阅读 多人点赞 2019-08-28 16:04:00
    机器学习-线性回归线性回归背景最小二乘法计算线性回归数据的准备把数据转换成数学损失函数根据损失函数计算最终结果总结 最近老师让我学习线性回归编程模型,此篇介绍使用最小二乘法实现单机器线性回归。 线性回归...
  • 线性回归中的最小二乘法和梯度下降法比较

    千次阅读 多人点赞 2019-01-18 17:22:56
    变成代价函数J,虽然用不同的字母表示了,但是他们的含义是一模一样的啦~ 前面的1/2m系数只是为了后面求导的时候,那个平方一求导不是要乘一个2嘛,然后和1/2m的2抵消就没了,变成如下: J ( θ 0 , θ 1 ) = 1 2 m ...
  • 最小化此成本函数的想法归功于 ID:48799。 在 LSSMOOTH 中,求解方法和用户控件是不同的,为了数字和方便,并且在速度上有一定的代价。 配套的平滑器 IRLSSMOOTH (ID:49788) 将这种平滑方法更进一步。 用户以样本...
  • 并为变量赋值2、定义系数初始值以及学习率和迭代次数3、定义最小二乘法函数-损失函数(代价函数)4、定义梯度下降算法求解线性回归方程系数python函数5、代用函数,进行系数求解,并打印6、画出回归方
  • 我们用最小二乘法,一般是在求解线性方程组时使用。往往这时的独立方程个数会多于自由变量的个数,导致没有解存在。 考察这样一个方程组:Ax=b,其中A是m行n列的矩阵,x和b均为n维向量。该方程组有解,充分必要于...
  • 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价...
  • 2. 最小二乘法 线性拟合。将拟合函数取 线性函数或多项 式函数是一种简 单的数据拟合方法。确定线性拟合函数 φ(x)=a+bx, 称为对数据的线性拟合。对于线性拟合问题,需要求函数 的最小值点。 由函数对两个...
  • Eigen C++非线性最小二乘法代码实现

    千次阅读 2020-02-19 00:00:32
    // 获得代价函数 { Eigen :: MatrixXd cost = fx_ . transpose ( ) * fx_ ; return cost ( 0 , 0 ) ; } double F ( double a , double b , double c ) { Eigen :: MatrixXd fx ...
  • 分别根据梯度法和最小二乘法求解多元函数问题分别使用梯度下降法和最小二乘法求解多元函数并进行比较,这里使用jupyter notebook平台进行Python编程一、题目描述二、使用梯度下降法求解多元函数(一)梯度下降法基本...
  • 多元函数拟合。如 电视机和收音机价格多销售额的影响,此时自变量有两个。python 解法:importnumpy as npimportpandas as pd#import statsmodels.api as sm #方法一import statsmodels.formula.api as smf #方法二...
  • 最小二乘法MSE 梯度下降法

    千次阅读 2019-11-09 22:04:03
    变成代价函数J,虽然用不同的字母表示了,但是他们的含义是一模一样的啦~ 前面的1/2m系数只是为了后面求导的时候,那个平方一求导不是要乘一个2嘛,然后和1/2m的2抵消就没了,变成如下: 然后θ₀和θ₁分别是这样子...
  • 线性回归与最小二乘法

    千次阅读 2018-09-12 16:10:33
    最小二乘法 最小二乘法是我们经常用到的求解模型的回归方法,是一种优化方法,对于一个线性模型 Xθ=yXθ=yX\theta=y XXX为mmm行nnn列的矩阵,代表mmm个样本,每个样本有nnn个变量,即有mmm个等式,未知数nnn个,...
  • 高翔 slam 14 讲 chapter 6 1. 求参数 abc, 优化 y = exp(a* x^2 + b*x + c) #include <iostream> #include <opencv2/core/core.hpp>...// 代价函数的计算模型 struct CURVE_FITTING_COST { ..
  • 非线性最小二乘法

    千次阅读 2020-01-03 07:20:17
    * @return 返回一个CostFunction*,一直没想出CostFunction的很贴切的名字,代价函数太直白不够形象,这里其实有点导函数的意思,但名字上又完全不相关 */ static ceres :: CostFunction * Create ( const ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,947
精华内容 1,578
热门标签
关键字:

最小二乘法代价函数