從零開始利用Python建立邏輯回歸分類模型-創(chuàng)新互聯(lián)

假設(shè)申請(qǐng)人向你提供成績,你根據(jù)成績對(duì)其進(jìn)行分類,目標(biāo)是根據(jù)分?jǐn)?shù)將申請(qǐng)人分為兩類,如果申請(qǐng)人可以進(jìn)入大學(xué),則分為1級(jí),如果申請(qǐng)人不能被錄取,則分為0級(jí)。使用線性回歸可以解決這個(gè)問題嗎?讓我們一起來看看。

站在用戶的角度思考問題,與客戶深入溝通,找到防城網(wǎng)站設(shè)計(jì)與防城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋防城地區(qū)。

注意:閱讀本文的前提是了解線性回歸!

目錄

  • 什么是邏輯回歸?

  • 數(shù)據(jù)集可視化

  • 假設(shè)和成本函數(shù)

  • 從頭開始訓(xùn)練模型

  • 模型評(píng)估

  • Scikit-learn實(shí)現(xiàn)

什么是邏輯回歸?

回想一下線性回歸,它被用于確定一個(gè)連續(xù)因變量的值。邏輯回歸通常用于分類目的。與線性回歸不同,因變量只能采用有限數(shù)量的值,即因變量是分類的。當(dāng)可能結(jié)果的數(shù)量只有兩個(gè)時(shí),它被稱為二元邏輯回歸。

讓我們看看邏輯回歸如何被用于分類任務(wù)。

在線性回歸中,輸出是輸入的加權(quán)和。邏輯回歸是廣義線性回歸,在某種意義上,我們不直接輸出輸入的加權(quán)和,但我們通過一個(gè)函數(shù)來傳遞它,該函數(shù)可以映射0到1之間的任何實(shí)數(shù)值。

如果我們將輸入的加權(quán)和作為輸出,就像我們?cè)诰€性回歸中做的那樣,那么該值可以大于1,但我們想要一個(gè)介于0和1之間的值。這也是為什么線性回歸不能用于分類任務(wù)的原因。

從下圖可以看出,線性回歸的輸出通過一個(gè)激活函數(shù)傳遞,該函數(shù)可以映射0到1之間的任何實(shí)數(shù)值。

從零開始利用Python建立邏輯回歸分類模型

所使用的激活函數(shù)稱為sigmoid函數(shù)。sigmoid函數(shù)的曲線如下圖所示

從零開始利用Python建立邏輯回歸分類模型

我們可以看到sigmoid函數(shù)的值總是介于0和1之間。在X = 0時(shí),該值恰好為0.5。我們可以使用0.5作為概率閾值來確定類。如果概率大于0.5,我們將其分類為Class-1(Y = 1)或者歸類為Class-0(Y = 0)。

在我們構(gòu)建模型之前,讓我們看一下邏輯回歸所做的假設(shè)

  • 因變量必須是絕對(duì)的

  • 自變量(特征)必須是獨(dú)立的(以避免多重共線性)

數(shù)據(jù)集

本文中使用的數(shù)據(jù)來自吳恩達(dá)在Coursera上的機(jī)器學(xué)習(xí)課程。數(shù)據(jù)可以從這里下載。(https://www.coursera.org/learn/machine-learning)該數(shù)據(jù)包括100名申請(qǐng)人的兩次考試分?jǐn)?shù)。目標(biāo)值采用二進(jìn)制值1,0。1表示申請(qǐng)人被大學(xué)錄取,0表示申請(qǐng)人未被錄取。它目標(biāo)是建立一個(gè)分類器,可以預(yù)測(cè)申請(qǐng)是否將被大學(xué)錄取。

讓我們使用read_csv函數(shù)將數(shù)據(jù)加載到pandas Dataframe中。我們還將數(shù)據(jù)分為錄取的和未錄取的,以使數(shù)據(jù)可視化。

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

現(xiàn)在我們已經(jīng)清楚地了解了問題和數(shù)據(jù),讓我們繼續(xù)構(gòu)建我們的模型。

假設(shè)和成本函數(shù)

到目前為止,我們已經(jīng)了解了如何使用邏輯回歸將實(shí)例分類到不同的類中。在本節(jié)中,我們將定義假設(shè)和成本函數(shù)。

線性回歸模型可以用等式表示。

從零開始利用Python建立邏輯回歸分類模型

然后,我們將sigmoid函數(shù)應(yīng)用于線性回歸的輸出

從零開始利用Python建立邏輯回歸分類模型

sigmoid函數(shù)表示為,

從零開始利用Python建立邏輯回歸分類模型

然后邏輯回歸的假設(shè)為,

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

如果輸入的加權(quán)和大于零,則預(yù)測(cè)的類為1,反之亦然。因此,通過將輸入的加權(quán)和設(shè)置為0,可以找到將兩個(gè)類分開的決策邊界。

成本函數(shù)

與線性回歸一樣,我們將為模型定義成本函數(shù),目標(biāo)是最小化成本。

單個(gè)訓(xùn)練示例的成本函數(shù)可以通過以下方式給出:

從零開始利用Python建立邏輯回歸分類模型

成本函數(shù)直覺

如果實(shí)際的類是1并且模型預(yù)測(cè)為0,我們應(yīng)該懲罰它,反之亦然。從下圖中可以看出,對(duì)于h(x)接近1的情況-log(h(x)),成本為0,當(dāng)h(x)接近0時(shí),成本為無窮大(即我們對(duì)模型進(jìn)行嚴(yán)重懲罰)。類似地,對(duì)于繪圖-log(1-h(x)),當(dāng)實(shí)際值為0并且模型預(yù)測(cè)為0時(shí),成本為0并且當(dāng)h(x)接近1時(shí)成本變?yōu)闊o窮大。

