機器學習中【迴歸演算法】詳解
關注微信公眾號【Microstrong】,我寫過四年Android程式碼,瞭解前端、熟悉後臺,現在研究方向是機器學習、深度學習!一起來學習,一起來進步,一起來交流吧!
迴歸問題:主要用於預測數值型資料,典型的迴歸例子:資料擬合曲線。
一、線性迴歸
(1)線性迴歸的定義:
線性迴歸需要一個線性模型,屬於監督學習,因此方法和監督學習應該是一樣的,先給定一個訓練集,根據這個訓練集學習出一個線性函式,然後測試這個函式是否足夠擬合訓練集資料,然後挑選出最好的線性函式。
需要注意兩點:
A.因為是線性迴歸,所以學習到的函式為線性函式,即直線函式;
B.因為是單變數,因此只有一個x;(這裡我們只討論單變數線性迴歸)
(2)單變數線性迴歸模型
我們能夠給出單變數線性迴歸模型:
這裡,X為特徵,h(x)為hypothesis。
舉個例子:
我們想要根據房子的大小,預測房子的價格,給定如下資料集:
我們根據以上的資料集畫在圖上,如下圖所示:
我們需要根據這些點擬合出一條直線,使得costFunction最小。擬合出的直線大概如下圖所示:
從上面的過程中,我們肯定有一個疑問,怎麼樣能夠看出線性函式擬合的好不好呢?
答案是我們需要使用到Cost Function(代價函式),代價函式越小,說明我們線性迴歸的越好,和訓練資料擬合的越好。(有關代價函式還請讀者自行學習)
二、邏輯迴歸(Logistic Regression)
邏輯迴歸雖然名字中有“迴歸”,但實際卻是一種分類學習方法,它將資料擬合到一個
(1)邏輯迴歸出現的背景:
線性迴歸能對連續值結果進行預測,而現實生活中常見的另一類問題是分類問題。最簡單的情況是:是與否的二分類問題。比如說:醫生需要需要判斷病人是否患癌症,銀行要判斷一個人的信用程度是否達到可以給他發信用卡的程度,郵件收件箱要自動對郵件分類為正常郵件和垃圾郵件等等。
當然,我們最直接的想法是,既然能夠用線性迴歸預測出連續值的結果,那根據結果設定一個閾值應該可以結果分類問題。事實上,對於很標準的情況,確定是可以的,這裡我們套用Andrew Ng老師的課件中的例子,下圖中X為資料點腫瘤的大小,Y為觀測結果是否是惡性腫瘤。通過構建線性迴歸模型,如
但是在很多實際的情況下,我們需要學習的分類資料並沒有這麼準確,比如說上面這個腫瘤的例子,如果突然有一個噪點資料出現,如下圖所示:
那我們的線性邏輯迴歸模型,就不那麼適用了並且你設定的閾值0.5也就失效了,如下圖所示。而在現實生活分類問題的資料中,會比例子中的這個更為複雜,這個時候我們藉助線性迴歸和閾值的方式,已經很難完成一個表現良好的分類器了。
在這樣的場景下,邏輯迴歸就誕生了。它的核心思想是,如果線性迴歸的結果輸出是一個連續值,而值的範圍是無法限定的,那麼我們有沒有辦法把這個結果對映為可以幫助我們判斷的結果呢。而如果輸出的結果是(0,1)的一個概率值,那麼這個問題就能很清楚的解決了。
(2)邏輯迴歸基本的知識點:
Logistic迴歸雖然名字裡帶“迴歸”,但是它實際上是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別代表兩個類別),所以利用了Logistic函式(或稱為Sigmoid函式),函式形式為:
我們來畫出sigmoid函式影象,如下圖所示:
從函式圖上可以看出,函式y=g(z)在z=0的時候取值為1/2,而隨著z逐漸變小,函式值趨於0,z逐漸變大的同時函式值逐漸趨於1,而這正是一個概率的範圍。所以我們定義線性迴歸的預測函式為Y=WTX,那麼邏輯迴歸的輸出Y= g(WTX),其中y=g(z)函式正是上述sigmoid函式(或者簡單叫做S形函式)。這就是邏輯迴歸中的預測輸出函式。
有了預測輸出函式,我們考慮一下,為什麼邏輯迴歸就能做到分類問題?其實是邏輯迴歸根據我們的樣本點獲得這些資料的判定邊界。那什麼是判定邊界呢?你可以簡單理解為是用以對不同類別的資料分割的邊界,邊界的兩旁應該是不同類別的資料。我們在二維直角座標系中,來看看具體的判定邊界是什麼樣子:
可能是這個樣子:
還可能是這個樣子:
或者是這個樣子:
我們來思考一個問題:邏輯迴歸是如何根據樣本點獲得這些判定邊界呢?
根據sigmoid函式,我們發現:
當g(z)≥0.5時, z≥0;對於=g(θTX)≥0.5, 則θTX≥0, 此時意味著預估y=1;
反之,當預測y = 0時,θTX<0;所以我們認為θTX=0是一個決策邊界,當它大於0或小於0時,邏輯迴歸模型分別預測不同的分類結果。
先看第一個例子
,其中θ0 ,θ1 ,θ2分別取-3, 1, 1。則當−3+X1+X2≥0時, y = 1; 則X1+X2=3是一個決策邊界,圖形表示如下,剛好把圖上的兩類點區分開來:
上邊的例子是一個線性的決策邊界,當hθ(x)更復雜的時候,我們可以得到非線性的決策邊界,例如:
這時當x12+x22≥1時,我們判定y=1,這時的決策邊界是一個圓形,如下圖所示:
所以我們發現,理論上說,只要我們的設計足夠合理,準確的說是g(θTX)中θTX足夠複雜,我們能在不同的情形下,擬合出不同的判定邊界,從而把不同的樣本點分隔開來。
判定邊界詳細介紹和專案實踐例子:
線性判定Python實踐例子 地址:http://blog.csdn.net/program_developer/article/details/79163466
非線性判定邊界Python實踐例子 地址:http://blog.csdn.net/program_developer/article/details/79190616
(3)邏輯迴歸的代價函式
對於線性邊界的情況,邊界形式如下:
構造預測函式為:
函式的值有特殊的含義,它表示結果取1的概率,因此對於輸入x分類結果為類別1和類別0的概率分別為:
下面我們根據(1)式,推匯出我們的代價函式:
(1)式綜合起來可以寫成:
然後取似然函式為:
因為和在同一θ處取得極值,因此我們接著取對數似然函式為:
(交叉熵代價函式(cross-entropy))
最大似然估計就是求使取最大值時的θ,其實這裡可以使用梯度上升法求解,求得的θ就是要求的最佳引數。但是,在Andrew Ng的課程中將取為下式,即:
因為乘了一個負的係數-1/m,所以取最小值時的θ為要求的最佳引數。
我們在來看看,梯度下降法求的最小值θ更新過程:
最終θ更新過程可以寫成:
三、總結
至此,我們把機器學習中的迴歸演算法知識點進行了一個總結。我們再來總結一下線性迴歸和邏輯迴歸的區別和聯絡:
(1)Linear Regression:輸出一個標量 wx+b,這個值是連續值,所以可以用來處理迴歸問題。
(2)Logistic Regression:把上面的 wx+b 通過 sigmoid函式對映到(0,1)上,並劃分一個閾值,大於閾值的分為一類,小於等於分為另一類,可以用來處理二分類問題。
(3)更進一步:對於N分類問題,則是先得到N組w值不同的 wx+b,然後歸一化,比如用 softmax函式,最後變成N個類上的概率,可以處理多分類問題。
Reference:
http://blog.csdn.net/han_xiaoyang/article/details/49123419
http://blog.csdn.net/pakko/article/details/37878837
分類與迴歸區別是什麼? -穆文的回答 - 知乎
https://www.zhihu.com/question/21329754/answer/151216012
coursera上吳恩達《機器學習》第三週課程