机器学习-最小二乘法1
轉(zhuǎn)載自:點(diǎn)擊打開(kāi)鏈接
一.背景
? ?5月9號(hào)到北大去聽(tīng)hulu的講座《推薦系統(tǒng)和計(jì)算廣告在視頻行業(yè)應(yīng)用》,想到能見(jiàn)到傳說(shuō)中的項(xiàng)亮大神,特地拿了本《推薦系統(tǒng)實(shí)踐》求簽名。講座開(kāi)始,主講人先問(wèn)了下哪些同學(xué)有機(jī)器學(xué)習(xí)的背景,我恬不知恥的毅然舉手,真是慚愧。后來(lái)主講人在講座中提到了最小二乘法,說(shuō)這個(gè)是機(jī)器學(xué)習(xí)最基礎(chǔ)的算法。神馬,最基礎(chǔ),我咋不知道呢! 看來(lái)以后還是要對(duì)自己有清晰認(rèn)識(shí)。
? ?回來(lái)趕緊上百度,搜了下什么是最小二乘法。
???先看下百度百科的介紹:最小二乘法(又稱最小平方法)是一種數(shù)學(xué)優(yōu)化技術(shù)。它通過(guò)最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。最小二乘法還可用于曲線擬合。其他一些優(yōu)化問(wèn)題也可通過(guò)最小化能量或最大化熵用最小二乘法來(lái)表達(dá)。
? ?通過(guò)這段描述可以看出來(lái),最小二乘法也是一種優(yōu)化方法,求得目標(biāo)函數(shù)的最優(yōu)值。并且也可以用于曲線擬合,來(lái)解決回歸問(wèn)題。難怪《統(tǒng)計(jì)學(xué)習(xí)方法》中提到,回歸學(xué)習(xí)最常用的損失函數(shù)是平方損失函數(shù),在此情況下,回歸問(wèn)題可以著名的最小二乘法來(lái)解決。看來(lái)最小二乘法果然是機(jī)器學(xué)習(xí)領(lǐng)域做有名和有效的算法之一。
?
二. 最小二乘法
? ?我們以最簡(jiǎn)單的一元線性模型來(lái)解釋最小二乘法。什么是一元線性模型呢??監(jiān)督學(xué)習(xí)中,如果預(yù)測(cè)的變量是離散的,我們稱其為分類(如決策樹(shù),支持向量機(jī)等),如果預(yù)測(cè)的變量是連續(xù)的,我們稱其為回歸。回歸分析中,如果只包括一個(gè)自變量和一個(gè)因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個(gè)或兩個(gè)以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析。對(duì)于二維空間線性是一條直線;對(duì)于三維空間線性是一個(gè)平面,對(duì)于多維空間線性是一個(gè)超平面...
? ?對(duì)于一元線性回歸模型, 假設(shè)從總體中獲取了n組觀察值(X1,Y1),(X2,Y2), …,(Xn,Yn)。對(duì)于平面中的這n個(gè)點(diǎn),可以使用無(wú)數(shù)條曲線來(lái)擬合。要求樣本回歸函數(shù)盡可能好地?cái)M合這組值。綜合起來(lái)看,這條直線處于樣本數(shù)據(jù)的中心位置最合理。 選擇最佳擬合曲線的標(biāo)準(zhǔn)可以確定為:使總的擬合誤差(即總殘差)達(dá)到最小。有以下三個(gè)標(biāo)準(zhǔn)可以選擇:
? ? ? ? (1)用“殘差和最小”確定直線位置是一個(gè)途徑。但很快發(fā)現(xiàn)計(jì)算“殘差和”存在相互抵消的問(wèn)題。
? ? ? ? (2)用“殘差絕對(duì)值和最小”確定直線位置也是一個(gè)途徑。但絕對(duì)值的計(jì)算比較麻煩。
? ? ? ? (3)最小二乘法的原則是以“殘差平方和最小”確定直線位置。用最小二乘法除了計(jì)算比較方便外,得到的估計(jì)量還具有優(yōu)良特性。這種方法對(duì)異常值非常敏感。
?最常用的是普通最小二乘法( Ordinary ?Least Square,OLS):所選擇的回歸模型應(yīng)該使所有觀察值的殘差平方和達(dá)到最小。(Q為殘差平方和)- 即采用平方損失函數(shù)。
? 樣本回歸模型:
? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ?其中ei為樣本(Xi,?Yi)的誤差
? ?平方損失函數(shù):
? ? ? ? ? ? ? ? ? ? ??
? ?則通過(guò)Q最小確定這條直線,即確定,以為變量,把它們看作是Q的函數(shù),就變成了一個(gè)求極值的問(wèn)題,可以通過(guò)求導(dǎo)數(shù)得到。求Q對(duì)兩個(gè)待估參數(shù)的偏導(dǎo)數(shù):
? ? ? ? ? ? ? ? ? ?? ??
? ? 根據(jù)數(shù)學(xué)知識(shí)我們知道,函數(shù)的極值點(diǎn)為偏導(dǎo)為0的點(diǎn)。
? ? 解得:
? ? ? ? ? ? ? ? ? ?
?
這就是最小二乘法的解法,就是求得平方損失函數(shù)的極值點(diǎn)。
?
三. C++實(shí)現(xiàn)代碼
1 /* 2 最小二乘法C++實(shí)現(xiàn) 3 參數(shù)1為輸入文件 4 輸入 : x 5 輸出: 預(yù)測(cè)的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 = (t3*x.size() - t2*t4) / (t1*x.size() - t2*t2); // 求得β1 26 b = (t1*t4 - t2*t3) / (t1*x.size() - t2*t2); // 求得β2 27 } 28 29 double getY(const double x) const 30 { 31 return a*x + b; 32 } 33 34 void print() const 35 { 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 else 49 { 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 }?
?
四. 最小二乘法與梯度下降法
? ?最小二乘法跟梯度下降法都是通過(guò)求導(dǎo)來(lái)求損失函數(shù)的最小值,那它們有什么區(qū)別呢。
? ?相同
1.本質(zhì)相同:兩種方法都是在給定已知數(shù)據(jù)(independent & dependent variables)的前提下對(duì)dependent variables算出出一個(gè)一般性的估值函數(shù)。然后對(duì)給定新數(shù)據(jù)的dependent variables進(jìn)行估算。
2.目標(biāo)相同:都是在已知數(shù)據(jù)的框架內(nèi),使得估算值與實(shí)際值的總平方差盡量更小(事實(shí)上未必一定要使用平方),估算值與實(shí)際值的總平方差的公式為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?其中為第i組數(shù)據(jù)的independent variable,為第i組數(shù)據(jù)的dependent variable,為系數(shù)向量。
? ?不同
1.實(shí)現(xiàn)方法和結(jié)果不同:最小二乘法是直接對(duì)求導(dǎo)找出全局最小,是非迭代法。而梯度下降法是一種迭代法,先給定一個(gè),然后向下降最快的方向調(diào)整,在若干次迭代之后找到局部最小。梯度下降法的缺點(diǎn)是到最小點(diǎn)的時(shí)候收斂速度變慢,并且對(duì)初始點(diǎn)的選擇極為敏感,其改進(jìn)大多是在這兩方面下功夫。
總結(jié)
以上是生活随笔為你收集整理的机器学习-最小二乘法1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 博主有喜:拿了金奖和最佳创新奖
- 下一篇: 练习3-5 输出闰年