從零開始利用Python建立邏輯回歸分類模型

我們可以使用以下兩個(gè)方程組合:

從零開始利用Python建立邏輯回歸分類模型

由J(θ)表示的所有訓(xùn)練樣本的成本可以通過取所有訓(xùn)練樣本的成本的平均值來計(jì)算

從零開始利用Python建立邏輯回歸分類模型

其中m是訓(xùn)練樣本的數(shù)量。

我們將使用梯度下降來最小化成本函數(shù)。梯度w.r.t任何參數(shù)都可以由該方程給出

從零開始利用Python建立邏輯回歸分類模型

該方程類似于我們?cè)诰€性回歸中所獲得的方程,在這兩種情況下只有h(x)不同。

訓(xùn)練模型

現(xiàn)在我們已經(jīng)擁有了構(gòu)建模型所需的一切。讓我們?cè)诖a中實(shí)現(xiàn)它。

讓我們首先為我們的模型準(zhǔn)備數(shù)據(jù)。

從零開始利用Python建立邏輯回歸分類模型

我們將定義一些將用于計(jì)算成本的函數(shù)。

從零開始利用Python建立邏輯回歸分類模型

接下來,我們定義成本和梯度函數(shù)。

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

我們還定義擬合函數(shù),該函數(shù)將用于查找最小化成本函數(shù)的模型參數(shù)。在這篇文章中,我們編寫了梯度下降法來計(jì)算模型參數(shù)。 在這里,我們將使用scipy庫中的fmin_tnc函數(shù)。它可用于計(jì)算任何函數(shù)的最小值。它將參數(shù)作為:

  • func:最小化的函數(shù)

  • x0:我們想要查找的參數(shù)的初始值

  • fprime:'func'定義的函數(shù)的梯度

  • args:需要傳遞給函數(shù)的參數(shù)

從零開始利用Python建立邏輯回歸分類模型

模型參數(shù)為[-25.16131856 0.20623159 0.20147149]

為了了解我們的模型有多好,我們將繪制決策邊界。

繪制決策邊界

由于我們的數(shù)據(jù)集中有兩個(gè)特征,因此線性方程可以表示為,

從零開始利用Python建立邏輯回歸分類模型

如前所述,可以通過將輸入的加權(quán)和設(shè)置為0來找到?jīng)Q策邊界。將h(x)等于0,

從零開始利用Python建立邏輯回歸分類模型

我們將在我們用于可視化數(shù)據(jù)集的圖上方繪制決策邊界。

從零開始利用Python建立邏輯回歸分類模型

從零開始利用Python建立邏輯回歸分類模型

看起來我們的模型在預(yù)測(cè)課程方面做得不錯(cuò)。但它有多準(zhǔn)確?讓我們來看看。

模型的準(zhǔn)確性

從零開始利用Python建立邏輯回歸分類模型

該模型的準(zhǔn)確率為89%。

讓我們使用scikit-learn實(shí)現(xiàn)我們的分類器,并將它與我們從頭開始構(gòu)建的模型進(jìn)行比較。

scikit-learn實(shí)現(xiàn)

從零開始利用Python建立邏輯回歸分類模型

模型參數(shù)為[[-2.85831439,0.05214733,0.04531467]],精度為91%。

為什么模型參數(shù)與我們從頭開始實(shí)現(xiàn)的模型有很大不同?如果你看一下sk-learn的邏輯回歸實(shí)現(xiàn)的文檔,你就會(huì)發(fā)現(xiàn)其中考慮了正則化?;旧?,正則化是用于防止模型過度擬合數(shù)據(jù)的。 在本文中,我不會(huì)深入討論正規(guī)化的細(xì)節(jié)。

此文章中使用的完整代碼可以在此GitHub中找到。(https://github.com/animesh-agarwal/Machine-Learning/tree/master/LogisticRegression)

網(wǎng)站題目:從零開始利用Python建立邏輯回歸分類模型-創(chuàng)新互聯(lián)
地址分享:http://bm7419.com/article16/gjegg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、搜索引擎優(yōu)化、微信小程序、動(dòng)態(tài)網(wǎng)站、小程序開發(fā)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管