1. 程式人生 > >機器學習中【迴歸演算法】詳解

機器學習中【迴歸演算法】詳解

關注微信公眾號【Microstrong】,我寫過四年Android程式碼,瞭解前端、熟悉後臺,現在研究方向是機器學習、深度學習!一起來學習,一起來進步,一起來交流吧!


迴歸問題:主要用於預測數值型資料,典型的迴歸例子:資料擬合曲線。

一、線性迴歸

(1)線性迴歸的定義:

線性迴歸需要一個線性模型,屬於監督學習,因此方法和監督學習應該是一樣的,先給定一個訓練集,根據這個訓練集學習出一個線性函式,然後測試這個函式是否足夠擬合訓練集資料,然後挑選出最好的線性函式。

需要注意兩點:

A.因為是線性迴歸,所以學習到的函式為線性函式,即直線函式;

B.因為是單變數,因此只有一個x;(這裡我們只討論單變數線性迴歸)

(2)單變數線性迴歸模型

我們能夠給出單變數線性迴歸模型:


這裡,X為特徵,h(x)hypothesis

舉個例子:

我們想要根據房子的大小,預測房子的價格,給定如下資料集:


我們根據以上的資料集畫在圖上,如下圖所示:


我們需要根據這些點擬合出一條直線,使得costFunction最小。擬合出的直線大概如下圖所示:

從上面的過程中,我們肯定有一個疑問,怎麼樣能夠看出線性函式擬合的好不好呢?

答案是我們需要使用到Cost Function(代價函式),代價函式越小,說明我們線性迴歸的越好,和訓練資料擬合的越好。(有關代價函式還請讀者自行學習)

二、邏輯迴歸(Logistic Regression)

邏輯迴歸雖然名字中有“迴歸”,但實際卻是一種分類學習方法,它將資料擬合到一個

logit函式或者是logistic函式中,從而能夠完成對事件發生的概率進行預測。

(1)邏輯迴歸出現的背景:

線性迴歸能對連續值結果進行預測,而現實生活中常見的另一類問題是分類問題。最簡單的情況是:是與否的二分類問題。比如說:醫生需要需要判斷病人是否患癌症,銀行要判斷一個人的信用程度是否達到可以給他發信用卡的程度,郵件收件箱要自動對郵件分類為正常郵件和垃圾郵件等等。

當然,我們最直接的想法是,既然能夠用線性迴歸預測出連續值的結果,那根據結果設定一個閾值應該可以結果分類問題。事實上,對於很標準的情況,確定是可以的,這裡我們套用Andrew Ng老師的課件中的例子,下圖中X為資料點腫瘤的大小,Y為觀測結果是否是惡性腫瘤。通過構建線性迴歸模型,如

所示,構建線性迴歸模型後,我們設定一個閾值0.5,預測>=0.5的這些點為惡性腫瘤,而<0.5為良性腫瘤。下圖是我們構建的一個線性迴歸模型,可以很好的把惡性腫瘤和良性腫瘤分隔開。

但是在很多實際的情況下,我們需要學習的分類資料並沒有這麼準確,比如說上面這個腫瘤的例子,如果突然有一個噪點資料出現,如下圖所示:


那我們的線性邏輯迴歸模型,就不那麼適用了並且你設定的閾值0.5也就失效了,如下圖所示。而在現實生活分類問題的資料中,會比例子中的這個更為複雜,這個時候我們藉助線性迴歸和閾值的方式,已經很難完成一個表現良好的分類器了。


在這樣的場景下,邏輯迴歸就誕生了。它的核心思想是,如果線性迴歸的結果輸出是一個連續值,而值的範圍是無法限定的,那麼我們有沒有辦法把這個結果對映為可以幫助我們判斷的結果呢。而如果輸出的結果是(0,1)的一個概率值,那麼這個問題就能很清楚的解決了。

(2)邏輯迴歸基本的知識點:

Logistic迴歸雖然名字裡帶迴歸,但是它實際上是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別代表兩個類別),所以利用了Logistic函式(或稱為Sigmoid函式),函式形式為:


我們來畫出sigmoid函式影象,如下圖所示:


從函式圖上可以看出,函式y=g(z)z=0的時候取值為1/2,而隨著z逐漸變小,函式值趨於0z逐漸變大的同時函式值逐漸趨於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分類問題,則是先得到Nw值不同的 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上吳恩達《機器學習》第三週課程