從 0 開(kāi)始機(jī)器學(xué)習(xí) - 邏輯回歸原理與實(shí)戰(zhàn)躲履!

之前的文章學(xué)習(xí)了線性回歸见间,這次來(lái)跟大家分享下我對(duì)邏輯回歸的一些理解。

一工猜、什么是分類問(wèn)題米诉?

這個(gè)其實(shí)很好理解,就比如你手里有一個(gè)蘋(píng)果和一個(gè)橘子篷帅,我們的分類問(wèn)題就是可以描述為如何寫(xiě)一個(gè)算法讓計(jì)算機(jī)認(rèn)出哪個(gè)是蘋(píng)果史侣,哪個(gè)是橘子。

分類問(wèn)題的輸出是不連續(xù)的離散值魏身,比如設(shè)定程序輸出 1 表示蘋(píng)果惊橱,0 表示橘子。但我們之前學(xué)習(xí)的線性回歸的輸出是連續(xù)的箭昵,如預(yù)測(cè)房?jī)r(jià)税朴,肯定不能用 0 和 1 來(lái)表示房?jī)r(jià)。

所以記住一點(diǎn):分類問(wèn)題輸出離散值家制,線性回歸問(wèn)題輸出連續(xù)值正林。

二、什么是邏輯回歸颤殴?

今天要學(xué)習(xí)的這個(gè)邏輯回歸是屬于分類問(wèn)題觅廓,你可能對(duì)「邏輯回歸」有疑惑,既然是分類問(wèn)題涵但,為何要說(shuō)成回歸問(wèn)題杈绸?干嗎不叫邏輯分類問(wèn)題?

我也覺(jué)得有點(diǎn)別扭矮瘟,可誰(shuí)讓大師比我們?cè)缟鰜?lái)呢蝇棉?如果我們?cè)琰c(diǎn)出生,發(fā)明這個(gè)算法芥永,或許就命名為邏輯分類了篡殷,哈哈。

既然改變不了埋涧,我們就只能接受了板辽,把他當(dāng)成分類問(wèn)題記住即可奇瘦。

三、邏輯回歸的假設(shè)函數(shù)

還記得之前線性回歸的假設(shè)函數(shù)嗎劲弦,就是預(yù)測(cè)的模型耳标,我們用的是多項(xiàng)式,但在分類問(wèn)題中我們就要換模型了邑跪,為啥次坡?

很簡(jiǎn)單,我們從分類問(wèn)題和線性回歸問(wèn)題的定義可以知道画畅,線性回歸問(wèn)題輸出連續(xù)值(房?jī)r(jià))砸琅,邏輯回歸只輸出離散值(0 1),所以模型的輸出不一樣轴踱,因此需要選擇一個(gè)能輸出離散值的函數(shù) g

h_\theta(x)=g(\theta^TX)

其中 X 表示特征向量症脂,\theta^T 表示待學(xué)習(xí)的參數(shù)向量。

但在機(jī)器學(xué)習(xí)分類問(wèn)題中淫僻,模型輸出 0 或者 1 的前一步通常是確定 0 或者 1 的概率诱篷,而不是直接根據(jù)實(shí)例數(shù)據(jù)就輸出 0 或 1,比如模型預(yù)測(cè)是蘋(píng)果的概率是 90%雳灵,那是橘子的概率就是 10%(因?yàn)楦怕屎蜑?1)棕所,進(jìn)而模型認(rèn)為該水果是蘋(píng)果的可能性最大,所以輸出 1 來(lái)表示當(dāng)前識(shí)別的水果是蘋(píng)果悯辙。

根據(jù)這個(gè)概率特性橙凳,我們的邏輯回歸假設(shè)函數(shù)取一個(gè)常用的邏輯函數(shù) Sigmoid Function:

g(z)=\frac{1}{1+{e^{-z}}}

import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))
image

使用這個(gè)函數(shù)來(lái)做為邏輯回歸的假設(shè)函數(shù),這樣就能根據(jù)輸入?yún)?shù) z 來(lái)輸出 y = 1 的可能性了笑撞,比如輸出 h_\theta(x) = 0.9岛啸,就表示有 90% 的概率是蘋(píng)果,有 10% 的概率是橘子茴肥。

四坚踩、邏輯回歸的分類邊界

在分類問(wèn)題中存在分類(決策)邊界(Decision Boundary)的概念,因?yàn)槲覀冏罱K是要將數(shù)據(jù)用函數(shù)分類瓤狐,體現(xiàn)在坐標(biāo)系中就是函數(shù)曲線把數(shù)據(jù)分為 2 類瞬铸,比如一類是蘋(píng)果,一類是橘子础锐。

