Logistic回歸(Logistic Regression)算法筆記(二)-scikit learn

本節(jié)不僅介紹了Logistic回歸在sklearn中模型應(yīng)用,還介紹了liblinear届搁、牛頓法、擬牛頓法(DFP算法、BFGS算法咖祭、L-BFGS算法)、梯度下降蔫骂、隨機(jī)梯度下降等么翰,正文如下,歡迎圍觀喔~~(我的字跡請大家別吐槽了辽旋,已放棄治療浩嫌,捂臉~`~)


上一篇主要是學(xué)習(xí)了Logistic回歸(Logistic Regression)算法筆記(一)-Python,用基礎(chǔ)Python實(shí)現(xiàn)了Logistic回歸算法补胚。本文將利用scikit-learn中的相關(guān)模塊學(xué)習(xí)Logistic回歸算法的實(shí)現(xiàn)

在scikit-learn中码耐,主要是基于LogisticRegression模型來解決Logistic回歸算法,其中溶其,有兩種不同的代價函數(shù)(cost function):

L1:

圖1 Logistic回歸代價函數(shù)-L1

L2:

圖2 Logistic回歸代價函數(shù)-L2

對于L1骚腥、L2兩式子的解釋:每個式子中前面那項(xiàng)是正則化項(xiàng)(Regularizer)(包含w的范數(shù)),后面那項(xiàng)是損失函數(shù)(loss function)瓶逃,參數(shù)C控制了兩者在最終的損失函數(shù)中所占的比重束铭。求解w參數(shù)的方法根據(jù)L1/L2代價函數(shù)的不同,也存在不同的求解擬合參數(shù)的方法:

1)‘liblinear’->liblinear是一個針對線性分類場景而設(shè)計的工具包厢绝,支持線性的SVM和Logistic回歸等契沫,但是無法通過定義核函數(shù)的方式實(shí)現(xiàn)非線性分類。

備注:libSVM是一套完整的SVM模型實(shí)現(xiàn)昔汉。用戶可以在libSVM中使用核函數(shù)來訓(xùn)練非線性的分類器懈万,當(dāng)然也能使用更基礎(chǔ)的線性SVM。由于支持核函數(shù)的擴(kuò)展靶病,libSVM理論上具有比liblinear更強(qiáng)的分類能力会通,能夠處理更為復(fù)雜的問題。但是針對線性分類嫡秕,liblinear無論是在訓(xùn)練上還是在預(yù)測上渴语,都比libSVM高效得多。此外昆咽,受限于算法驾凶,libSVM往往在樣本量過萬之后速度就比較慢了,如果樣本量再上升一個數(shù)量級掷酗,那么通常的機(jī)器已經(jīng)無法處理了调违。但使用liblinear,則完全不需要有這方面的擔(dān)憂泻轰,即便百萬千萬級別的數(shù)據(jù)技肩,liblinear也可以輕松搞定,因?yàn)閘iblinear本身就是為了解決較大規(guī)模樣本的模型訓(xùn)練而設(shè)計的。關(guān)于libSVM和liblinear兩者差異虚婿,不妨看看LIBSVM與LIBLINEAR

接下來的一些求解擬合參數(shù)的方法需要先了解牛頓法以及相關(guān)的知識等旋奢,先來簡單介紹一下

牛頓法(Newton's method)又稱為牛頓-拉弗森方法(Newton-Raphson method),它是一種在實(shí)數(shù)域和復(fù)數(shù)域上近似求解方程的方法然痊。該方法使用函數(shù)f(x)的泰勒級數(shù)的前幾項(xiàng)來尋找方程f(x)=0的根至朗。

圖1 wiki上對于牛頓法的方法簡介
圖2 wiki上顯示牛頓法迭代求解的動圖

在最優(yōu)化的問題中,線性最優(yōu)化至少可以使用單純行法求解剧浸,但對于非線性優(yōu)化問題锹引,牛頓法提供了一種求解的辦法。假設(shè)任務(wù)是優(yōu)化一個目標(biāo)函數(shù)f唆香,求函數(shù)f的極大極小問題嫌变,可以轉(zhuǎn)化為求解函數(shù)f的導(dǎo)數(shù)f'=0的問題,這樣求可以把優(yōu)化問題看成方程求解問題(f'=0)躬它。剩下的問題就和第一部分提到的牛頓法求解很相似了腾啥。如果是高維情況,那么牛頓法的迭代公式見圖3:

圖3 高維牛頓法迭代公式

圖3中的H表示Hessian矩陣冯吓,見圖4

圖4 Hessian矩陣
圖5 牛頓法公式(基于Convex-optimization)

在上面牛頓法公式的得出過程中碑宴,其實(shí)用到了凸優(yōu)化的知識,關(guān)于凸優(yōu)化的知識桑谍,如果時充裕延柠,建議看(Convex-optimization)凸優(yōu)化-英文版,這個電子版是免費(fèi)下載的锣披,贊贞间!

雖然牛頓法比一般的梯度下降法收斂速度快,但是在高維情況下雹仿,計算目標(biāo)函數(shù)的二階偏導(dǎo)數(shù)的復(fù)雜度很大增热,而且有時候目標(biāo)函數(shù)的海森矩陣無法保持正定,不存在逆矩陣胧辽,此時牛頓法將不再能使用峻仇。因此,人們提出了擬牛頓法邑商。這個方法的基本思想是:不用二階偏導(dǎo)數(shù)而構(gòu)造出可以近似Hessian矩陣(或Hessian矩陣的逆矩陣)的正定對稱矩陣摄咆,進(jìn)而再逐步優(yōu)化目標(biāo)函數(shù)。不同的構(gòu)造方法就產(chǎn)生了不同的擬牛頓法(Quasi-Newton Methods)人断。

介紹一下擬牛頓條件:

圖6 擬牛頓條件

看到了吧吭从,此時已經(jīng)不需要求解二階倒數(shù)啦,B_k+1(x_k+1-x_k)=Δf(x_k+1)-Δf(x_k)(割線方程)恶迈。上面提到根據(jù)擬牛頓條件涩金,有不同的擬牛頓方法,具體有哪些呢:-》》DFP算法、BFGS算法步做、L-BFGS算法等副渴。接下來再分別介紹一下,嘿嘿全度。

DFP算法:該算法是以William C. Davidon佳晶、Roger Fletcher、Michael J.D.Powell三人的首字母命名讼载,最初由Davidon于1959年提出,隨后被Fletcher和Powell研究和推廣中跌,是最早的擬牛頓法咨堤。

圖7 DFP算法

BFGS算法:該算法是以發(fā)明者Broyden、Fletcher漩符、Goldfarb和Shanno四人名字的首字母命名的一喘,BFGS算法比DFP算法更優(yōu),目前它已經(jīng)成為求解無約束非線性優(yōu)化問題最常用的方法之一嗜暴。BFGS算法已經(jīng)有較完善的局部收斂理論凸克,對其全局收斂性的研究也取得了重要成果。

圖8 BFGS算法

L-BFGS(Limited-memory BFGS)算法:考慮到在數(shù)據(jù)很大時闷沥,BFGS中的D_k也會占用很大的空間萎战,因此,L-BFGS對BFGS算法進(jìn)行近似:不再存儲完整的矩陣D_k舆逃,而是存儲計算過程中的向量序列{s_i},{y_i}需要矩陣D_k時蚂维,利用向量序列{s_i},{y_i}的計算來代替。而且也不是將向量序列{s_i},{y_i}全部儲存路狮,而是固定存儲最新的n個(n可以根據(jù)用戶自己機(jī)器的內(nèi)存來參考)每次計算D_k時虫啥,只利用最新的n個向量序列{s_i},{y_i}。

圖9 L-BFGS算法

牛頓法和擬牛頓法先介紹到這里奄妨,繼續(xù)回來sklearn中的Logistic回歸模型涂籽。在該模型的計算參數(shù)的方法,除了liblinear方法砸抛,接著介紹其他的:

2)lbfgs-》L-BFGS算法评雌,如上所述

3)newton-cg-》牛頓法,如上所述

4)sag->Stochastic Average Gradient descent

好吧直焙,又得停下來解釋sag啦柳骄,關(guān)于梯度下降算法的知識,推薦大家看一篇英文博客An overview of gradient descent optimization algorithms? 箕般,隔空膜拜~~

(1)梯度下降算法(Gradient descent)

梯度:在向量微積分中耐薯,標(biāo)量場的梯度是一個向量場。標(biāo)量場中某一點(diǎn)的梯度指向在這點(diǎn)標(biāo)量場增長最快的方向。

圖10 標(biāo)量函數(shù)的梯度
圖11 向量的梯度
圖12 矩陣的梯度

圖10-圖12中曲初,關(guān)于梯度的介紹体谒,見維基百科-梯度

在一些回歸分析中,為了求解參數(shù)臼婆,構(gòu)建了類似如圖13的最優(yōu)化函數(shù)抒痒,其中,h_θ(x^i)表示基于算法預(yù)估結(jié)果颁褂,J_θ(θ)表示代價函數(shù)故响,為了求解θ使得J_θ(θ)最小,那么就要不斷對J_θ(θ)求梯度颁独,且滿足圖14的迭代形式彩届,因?yàn)槊看味际钱?dāng)前的參數(shù)減去梯度,所以叫做梯度下降法

圖13?
圖14 梯度下降求參數(shù)

梯度下降方法的缺點(diǎn):每一次迭代誓酒,都要使用數(shù)據(jù)集合中的全部數(shù)據(jù)樟蠕,當(dāng)數(shù)據(jù)量很大時,計算量非常大靠柑,導(dǎo)致計算速度也會很慢寨辩。因此胰蝠,出現(xiàn)了隨機(jī)梯度下降法(Stochastic gradient descent,SGD)

隨機(jī)梯度下降法SGD:SGD也是利用圖13-14的方式序芦,但是每一次迭代,他不是要利用全部的數(shù)據(jù)拘央,而是每次迭代只用一個樣本隔嫡,在樣本量很大的情況下耍攘,可能只需要部分樣本就可以求解出最好的參數(shù)了。但是也正是因?yàn)檫@樣的隨機(jī)畔勤,導(dǎo)致SGD的收斂速度要小于梯度下降法的收斂速度蕾各,也就是說為了達(dá)到同樣的精度,SGD需要的總迭代次數(shù)要大于梯度下降庆揪。因此出現(xiàn)了Stochastic Average Gradient descent(SAG)這樣的優(yōu)化算法

隨機(jī)平均梯度下降法(Stochastic Average Gradient descent,SAG):

圖15 SAG算法核心思想

SAG算法在內(nèi)存中為每個樣本都維護(hù)一個舊的梯度y_i式曲,隨機(jī)選擇一個樣本i來更新d,并用d來更新參數(shù)x缸榛。具體來說吝羞,更新的項(xiàng)d來自于用新的梯度f^'_i(x)替換d中的舊梯度y_i,這就是

圖16

的意思内颗。如此钧排,每次更新的時候僅僅需要計算一個樣本的梯度,而不是所有樣本的梯度均澳。計算開銷與SGD無異恨溜,但是內(nèi)存開銷要大得多符衔。已經(jīng)證明SAG是一種線性收斂算法,這個速度遠(yuǎn)比SGD快糟袁。

嗯判族,在sklearn中求解Logistic回歸中參數(shù)的方法基本就是這些,終于可以開始討論Logistic回歸模型了~~呀比~


Logistic回歸模型-LogisticRegression

classsklearn.linear_model.LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver='liblinear',max_iter=100,multi_class='ovr',verbose=0,warm_start=False,n_jobs=1)

別暈项戴,馬上是參數(shù)分析:

1)penalty->代價函數(shù)形帮,默認(rèn)是上面提到的L2;

2)dual->默認(rèn)是false周叮。如果是true辩撑,則表示使用‘Dual formulation’,這種情況僅僅適合于penalty='l2'且solver用的是liblinear的情況仿耽;只要樣本數(shù)大于特征數(shù)值合冀,最好將dual=false

3)tol->停止條件(Tolerance for stopping criteria)。默認(rèn)為float,default: 1e-4

4)C->見T圖1-2中的C氓仲,C越大,那么表示每個式子中左部分的正則化在整個代價函數(shù)中占得比重就更小得糜,默認(rèn)為1.0敬扛,必須是正的浮點(diǎn)數(shù)(a positive float)

5)fit_intercept->bool, default: True。 Specifies if a constant (a.k.a. bias or intercept) should be added to the decision function.表示是否添加特征值朝抖,與下面的intercept_scaling有關(guān)

6)intercept_scaling->float,默認(rèn)是1.0啥箭。intercept_scaling屬性起作用的條件:solver是'liblinear' 并且fit_intercept=true。那么在這種條件下治宣,特征向量X就變?yōu)榱薣X,intercept_scaling]急侥,相當(dāng)于多了一個合成的特征值

7)class_weight->dict or ‘balanced’, default: None. 默認(rèn)None表示所有的y類別權(quán)重一致

8)max_iter->最大迭代次數(shù),默認(rèn)為100侮邀;此值僅僅當(dāng)solver是“newton-cg,sag,或者lbfgs”

9)solver->{'newton-cg','lbfgs','liblinear','sag'}坏怪,默認(rèn)取值是'liblinear'。關(guān)于這四種求解參數(shù)的方法绊茧,他們與代價函數(shù)L1,L2之間的試用關(guān)系見圖17

圖17 不同solver的適用范圍

解釋:(1)如果數(shù)據(jù)集比較小铝宵,那么利用'liblinear'就可以啦;(2)sag在處理大數(shù)據(jù)集時速度更快华畏;(3)如果不是二分類鹏秋,而是多種y類型的區(qū)分,那么liblinear就不適合了亡笑,只能用剩下的三種了侣夷;(4)'newton-cg','lbfgs','sag'這三種solver只可以處理代價函數(shù)是L2的情形;(5)在使用 ‘sag’方法時仑乌,最好將各個特征的取值利用sklearn.preprocessing先處理為數(shù)量級是一個范圍的百拓,比如都為0-1之間的琴锭,這樣才能有效的保證sag方法在使用時具有較快的收斂速度。

10)multi_class->str, {‘ovr’, ‘multinomial’}, default: ‘ovr’耐版,這個參數(shù)是針對多元分類(二元以上祠够,所以不包括solver='linlinear')》嗌‘ovr’表示binary擬合(大概就是每一類要不是0古瓤,要不是 ? ?1);‘multinomial’表示在擬合過程中腺阳,the loss minimised is the multinomial loss fit across the entire probability distribution.(非常不熟悉多類分類落君,所以不清楚這個設(shè)置到底啥意思,請大神指點(diǎn)亭引,我也會在以后慢慢了解)

11)verbose->冗余值绎速,非負(fù)整數(shù), default: 0。僅僅在solver為linlinear或者lbfgs時焙蚓,設(shè)置該取值

12)warm_start->When set to True, reuse the solution of the previous call to fit as initialization, otherwise, just erase the previous solution. Useless for liblinear solver.

終于可以寫代碼了纹冤,好開心 · · ·

栗子:繼續(xù)以sklearn的dataset中的iris數(shù)據(jù)集來計算,取其前兩個特征:

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

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

2)利用數(shù)據(jù)购公,訓(xùn)練Logistic回歸模型

圖19 訓(xùn)練Logistic回歸模型

3)在兩個特征值的取值范圍內(nèi)萌京,構(gòu)建網(wǎng)格,產(chǎn)生一些介于最值之間的等差數(shù)據(jù)數(shù)組

圖20 建立網(wǎng)格宏浩,產(chǎn)生數(shù)據(jù)

4)預(yù)測網(wǎng)格內(nèi)的數(shù)據(jù)

圖21 基于模型知残,預(yù)測網(wǎng)格內(nèi)的數(shù)據(jù)

5)繪制邊界

圖22 繪制邊界
圖23 基于Logistic回歸模型繪制的邊界示意圖

在上圖的繪制中,用到了pcolormesh()函數(shù)比庄,它類似于pcolor()函數(shù)求妹,也是最坐標(biāo)點(diǎn)就行著色,但是不同的是:

圖24 pcolormesh()函數(shù)繪圖原理

因?yàn)榇舜畏诸愔屑岩ぃ瑈的取值為0制恍,1,2三類神凑,所以對應(yīng)的上圖24中有三種顏色吧趣。

本來還想再寫一個sklearn中的Logistic回歸的例子,但是限于篇幅耙厚,這篇文章太長了强挫,以后深入分析的時候再舉例~`~

好噠,這篇先到這里薛躬,希望有點(diǎn)用途俯渤,也希望大神們不吝賜教,謝謝大家啦~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末型宝,一起剝皮案震驚了整個濱河市八匠,隨后出現(xiàn)的幾起案子絮爷,更是在濱河造成了極大的恐慌,老刑警劉巖梨树,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑夯,死亡現(xiàn)場離奇詭異,居然都是意外死亡抡四,警方通過查閱死者的電腦和手機(jī)柜蜈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指巡,“玉大人淑履,你說我怎么就攤上這事≡逖” “怎么了秘噪?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勉耀。 經(jīng)常有香客問我指煎,道長,這世上最難降的妖魔是什么便斥? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任至壤,我火速辦了婚禮,結(jié)果婚禮上椭住,老公的妹妹穿的比我還像新娘崇渗。我一直安慰自己字逗,他們只是感情好京郑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葫掉,像睡著了一般些举。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俭厚,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天户魏,我揣著相機(jī)與錄音,去河邊找鬼挪挤。 笑死叼丑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扛门。 我是一名探鬼主播鸠信,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼论寨!你這毒婦竟也來了星立?” 一聲冷哼從身側(cè)響起爽茴,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绰垂,沒想到半個月后室奏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劲装,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年胧沫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱畅。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡琳袄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纺酸,到底是詐尸還是另有隱情窖逗,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布餐蔬,位于F島的核電站碎紊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏樊诺。R本人自食惡果不足惜仗考,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望词爬。 院中可真熱鬧秃嗜,春花似錦、人聲如沸顿膨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恋沃。三九已至必搞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囊咏,已是汗流浹背恕洲。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梅割,地道東北人霜第。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像户辞,于是被迫代替她去往敵國和親泌类。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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