原址html
機器學習能夠解決不少問題,其中最爲重要的兩個是 迴歸與分類。 這兩個問題怎麼解決, 它們之間又有什麼區別呢? 如下舉幾個簡單的例子,以給你們一個概念機器學習
1. 線性迴歸
迴歸分析經常使用於分析兩個變量X和Y 之間的關係。 好比 X=房子大小 和 Y=房價 之間的關係, X=(公園人流量,公園門票票價) 與 Y=(公園收入) 之間的關係等等。函數
那麼你的數據點在圖上能夠這麼看學習
![](http://static.javashuo.com/static/loading.gif)
如今你想找到 房子大小和房價的關係, 也就是一個函數f(x) = y. 可以很好的表示 這兩個變量之間的關係。測試
因而你須要大概評估一下這個 房子大小和房價大概是一個什麼關係.spa
是線性的關係嗎? 仍是非線性的關係?.net
![](http://static.javashuo.com/static/loading.gif)
固然在這個問題裏面, 線性的關係更符合這二者的關係。因而咱們 選擇一個合適的 線性模型, 最經常使用的是 f(x) = ax+b. htm
而後用這個線性的模型 去 匹配這些數據點。blog
1.1 怎麼匹配?
有了數據點 和 你臆想出來的線性模型,怎麼進行匹配,也就是怎麼用這根線最好地描述些數據點的關係?get
須要最好地描述點, 咱們又須要一個關於「好」的定義。你也能夠想出不少關於「好」的定義。下面有兩個,
![](http://static.javashuo.com/static/loading.gif)
這兩個定義都是 將模型與數據點之間的距離差 之和作爲 衡量匹配好壞的標準。 偏差越小, 匹配程度越大。
可是 總的來講, 咱們想要找到的模型, 最後是想要使 f(x) 最大程度地 與y類似, 因此咱們想要儘可能地減小 f(x)與y之間的差值。 因此在這裏 用第二個圖的「好的定義」 來評估這根線的匹配程度是很合理的。因而咱們有了偏差公式!!!!!
![](http://static.javashuo.com/static/loading.gif)
這個公式,說的是,能夠經過調整不一樣的a 和 b的值,就能使 偏差不斷變化,而當你找到這個公式的最小值時,你就能獲得最好的a,b. 而這對(a,b)就是能最好描述你數據關係的模型參數。
1.1.1 沿導數降低法(Gradient Descent)
怎麼找 cost(a,b)的最小? cost(a,b) 的圖像其實像一個碗 同樣,有一個最低點。 找這個最低點的辦法就是,先隨便找一個點(e.g. a=3, b = 2), 而後 沿着這個碗降低的方向找,最後就能找到碗的最低點。
![](http://static.javashuo.com/static/loading.gif)
cost(a,b) 的形狀
怎麼找(某一點)碗降低的方向?? 答案是,找那一點導數的反方向。拿參數a 舉個例子, a與cost 關係以下圖,
![](http://static.javashuo.com/static/loading.gif)
只要將任意一個a, 沿着使cost 導數的反方向 慢慢移動,那麼 最終有一天a值就會到達使 cost 最小的那一點. 因而你能夠不斷地移動a,b, 向着最低點前進。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
固然在進行移動的時候也須要考慮,每次移動的速度,也就是\Alpha的值,這個值也叫作(學習率). 學習率的增大能夠加速參數逼近最優的狀況, 可是若是在快要到達函數的底端的時候,須要減少學習率,以避免出現cost 不斷增大或者不停擺動的狀況(以下圖, J(a,b)就是cost(a,b) )。 因此說,當出現以上兩種狀況時候,咱們應該果斷選取一個較小的學習率, 以保證cost能減小到一個穩定的值(咱們稱爲 收斂converge).
![](http://static.javashuo.com/static/loading.gif)
1.1.2 直接求解最小點方法
這時候,有的人會問,爲何要讓a不停地往下跑呢? 並且還須要設定學習率, 多麻煩, 直接讓找 導數爲0點(最小極值), 不就能夠了嗎? 嗯。。。也能夠...可是各有優缺,
具體方法和優劣分析可見Rachel-Zhang 的博客: http://blog.csdn.net/abcjennifer/article/details/7700772
總結一下: 迴歸問題的解決方法是:
1. 假定一個模型 2. 定義什麼叫作最好的匹配(構造偏差函數) 3. 用這個模型去匹配已有的數據點(訓練集)
須要進一步討論的問題:
- 若是參數(a,b)更多了該怎麼辦?
- 若是最合適的匹配模型並非線性的怎麼辦? --- 選用一個 非線性模型 好比 y = ax^2 + bx + c.
- 若是偏差(cost)與a,b(模型參數)的關係不是像碗同樣的, 而是凹凸不平的該怎麼辦? ------ 這時候你就得注意你獲得的cost的最低點(局部的最低)可能因初始點的不一樣而不一樣。 而這些最低點你須要進行比較,以肯定是否是全局的最低
2.分類(Logistic regression)
分類問題也是一類很常見的問題。 好比說,怎麼斷定一我的是高富帥仍是吊絲? 假如我是中央電視臺的記者,採訪了N我的, 拿到了第一手資料。資料以下
咱們想要根據一我的的口袋錢數量,來預測一我的是(富帥) 仍是 (吊絲). 咱們能不能用迴歸的方法作呢? 顯然是能夠的, 咱們只要找到一個模型,而後再進行匹配就能夠了。
可是由於分類問題的y值經常是一些離散的數字,(好比, 富帥爲1, 吊絲爲0), 因此咱們已經不能用一個簡單的線性函數來擬合這些數據了。咱們須要一個更逼真的模型。
因而咱們引入了一個更適合處理分類問題的函數--- 一個
非線性函數, 階躍函數。
這個函數的形狀更像咱們分類問題的數據分佈,因此,用他來擬合分類問題的數據將更適合!
因此咱們有了一個新的模型,
經過調整a,b 的值,可讓模型不斷改變以匹配數據點。 爲了匹配數據點,咱們又須要一個衡量匹配程度的函數,就像 迴歸問題同樣的cost 函數. 因而同理咱們能夠獲得cost
因而咱們急切地想要把它用咱們以前的gradient descent 的方法求解出使cost 最小的兩個a,b值。 可是很遺憾的是, 這個cost函數關於a,b,是非凸(non-convex)的。 就像下面那張圖那樣坑坑窪窪。。。
因此你沒有辦法經過以上兩種方法(1.1.1和1.1.2)求出這個cost函數的全局最小值。
因此你須要構造一個更好的cost函數, 在能夠衡量擬合程度的同時 又是一個關於a,b 的凸函數(像迴歸問題的cost同樣,和一個碗同樣,只有一個極小值).
這怎麼構造啊....
如今咱們又能夠用咱們熟悉的 導數方向降低法(gradient descent) 移動a, b的值,使cost 下降到最小。
最後,分類的問題就這樣被解決了。
固然,更復雜的問題可能有:
- 如今是分紅兩類,若是數據須要分紅三類或者更多該怎麼辦? ---- 假若有A,B,C三類, 把其中A類作爲1,BC作爲0,而後作Logistic regression, 獲得模型a, 同理將B類作爲1,AC做爲0,獲得模型b, 再同理獲得模型c. 最後測試的時候, 對任意一個數據點x, 咱們可以獲得x分別屬於A,B,C三類的機率值
最後比較大小,哪一個大,這個x就屬於哪一類
具體可看,
http://blog.csdn.net/abcjennifer/article/details/7716281 (七)
3.總結(兩個問題的區別)
這篇文章大概的意圖是能想讓你們瞭解, 機器學習中最基本的兩類問題,線性迴歸和分類。 能讓你們有個清晰的思想,對於這兩類問題都有如下幾個步驟,
- 如何選取一個 合理的模型(線性的,or 非線性的(e.g. 階躍函數, 高斯函數)).
- 製造一個"美好"的 偏差函數 (能夠評估擬合程度,並且仍是convex函數)
- 採起一切可能的技術(e.g. 導數降低法,解極值方程法) 求出最好的模型參數
談談迴歸和分類的區別:
總的來講兩個問題本質上都是一致的,就是模型的擬合(匹配)。 可是分類問題的y值(也稱爲label), 更離散化一些. 並且, 同一個y值可能對應着一大批的x, 這些x是具備必定範圍的。
因此分類問題更多的是 (必定區域的一些x) 對應 着 (一個y). 而回歸問題的模型更傾向於 (很小區域內的x,或者通常是一個x) 對應着 (一個y).
在把一個問題建模的時候必定要考慮好需求,讓你的模型更好的與現實問題相對應。