機器學習可以解決很多問題,其中最爲重要的兩個是 迴歸與分類。 這兩個問題怎麼解決, 它們之間又有什麼區別呢? 以下舉幾個簡單的例子,以給大家一個概念
1. 線性迴歸
迴歸分析常用於分析兩個變量X和Y 之間的關係。 比如 X=房子大小 和 Y=房價 之間的關係, X=(公園人流量,公園門票票價) 與 Y=(公園收入) 之間的關係等等。
那麼你的數據點在圖上可以這麼看
現在你想找到 房子大小和房價的關係, 也就是一個函數f(x) = y. 能夠很好的表示 這兩個變量之間的關係。
於是你需要大概評估一下這個 房子大小和房價大概是一個什麼關係.
是線性的關係嗎? 還是非線性的關係?
當然在這個問題裏面, 線性的關係更符合這兩者的關係。於是我們 選擇一個合適的 線性模型, 最常用的是 f(x) = ax+b.
然後用這個線性的模型 去 匹配這些數據點。
1.1 怎麼匹配?
有了數據點 和 你臆想出來的線性模型,怎麼進行匹配,也就是怎麼用這根線最好地描述些數據點的關係?
需要最好地描述點, 我們又需要一個關於“好”的定義。你也可以想出很多關於“好”的定義。下面有兩個,
這兩個定義都是 將模型與數據點之間的距離差 之和做爲 衡量匹配好壞的標準。 誤差越小, 匹配程度越大。
但是 總的來說, 我們想要找到的模型, 最後是想要使 f(x) 最大程度地 與y相似, 所以我們想要儘量地減少 f(x)與y之間的差值。 所以在這裏 用第二個圖的“好的定義” 來評估這根線的匹配程度是很合理的。於是我們有了誤差公式!!!!!
這個公式,說的是,可以通過調整不同的a 和 b的值,就能使 誤差不斷變化,而當你找到這個公式的最小值時,你就能得到最好的a,b. 而這對(a,b)就是能最好描述你數據關係的模型參數。
1.1.1 沿導數下降法(Gradient Descent)
怎麼找 cost(a,b)的最小? cost(a,b) 的圖像其實像一個碗 一樣,有一個最低點。 找這個最低點的辦法就是,先隨便找一個點(e.g. a=3, b = 2), 然後 沿着這個碗下降的方向找,最後就能找到碗的最低點。
cost(a,b) 的形狀
怎麼找(某一點)碗下降的方向?? 答案是,找那一點導數的反方向。拿參數a 舉個例子, a與cost 關係如下圖,
只要將任意一個a, 沿着使cost 導數的反方向 慢慢移動,那麼 最終有一天a值就會到達使 cost 最小的那一點. 於是你可以不斷地移動a,b, 向着最低點前進。
當然在進行移動的時候也需要考慮,每次移動的速度,也就是\Alpha的值,這個值也叫做(學習率). 學習率的增大可以加速參數逼近最優的情況, 但是如果在快要到達函數的底端的時候,需要減小學習率,以免出現cost 不斷增大或者不停擺動的情況(如下圖, J(a,b)就是cost(a,b) )。 所以說,當出現以上兩種情況時候,我們應該果斷選取一個較小的學習率, 以保證cost能減少到一個穩定的值(我們稱爲 收斂converge).
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)
- 現在是分成兩類,如果數據需要分成三類或者更多該怎麼辦? ---- 假如有A,B,C三類, 把其中A類做爲1,BC做爲0,然後做Logistic regression, 得到模型a, 同理將B類做爲1,AC作爲0,得到模型b, 再同理得到模型c. 最後測試的時候, 對任意一個數據點x, 我們能夠得到x分別屬於A,B,C三類的概率值
3.總結(兩個問題的區別)
- 如何選取一個 合理的模型(線性的,or 非線性的(e.g. 階躍函數, 高斯函數)).
- 製造一個"美好"的 誤差函數 (可以評估擬合程度,而且還是convex函數)
- 採取一切可能的技術(e.g. 導數下降法,解極值方程法) 求出最好的模型參數