理解分類邊界的目的就是為了理解邏輯回歸的假設(shè)函數(shù)是如何工作的嗓节。下面通過(guò)一個(gè)小例子說(shuō)明下分類邊界是如何得出的,其實(shí)也容易理解皆警。

我們假設(shè):

  • h_\theta(x) >= 0.5 時(shí)拦宣,預(yù)測(cè) y = 1,蘋(píng)果
  • h_\theta(x) < 0.5 時(shí),預(yù)測(cè) y = 0鸵隧,橘子

從 Sigmoid 函數(shù)圖像可以看出:

  • z > 0g(z)(0.5, 1.0) 之間
  • z = 0g(z) = 0.5
  • z < 0g(z)(0, 0.5) 之間

又因?yàn)?h_\theta(x) = g(z)绸罗,要注意這里 z = \theta^Tx,所以上面的假設(shè)可以替換為:

  • z = \theta^Tx > 0 時(shí)豆瘫,預(yù)測(cè) y = 1珊蟀,蘋(píng)果
  • z = \theta^Tx = 0 時(shí),分類邊界外驱!
  • z = \theta^Tx < 0 時(shí)育灸,預(yù)測(cè) y = 0,橘子

用個(gè)圖來(lái)直觀的說(shuō)明下:

image

這個(gè)圖已經(jīng)說(shuō)明的很詳細(xì)了昵宇,中間的紅線就是分類邊界 \theta^Tx = -3 + x_1 + x_2 = 0磅崭,兩邊分別是大于 0 和小于 0 的情況,在實(shí)際應(yīng)用中趟薄,經(jīng)常把 \theta^Tx >= 0 合并來(lái)表示 y = 1

這個(gè)例子的分類邊界是直線典徊,其實(shí)分類邊界也可以是非線性邊界杭煎,比如一個(gè)圓:

image

以上是兩個(gè)簡(jiǎn)單的分類邊界例子,實(shí)際使用中使用更加復(fù)雜的多項(xiàng)式可以擬合很復(fù)雜的分類邊界卒落。

五羡铲、代價(jià)函數(shù)和梯度下降

與線性回歸一樣,邏輯回歸也需要定義代價(jià)函數(shù)來(lái)求出模型的最優(yōu)參數(shù) \theta儡毕,不過(guò)代價(jià)函數(shù)不能使用模型誤差的平方和也切,因?yàn)閷⑦壿嫽貧w的假設(shè)函數(shù)帶入平方誤差的代價(jià)函數(shù)會(huì)導(dǎo)致代價(jià)函數(shù)不是凸函數(shù),進(jìn)而代價(jià)函數(shù)會(huì)產(chǎn)生許多局部最優(yōu)值腰湾,對(duì)梯度下降求最優(yōu)值會(huì)有很大影響雷恃。

由于這個(gè)缺點(diǎn),所以我們需要重新定義邏輯回歸的代價(jià)函數(shù):

J(\theta) = \frac{ 1 }{ m }\sum\limits_{i = 1}^m {Cost({h_\theta} (x^{(i)}), y^{(i)})}

Cost 函數(shù)如下:

image

這個(gè)函數(shù)直觀上不好理解费坊,可以用曲線看下:

image
  • y = 1 時(shí):當(dāng) h_\theta(x) = 1倒槐,Cost -> 0;當(dāng) h_\theta(x) ->0 時(shí) Cost -> 無(wú)窮大附井;
  • y = 0 時(shí):當(dāng) h_\theta(x) = 0讨越,Cost -> 0;當(dāng) h_\theta(x) ->1 時(shí) Cost -> 無(wú)窮大永毅;

可以用一句話來(lái)理解這個(gè)代價(jià)函數(shù):當(dāng)模型的預(yù)測(cè)與實(shí)際值差異越大把跨,代價(jià)值越大。

但是我們發(fā)現(xiàn)上面的代價(jià)函數(shù)是分開(kāi)的沼死,不方便梯度下降計(jì)算着逐,能不能整合到一起呢?還真的可以:

Cost(h_\theta( x ), y) = -y\times log(h_\theta(x)) - (1 - y)\times log(1 - h_\theta(x))

當(dāng) y = 1 時(shí)后面項(xiàng)為 0,當(dāng) y = 0 時(shí)滨嘱,前面項(xiàng)為 0峰鄙,正好對(duì)應(yīng)之前的分段表達(dá)式,再添加上標(biāo)代入代價(jià)函數(shù) J(\theta) 中:

J(\theta) = -\frac{1}{m}\sum\limits_{i = 1}^{m}{[{y^{(i)}}\log ({h_\theta}({x^{(i)}}))+( 1-{y^{(i)}})\log ( 1 - h_\theta({x^{(i)}}))]}

有了代價(jià)函數(shù)太雨,我們就可以利用之前學(xué)會(huì)的梯度下降法來(lái)迭代求代價(jià)函數(shù)最小值啦吟榴!

六、邏輯回歸實(shí)戰(zhàn)

最后我們來(lái)用前面學(xué)習(xí)的邏輯回歸技術(shù)來(lái)對(duì) 2 類數(shù)據(jù)進(jìn)行分類囊扳!

6.1 數(shù)據(jù)準(zhǔn)備

要分類的數(shù)據(jù)可視化如下吩翻,一共只有 2 個(gè)類別,所以只需要使用直線決策邊界即可:

image

6.2 假設(shè)函數(shù)

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

6.3 代價(jià)函數(shù)

這里仍然使用向量化代碼表示:

# 邏輯回歸代價(jià)函數(shù)
def cost_function(theta, X, y):
    # 向量化代碼
    return np.mean(-y * np.log(sigmoid(X @ theta)) - (1 - y) * np.log(1 - sigmoid(X @ theta)))

6.4 梯度下降

梯度下降的原理在之前的這篇文章有介紹:

# 梯度計(jì)算
# return 梯度的一維數(shù)組
def gradient(theta, X, y):
    return (1 / len(X)) * X.T @ (sigmoid(X @ theta) - y)

6.5 訓(xùn)練參數(shù)

這里利用已有的優(yōu)化手段來(lái)優(yōu)化代價(jià)函數(shù)(損失函數(shù)):

import scipy.optimize as opt

# 用 opt.minimize 來(lái)訓(xùn)練邏輯回歸的參數(shù)
# Newton-CG 是牛頓法家族的一種锥咸,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來(lái)迭代優(yōu)化損失函數(shù)
res = opt.minimize(fun = cost_function, x0 = theta, args = (X, y), method = 'Newton-CG', jac = gradient)

6.6 在訓(xùn)練集上預(yù)測(cè)

# 計(jì)算 y 在訓(xùn)練集上的預(yù)測(cè)值
y_predict = predict(X, final_theta)

# 打印分類報(bào)告
print(classification_report(y, y_predict))

報(bào)告中的 f1-score 分?jǐn)?shù)分別為 0.86 和 0.91狭瞎,說(shuō)明分類結(jié)果還是很不錯(cuò)的:

image

6.7 輸出分類邊界

我們用繪圖庫(kù)來(lái)繪制出預(yù)測(cè)的分類邊界,可以發(fā)現(xiàn)分類邊界能夠比較好分開(kāi)兩個(gè)類別的數(shù)據(jù):

image

OK!今天登龍跟大家分享了邏輯回歸的原理和實(shí)戰(zhàn)編程,大家多多實(shí)踐院水,早日學(xué)會(huì)乞榨!文中完整注釋代碼在我的倉(cāng)庫(kù)中:

https://github.com/DLonng/AI-Notes/tree/master/MachineLearning

大家下期見(jiàn) :)

本文原創(chuàng)首發(fā)于 同名微信公號(hào)「登龍」,微信搜索關(guān)注回復(fù)「1024」你懂的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锌妻,更是在濱河造成了極大的恐慌,老刑警劉巖旬牲,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿粹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡原茅,警方通過(guò)查閱死者的電腦和手機(jī)吭历,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擂橘,“玉大人毒涧,你說(shuō)我怎么就攤上這事”词遥” “怎么了契讲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滑频。 經(jīng)常有香客問(wèn)我捡偏,道長(zhǎng),這世上最難降的妖魔是什么峡迷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任银伟,我火速辦了婚禮你虹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彤避。我一直安慰自己傅物,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布琉预。 她就那樣靜靜地躺著董饰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圆米。 梳的紋絲不亂的頭發(fā)上卒暂,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音娄帖,去河邊找鬼也祠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛近速,可吹牛的內(nèi)容都是我干的诈嘿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼削葱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奖亚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起佩耳,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤遂蛀,失蹤者是張志新(化名)和其女友劉穎谭跨,沒(méi)想到半個(gè)月后干厚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螃宙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蛮瞄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆扎。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挂捅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堂湖,到底是詐尸還是另有隱情闲先,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布无蜂,位于F島的核電站伺糠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斥季。R本人自食惡果不足惜训桶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一累驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舵揭,春花似錦谤专、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至箱叁,卻和暖如春墅垮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耕漱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工算色, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人螟够。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓灾梦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妓笙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子若河,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容