邏輯回歸的理解與python示例

邏輯回歸(2018-11-4)

注:根據(jù)唐宇迪老師視頻總結(jié),如有侵權(quán),請聯(lián)系本人

一炼鞠、邏輯回歸相關(guān)概念

1.1邏輯回歸解決的問題

之前一章分析了線性回歸的解決方法,是通過誤差的高斯分布來推演出的損失函數(shù),但是存在數(shù)據(jù)樣本是否符合分布的問題,在邏輯回歸中.使用了sigmoid函數(shù)將線性問題轉(zhuǎn)化為非線性的二分類任務(wù),這樣的好處是不用考慮誤差分布,直接通過變換進(jìn)行概率求解.

1.2 sigmoid函數(shù)

表達(dá)式:
g(z)=\frac{1}{1+e^{-z}} \tag{0}

特點(diǎn):

  • 自變量取值為任意實(shí)數(shù),值域[0,1].
  • 將任意的輸入映射到[0,1]的區(qū)間,物理上可以解釋為由值到概率的轉(zhuǎn)換.
sigmiod函數(shù)

邏輯回歸實(shí)現(xiàn)思想:

  • 定義預(yù)測函數(shù)(將線性函數(shù)代入sigmiod函數(shù)):
    h_{\theta}(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} \tag{1}
    其中 \theta_{0}+\theta_{1}x_{1}+,...,\theta_{n}x_{n}=\sum^{n}_{i=1}\theta_{i}x_{i}=\theta^Tx.這里面的\theta_{i}x_{i}就是線性回歸問題中的要求得函數(shù).
    預(yù)測函數(shù)可以看做將函數(shù)y=\theta_{i}x_{i}轉(zhuǎn)換到[0,1]區(qū)間上,以概率分布的模式表達(dá)結(jié)果.
    所以在分類任務(wù)中,可以假設(shè)以下公式成立:

P(y=1|x;\theta)=h_{\theta}(x) \tag{2}
P(y=0|x;\theta)=1-h_{\theta}(x) \tag{3}

將(2),(3)式合并后得到:
P(y|x;\theta)=h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y} \tag{4}

1.3求解過程示例

根據(jù)(4)式求得似然函數(shù)L(\theta):
L(\theta)=\prod^{m}_{i=1}P(y_{i}|x_{i};\theta)=\prod^{m}_{i=1}h_{\theta}(x_{i})^{y_{i}}(1-h_{\theta}(x_{i}))^{1-y_{i}} \tag{5}

再對(5)式求對數(shù)似然,目的是將復(fù)雜度較高的乘法替換為簡單的加法:
l(\theta)=logL(\theta)=\sum^{m}_{i=1}(y_{i}logh_{\theta}(x_{i})+(1-y _{i})log(1-h_{\theta}(x_{i}))) \tag{6}

  • 由于梯度是上升的,若求l(\theta)為最大值,則可以引入J(\theta)=-\frac{1}{m}l(\theta)轉(zhuǎn)為求梯度下降的任務(wù).自此,就可以通過梯度下降的方法獲得近似解了.

