原文:http://blog.163.com/phoenixbai@126/blog/static/1086513492013953817839/
參考:線性迴歸和logistic迴歸 講述了矩陣法的推導過程
Logistic regression (邏輯迴歸) 概述 白話的概述
線性迴歸-理論篇 概論級別
對線性迴歸、邏輯迴歸、各種迴歸的概念學習 更多的概念
學習Logistic Regression的筆記與理解 梯度下降法的迴歸過程
Normal Equations 的由來 梯度下降與矩陣方程法比較,大量訓練用梯度下降法
這幾天開始學習coursera上的andrew ng老師的machine learning課程。
由於我對此課程的學習沒有能做到很連續,即看完視頻,過幾天後纔在開始做作業,所以總出現公式忘掉或記憶模糊的情況,導致做作業時,總感覺自己對課程理解不深刻而惶恐不安。
爲了改變此局面,決定找個地兒,寫學習筆記,以便忘了,或概念模糊時,可以幫助自己重溫一下!
線性迴歸(Linear Regression)
"迴歸"的由來
Francis Galton,英國生物學家,他研究了父母身高與子女身高之間關係後得出,若父母身高高於平均大衆身高,則其子女身高傾向於倒退生長,即會比其父母身高矮一些而更接近於大衆平均身高。若父母身高小於平均身高,則其子女身高傾向於向上生長,以更接近於大衆平均身高。此現象,被Galton稱之爲迴歸現象,即regression.
什麼是線性迴歸?
迴歸函數的具體解釋和定義,可查看任何一本“概率論與數理統計”的書。我看的是“陳希孺”的。
這裏我講幾點:
1)統計迴歸分析的任務,就在於根據
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
和Y的觀察值,去估計函數f,尋求變量之間近似的函數關係。
2)我們常用的是,假定f函數的數學形式已知,其中若干個參數未知,要通過自變量和因變量的觀察值去估計未知的參數值。這叫“參數迴歸”。其中應用最廣泛的是f爲線性函數的假設:
這種情況叫做“線性迴歸”。這個線性模型就是我們今後主要討論的對象。
3)
自變量只有一個時,叫做一元線性迴歸。f = b0+b1x
自變量有多個時,叫做多元線性迴歸。
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
4)分類(Classification)與迴歸(Regression)都屬於監督學習,他們的區別在於:
分類:用於預測有限的離散值,如是否得了癌症(0,1),或手寫數字的判斷,是0,1,2,3,4,5,6,7,8還是9等。分類中,預測的可能的結果是有限的,且提前給定的。
迴歸:用於預測實數值,如給定了房子的面積,地段,和房間數,預測房子的價格。
一元線性迴歸
舉個例子!
我們要預測房價。當前自變量(輸入特徵)是房子面積x,因變量是房價y.給定了一批訓練集數據。
我們要做的是利用手上的訓練集數據,得出x與y之間的函數f關係,並用f函數來預測任意麪積x對應的房價。
假設x與y是線性關係,則我們可以接着假設一元線性迴歸函數如下來代表y的預測值:
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
我們有訓練集了,那麼問題就成了如何利用現有的訓練集來判定未知參數
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值,使其讓
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值更接近實際值y?
訓練集指的是已知x,y值的數據集合!
一種方法是計算它的
成本函數(Cost function),即預測出來的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值與實際值y之間的方差的大小來決定當前的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
值是否是最優的!
常用的成本函數是最小二乘法:
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
是變量
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的函數,故我們的目標就成了獲取使
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
值最小時的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值!!!
下面的圖表示,當
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
取各個值時對應的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值,從圖中可看出,當
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
分別取特定的某一值時,
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
可達到全局最小值,而對應的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值,就是我們要定位到的最終理想的值!
那麼如何找到理想的
![機器學習筆記-線性迴歸 - phoenixbai@126 - PhoenixBai]()
的值?
其中一個辦法是,利用微積分裏的梯度下降!
梯度下降的概念可查看高等數學下冊!
梯度下降算法:(alpha是自定義的,叫learning rate,設得值太大,可能永遠無法收斂,設得太小,則收斂會很慢很慢)
循環直到收斂{
}
對於線性迴歸模型,成本函數的導數如下: (theta 0 對應的x爲常量1)
一般程序裏會寫明最多循環次數以及收斂條件(如cost function值小於power(10,-3)時認爲成功收斂).若能自動收斂,甚好,若不能,則循環指定次數後,強行退出。此時,你需要調參數alpha或者重新慎視假設模型!
另一種方法是Normal Equation!
直接用矩陣的運算求出最佳的theta值。套現成公式,就能求得theta,此公式的原理,以後再補!
X是矩陣,代表訓練集,每一行是一個樣本的各特徵值。y是個向量,對應每個樣本的結果值。
梯度下降與Normal Equation的對批:
Gradient Descent |
Normal Equation |
自定義alpha |
不需要定義alpha |
盾環N次才能得到最佳theta值 |
不需要任何循環操作 |
特徵個數非常大時,也適用 |
X的轉陣與逆矩陣的計算量很大,
導致特徵個數多時,會很慢,適用於 特徵個數小於100000時使用 |
需要feature scaling |
不需要feature scaling |
多元線性迴歸(Linear Regression with Multiple Variables)
跟一元線性迴歸的參數迴歸方式如出一轍,唯一區別在迴歸函數的假設上:
多元,故名思義,就是說有多個特徵做爲輸入。那問題就來了,若多個特徵的表達值的範圍不一樣,會有什麼影響和後果?比如,繼續拿預測房價作爲例子。現在它的特徵增加了,特徵1是面積,特徵2是房間數,特徵3是房子的年齡。很明顯,這三個特徵的值的範圍是有很大差異的。
特徵1:100到300之間
特徵2: 2到5之間
特徵3:20到60年之間
若不做任何處理,則特徵1和3對結果的影響遠大於特徵2,而可能扭曲了真實情況下,各特徵在最終結果中所應占的權重比例。
所以,一般情況下,特徵與特徵之間的值變化範圍差異過大時,我們用feature scaling的手段來規範化特徵值,使每個特徵的特徵值都處於-1至1之間。
Feature Scaling
feature scaling的方法可自定義,常用的有:
1) mean normalization (or standardization)
(X - mean(X))/std(X)
2) rescaling
(X - min) / (max - min)
先下這兒。接下來寫邏輯迴歸!