最小二乘法則是一種統計學習優化技術,它的目標是最小化誤差平方之和來作為目標,從而找到最優模型,這個模型可以擬合(fit)觀察資料。
回歸學習最常用的損失函式是平方損失函式,在此情況下,回歸問題可以用著名的最小二乘法來解決。最小二乘法就是曲線擬合的一種解決方法。
最小二乘法的問題分為兩類:
如果是線性的則有閉式解(closed-form solution),唯一解。理解為所有點都在某條線上,全擬合好了。
非線性的經常需要數值方法來求解。比如:隨機梯度下降或者牛頓法等。當然,隨機梯度下降也可以解決線性問題。
j(θ)=∑i=1m(fθ(xi)−yi)2(1)(1)j(θ)=∑i=1m(fθ(xi)−yi)2
最小二乘法的目標就是最小化公式1。f則是模型(取自假設空間),y則是觀察值。
通俗來講,就是觀察值和擬合值(模型給出)之間的距離平方和最小化作為目標來優化。
思想就是把目標函式劃歸為矩陣運算問題,然後求導後等於0,從而得到極值。以線性回歸問題為例:
求解最小二乘的問題推導為如下:求解變數θθ,滿足
(xtx)θ=xty(2)(2)(xtx)θ=xty
如果可逆,將得到:
θ=(xtx)−1xtyθ=(xtx)−1xty
這是利用矩陣得到的最小二乘法的一種解法。
注意這是線性回歸的最小二乘法的求解結果,不是其他問題的,其他問題的假設函式有時候很複雜。比如下面的博文對線性回歸的推算挺好,但沒有說明求導的大前提條件:線性回歸,這容易把最小二乘法和最小二乘法的求解混在一起。
思路:對引數向量求導,使其梯度為0,然後得到引數變數的迭代更新公式。
θj:=θj−α∗∂j(θ)∂(θj)(3)(3)θj:=θj−α∗∂j(θ)∂(θj)
請參考:
利用泰勒公式展開,利用梯度和海塞矩陣進行迭代下降。速度很快。
xk+1=xk−h−1kgk(4)(4)xk+1=xk−hk−1gk
變數以牛頓方法來下降。
牛頓方向定義為:
−h−1kgk−hk−1gk
請參考:
最小二乘看做是優化問題的話,那麼梯度下降是求解方法的一種。梯度下降是一種解決最優化問題的數值方法。最小二乘法則是乙個最優化問題。
數值方法的基本含義則是對乙個函式求極值,在無法直接求得解析解的情況下,通過求導為0的方法,找到迭代方向保證可以下降目標值,梯度方向或者牛頓方向等等。 逐步下降直到滿足一些工程要求則結束迭代。
最小二乘法是一種對於偏差程度的評估準則思想,由公式1給出。個人認為,應該稱之為:最小二乘準則。
公式1裡沒有給出f的值,也就是說假設空間。如果是線性回歸,也就是wx+b的形式,那麼公式2就是最小二乘法的解。所以大部分的博文都在此範疇討論。為何都用這個線性回歸直接說呢,其實最小二乘準則更適合線性回歸。應該稱之為狹義的最小二乘方法,是線性假設下的一種有閉式解的引數求解方法,最終結果為全域性最優。
梯度下降只是數值求解的具體操作,和最小二乘準則下面的最優化問題都可以用隨機梯度下降求解。
import numpy as np
import matplotlib.pyplot as plt
data = np.array([
[1, 6],
[2, 5],
[3, 7],
[4, 10]
])m = len(data)
x = np.array([np.ones(m), data[:, 0]]).t
print("x:", x)
y = np.array(data[:, 1]).reshape(-1, 1)
print("y:",y)
w = np.linalg.solve(x.t.dot(x), x.t.dot(y)) ## 求解xw=y的值,w
參考:
機器學習 周志華 線性模型和最小二乘法
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...
最小二乘法
在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...
最小二乘法
最小二乘法 least squares analysis 是一種 數學 優化 技術,它通過 最小化 誤差 的平方和找到一組資料的最佳 函式 匹配。最小二乘法是用最簡的方法求得一些絕對不可知的真值,而令誤差平方之和為最小。最小二乘法通常用於 曲線擬合 least squares fitting 這裡有...