求解過程:
l(\theta)=logL(\theta)=\sum^{m}_{i=1}(y_{i}logh_{\theta}(x_{i})+(1-y _{i}log(1-h_{\theta}(x_{i})))

J(\theta)中對\theta_{j}求偏導(dǎo):
\fracxljrpxz{d\theta_{j}}J(\theta)=-\frac{1}{m}\sum^{m}_{i=1}(y_{i}\frac{1}{h_{\theta}(x_{i})}\fracffvljxl{d\theta_{j}}h_{\theta}(x_{i})-(1-y_{i})\frac{1}{1-h_{\theta}(x_{i})}\frac1dt1hzz{d\theta_{j}}h_{\theta}(x_{i}))\\=-\frac{1}{m}\sum^{m}_{i=1}\lgroup y_{i}\frac{1}{g(\theta^Tx_{i})} -(1-y_{i})\frac{1}{1-g(\theta^Tx_{i})}\rgroup\fracv31ffn3{d\theta_{j}}g(\theta^Tx_{i})\tag{7}

下面詳細(xì)對\fracthhnv3h{d\theta_{j}}g(\theta^Tx)的求導(dǎo)過程做解釋:

  • 對于分?jǐn)?shù)類導(dǎo)數(shù),求導(dǎo)公式為:
    (\frac{u}{v})'=\frac{u'v-v'u}{v^2} \tag{9}
  • 由于
    (e^x)'=e^x\tag{9}
    \frac{dy}{dx}= \frac{dy}{du}\cdot\frac{du}{dx}\tag{10}
    所以對g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}求導(dǎo)的過程如下:
    (g(\theta^Tx))'=(\frac{1}{1+e^{-\theta^Tx}})'=\frac{1'\times(1+e^{-\theta^Tx})-(1+e^{-\theta^Tx})'\times1}{(1+e^{-\theta^Tx})^2}\\=\frac{0-(1+e^{-\theta^Tx})'}{(1+e^{-\theta^Tx})^2}=\frac{-1'-(e^{-\theta^Tx})'}{(1+e^{-\theta^Tx})^2}=\frac{-(e^{-\theta^Tx})(-\theta^Tx)'}{(1+e^{-\theta^Tx})^2}\\=(\frac{-(e^{-\theta^Tx})}{(1+e^{-\theta^Tx})^2})(-\theta^Tx)'\\=(\frac{(e^{-\theta^Tx})}{(1+e^{-\theta^Tx})^2})(\theta^Tx)' \tag{11}
    然而
    \frac{(e^{-\theta^Tx})}{(1+e^{-\theta^Tx})^2}=\frac{1+(e^{-\theta^Tx})-1}{(1+e^{-\theta^Tx})^2}=-g(\theta^Tx)^2+g(\theta^Tx)=g(\theta^Tx)(1-g(\theta^Tx)) \tag{12}

所以,結(jié)合(7),(11),(12)式,得出下式結(jié)論:

-\frac{1}{m}\sum^{m}_{i=1}\lgroup y_{i}\frac{1}{g(\theta^Tx_{i})} -(1-y_{i})\frac{1}{1-g(\theta^Tx_{i})}\rgroup\fraczzzndn7{d\theta_{j}}g(\theta^Tx_{i})\\=-\frac{1}{m}\sum^{m}_{i=1}\lgroup y_{i}\frac{1}{g(\theta^Tx_{i})} -(1-y_{i})\frac{1}{1-g(\theta^Tx_{i})}\rgroup(\frac{(e^{-\theta^Tx_{i}})}{(1+e^{-\theta^Tx_{i}})^2})(\theta^Tx_{i})'\\=-\frac{1}{m}\sum^{m}_{i=1}\lgroup y_{i}\frac{1}{g(\theta^Tx_{i})} -(1-y_{i})\frac{1}{1-g(\theta^Tx_{i})}\rgroup g(\theta^Tx_{i})(1-g(\theta^Tx_{i}))(\theta^Tx_{i})'\\=-\frac{1}{m}\sum^{m}_{i=1}(y_{i}(1-g(\theta^Tx_{i}))-(1-y_{i})g(\theta^Tx_{i}))x_{i}^{j}\\=-\frac{1}{m}\sum^{m}_{i=1}(y_{i}-g(\theta^Tx_{i}))x_{i}^{j}\\=\frac{1}{m}\sum^{m}_{i=1}(h_{\theta}(x_{i})-y_{i})x_{i}^{j}\tag{13}
其中,x_{i}^{j}=\fractz13lnf{d\theta_{j}}(\theta^Tx_{i})

公式化簡后,就可以使用梯度下降的方法對參數(shù)進(jìn)行迭代更新,最終獲得一個(gè)最優(yōu)的\theta
\theta_{j+1}=\theta-\alpha\frac{1}{m}\sum^{m}_{i=1}(h_{\theta}(x_{i})-y_{i})x_{i}^{j} \tag{14}
其中 \alpha是步長,(13)式的結(jié)論是梯度下降的方向,最后求解\theta的最優(yōu)解.

1.4python實(shí)例

