我們以最簡單的一元線性模型來解釋最小二乘法逞度。什么是一元線性模型呢? 監(jiān)督學(xué)習(xí)中妙啃,如果預(yù)測的變量是離散的档泽,我們稱其為分類(如決策樹,支持向量機(jī)等)揖赴,如果預(yù)測的變量是連續(xù)的馆匿,我們稱其為回歸≡锘回歸分析中渐北,如果只包括一個自變量和一個因變量,且二者的關(guān)系可用一條直線近似表示铭拧,這種回歸分析稱為一元線性回歸分析赃蛛。如果回歸分析中包括兩個或兩個以上的自變量恃锉,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析呕臂。對于二維空間線性是一條直線破托;對于三維空間線性是一個平面,對于多維空間線性是一個超平面...
對于一元線性回歸模型, 假設(shè)從總體中獲取了n組觀察值(X1歧蒋,Y1)土砂,(X2,Y2)疏尿, …瘟芝,(Xn,Yn)褥琐。對于平面中的這n個點(diǎn),可以使用無數(shù)條曲線來擬合晤郑。要求樣本回歸函數(shù)盡可能好地擬合這組值敌呈。綜合起來看,這條直線處于樣本數(shù)據(jù)的中心位置最合理造寝。 選擇最佳擬合曲線的標(biāo)準(zhǔn)可以確定為:使總的擬合誤差(即總殘差)達(dá)到最小磕洪。有以下三個標(biāo)準(zhǔn)可以選擇:
(1)用“殘差和最小”確定直線位置是一個途徑。但很快發(fā)現(xiàn)計算“殘差和”存在相互抵消的問題诫龙。 (2)用“殘差絕對值和最小”確定直線位置也是一個途徑析显。但絕對值的計算比較麻煩。 (3)最小二乘法的原則是以“殘差平方和最小”確定直線位置签赃。用最小二乘法除了計算比較方便外谷异,得到的估計量還具有優(yōu)良特性。這種方法對異常值非常敏感锦聊。
最常用的是普通最小二乘法( Ordinary Least Square歹嘹,OLS):所選擇的回歸模型應(yīng)該使所有觀察值的殘差平方和達(dá)到最小。(Q為殘差平方和)- 即采用平方損失函數(shù)孔庭。
樣本回歸模型:
為樣本(Xi,
Yi
)的誤差
平方損失函數(shù):
則通過Q最小確定這條直線尺上,即確定
根據(jù)數(shù)學(xué)知識我們知道马绝,函數(shù)的極值點(diǎn)為偏導(dǎo)為0的點(diǎn)。
解得:
這就是最小二乘法的解法吐绵,就是求得平方損失函數(shù)的極值點(diǎn)迹淌。
1 /* 2 最小二乘法C++實(shí)現(xiàn) 3 參數(shù)1為輸入文件 4 輸入 : x 5 輸出: 預(yù)測的y 6 / 7 #include<iostream> 8 #include<fstream> 9 #include<vector>10 using namespace std;11 12 class LeastSquare{13 double a, b;14 public:15 LeastSquare(const vector<double>& x, const vector<double>& y)16 {17 double t1=0, t2=0, t3=0, t4=0;18 for(int i=0; i<x.size(); ++i)19 {20 t1 += x[i]x[i];21 t2 += x[i];22 t3 += x[i]y[i];23 t4 += y[i];24 }25 a = (t3x.size() - t2t4) / (t1x.size() - t2t2); // 求得β1 26 b = (t1t4 - t2t3) / (t1x.size() - t2t2); // 求得β227 }28 29 double getY(const double x) const30 {31 return ax + b;32 }33 34 void print() const35 {36 cout<<"y = "<<a<<"x + "<<b<<"\n";37 }38 39 };40 41 int main(int argc, char *argv[])42 {43 if(argc != 2)44 {45 cout<<"Usage: DataFile.txt"<<endl;46 return -1;47 }48 else49 {50 vector<double> x;51 ifstream in(argv[1]);52 for(double d; in>>d; )53 x.push_back(d);54 int sz = x.size();55 vector<double> y(x.begin()+sz/2, x.end());56 x.resize(sz/2);57 LeastSquare ls(x, y);58 ls.print();59 60 cout<<"Input x:\n";61 double x0;62 while(cin>>x0)63 {64 cout<<"y = "<<ls.getY(x0)<<endl;65 cout<<"Input x:\n";66 }67 }68 }
四. 最小二乘法與梯度下降法
最小二乘法跟梯度下降法都是通過求導(dǎo)來求損失函數(shù)的最小值河绽,那它們有什么區(qū)別呢。
相同
1.本質(zhì)相同:兩種方法都是在給定已知數(shù)據(jù)(independent & dependent variables)的前提下對dependent variables算出出一個一般性的估值函數(shù)唉窃。然后對給定新數(shù)據(jù)的dependent variables進(jìn)行估算耙饰。 2.目標(biāo)相同:都是在已知數(shù)據(jù)的框架內(nèi)纹份,使得估算值與實(shí)際值的總平方差盡量更泄豆颉(事實(shí)上未必一定要使用平方),估算值與實(shí)際值的總平方差的公式為:
其中
不同 1.實(shí)現(xiàn)方法和結(jié)果不同:最小二乘法是直接對
參考: http://blog.csdn.net/qll125596718/article/details/8248249
原文網(wǎng)址:http://www.cnblogs.com/iamccme/archive/2013/05/15/3080737.html