數(shù)據(jù):考試成績,每組兩門課,如果被錄取則標(biāo)記為1,未錄取則為0.
目的:根據(jù)已有數(shù)據(jù)評估新數(shù)據(jù)是否會(huì)被錄取.
思想:在已有數(shù)據(jù)上進(jìn)行邏輯回歸訓(xùn)練,獲得理想的\theta值.

數(shù)據(jù):

成績1 成績2 是否錄取
34.623660 78.024693 0
30.286711 43.894998 0
35.847409 72.902198 0
60.182599 86.308552 1
79.032736 75.344376 1

簡單起見,只取了代碼中的五組數(shù)據(jù),僅做示范.

step 1 構(gòu)造sigmoid函數(shù)(根據(jù)(0)式)

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

step 2 構(gòu)造預(yù)測函數(shù)(根據(jù)(1)式)

def model(X, theta):

    return sigmoid(np.dot(X, theta.T))

step 3 構(gòu)造損失函數(shù)(根據(jù)(1)式)

def cost(X, y, theta):
    left = np.multiply(-y, np.log(model(X, theta)))
    #print(left.shape)
    right = np.multiply(1 - y, np.log(1 - model(X, theta)))
    #print(right.shape)
    return np.sum(left - right) / (len(X))

step 4 求出\theta的梯度方向(根據(jù)(13)式)

def gradient(X, y, theta):
    grad = np.zeros(theta.shape)
    error = (model(X, theta)- y).ravel()
   
    for j in range(len(theta.ravel())): 
        term = np.multiply(error, X[:,j])
        grad[0, j] = np.sum(term) / len(X)
    
    return grad

step 5 運(yùn)用梯度下降方法求得最優(yōu)解(根據(jù)(14式))

def descent(data, theta,y,thresh,alpha):
    #梯度下降求解
    i = 0 # 迭代次數(shù)
    costs = [cost(data, y, theta)] # 損失值

    while True:
        grad = gradient(data, y, theta)
        theta = theta - alpha*grad # 參數(shù)更新
        costs.append(cost(data, y, theta)) # 計(jì)算新的損失
        i += 1 
        if i>thresh: break  
    return theta, i-1, costs, grad

step6 代入數(shù)據(jù),進(jìn)行運(yùn)算

data=np.array([[1,34.623660,78.024693],[1,30.286711,43.894998],[1,35.847409,72.902198],
[1,60.182599,86.308552],[1,79.032736,75.344376]])
y=np.array([0,0,0,1,1]).reshape(-1,1)
theta=np.array([[0.5,0.5,0]])
theta, iter, costs, grad= descent(data, theta,y, 100, 0.00001)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呢蔫,一起剝皮案震驚了整個(gè)濱河市伊诵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呆奕,老刑警劉巖梢杭,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異栏账,居然都是意外死亡帖族,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門挡爵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竖般,“玉大人,你說我怎么就攤上這事茶鹃』恋瘢” “怎么了艰亮?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挣郭。 經(jīng)常有香客問我迄埃,道長,這世上最難降的妖魔是什么兑障? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任侄非,我火速辦了婚禮,結(jié)果婚禮上旺垒,老公的妹妹穿的比我還像新娘彩库。我一直安慰自己,他們只是感情好先蒋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布骇钦。 她就那樣靜靜地躺著,像睡著了一般竞漾。 火紅的嫁衣襯著肌膚如雪眯搭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天业岁,我揣著相機(jī)與錄音鳞仙,去河邊找鬼。 笑死笔时,一個(gè)胖子當(dāng)著我的面吹牛棍好,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允耿,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼借笙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了较锡?” 一聲冷哼從身側(cè)響起业稼,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚂蕴,沒想到半個(gè)月后低散,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骡楼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年熔号,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸟整。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跨嘉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祠乃,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布兑燥,位于F島的核電站亮瓷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏降瞳。R本人自食惡果不足惜嘱支,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挣饥。 院中可真熱鬧除师,春花似錦、人聲如沸扔枫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽短荐。三九已至倚舀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忍宋,已是汗流浹背痕貌。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糠排,地道東北人舵稠。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像入宦,于是被迫代替她去往敵國和親哺徊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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