Python 機(jī)器學(xué)習(xí)——回歸(邏輯回歸)


0?前言

本次教程分為三部分

  • 邏輯回歸在二分類問(wèn)題的應(yīng)用
  • 邏輯回歸在大數(shù)據(jù)集多分類問(wèn)題的應(yīng)用
  • 練習(xí)題

如想了解邏輯回歸的相關(guān)理論知識(shí),可以參考:
Logistic Regression(邏輯回歸)原理及公式推導(dǎo)


1?考試成績(jī)預(yù)測(cè)

(本節(jié)介紹如何利用邏輯回歸模型進(jìn)行二分類預(yù)測(cè))
??關(guān)于課程“中級(jí)宏觀經(jīng)濟(jì)學(xué)”的新教學(xué)方法 PSI 的效果評(píng)價(jià)的數(shù)據(jù)資料如下表。其中,GPA 為修該門課程前的學(xué)分績(jī)點(diǎn);TUCH 為修該門課程前的摸底測(cè)試成績(jī);PSI 為 1 表示使用 PSI 方法;LG 為該門課程的考試成績(jī)?nèi)≈禐?1(LG=A) 或 0(LG=B 或 LG=C)。由于成績(jī)只有 0 或 1 兩種取值,因此該問(wèn)題為二分類問(wèn)題。

序號(hào) GPA TUCH PSI LG
1 2.66 20 0 0
2 2.89 22 0 0
3 3.28 24 0 0
4 2.92 12 0 0
5 4.00 21 0 1
6 2.86 17 0 0
7 2.76 17 0 0
8 2.89 21 0 0
9 3.03 25 0 0
10 3.92 29 0 1
11 2.63 20 0 0
12 3.32 23 0 0
13 3.57 23 0 0
14 3.26 25 0 1
15 3.53 26 0 0
16 2.74 19 0 0
17 2.75 25 0 0
18 2.83 19 0 0
19 3.12 23 1 0
20 3.12 23 1 1
21 2.06 22 1 0
22 3.62 28 1 1
23 2.89 14 1 0
24 3.51 26 1 0
25 3.54 24 1 1
26 2.83 27 1 1
27 3.39 17 1 1
28 2.67 24 1 0
29 3.65 21 1 1
30 4.00 25 1 1
31 3.10 21 1 0
32 2.39 19 1 1

??使用 sklearn 中的 LogisticRegression 類進(jìn)行模型的構(gòu)建

  • 導(dǎo)入宏包

??導(dǎo)入模型構(gòu)建所需要的庫(kù):

# 導(dǎo)入宏包
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression

#隱藏警告
import warnings
warnings.filterwarnings('ignore')
  • 導(dǎo)入數(shù)據(jù)
    ??利用 pandas 庫(kù)中的 pd.read_excel 函數(shù)進(jìn)行數(shù)據(jù)讀?。?/li>
# 導(dǎo)入數(shù)據(jù)
data = pd.read_excel('data.xlsx')
# 劃分?jǐn)?shù)據(jù)集
x_train = data.iloc[:, 1:4]
y_train = data.iloc[:, 4]
  • 數(shù)據(jù)可視化
    ??可視化有利于對(duì)數(shù)據(jù)進(jìn)行整體的把握:
# 可視化
plt.figure()
plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 0)], 'bx')
plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 1)], 'ro')
plt.xlabel('GPA')
plt.ylabel('TUSH')
plt.legend(('LG=0', 'LG=1'))
plt.title('PSI=0')
plt.figure()
plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 0)], 'bx')
plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 1)], 'ro')
plt.xlabel('GPA')
plt.ylabel('TUSH')
plt.legend(('LG=0', 'LG=1'))
plt.title('PSI=1')
PSI=0
PSI=1

??該數(shù)據(jù)集樣本數(shù)較少,總體把握不是很明顯,但是還是能看出 GPA 與 TUCH 越大成績(jī)?cè)胶?,且采?PSI 方法下成績(jī)好的更多。

  • 構(gòu)建模型
LR = LogisticRegression()
LR.fit(x_train, y_train)
LR.predict([[3.32, 20, 1]])
  • 結(jié)果分析
print(LR.score(x_train, y_train))
print(LR.coef_)
print(LR.intercept_)

輸出為:

0.71875
[[ 0.32590462 -0.05076111  1.01457151]]
[-0.9018812]

因此邏輯回歸模型為p(x_1,x_2,x_3) = \frac{e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}{1+e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}p(x_1,x_2,x_3) = \frac{1}{1+e^{-0.3259x_1+0.0508x_2-1.0145x_3+0.919}}其中,x_1為 GPA,x_2為 TUCH,x_3表示是否使用 PSI 方法,p(x_1,x_2,x_3)是模型給出的該門考試成績(jī)?yōu)?1 的概率。由模型可知,是否使用 PSI 方法,對(duì)成績(jī)的好壞影響極大,驗(yàn)證了 PSI 教學(xué)方法的作用。


2?鳶尾花分類

本節(jié)介紹如何利用邏輯回歸模型進(jìn)行多分類預(yù)測(cè)
??數(shù)據(jù)集為 UCI 公開(kāi)的 Iris 數(shù)據(jù)集,樣本數(shù)為 150 個(gè),有 4 個(gè)特征,分別是花萼長(zhǎng)度、花萼寬度、花瓣長(zhǎng)度、花瓣寬度,類別標(biāo)簽為 Setosa、Versicolour、Viriginica。

  • 導(dǎo)入數(shù)據(jù)

??使用 sklearn 中的 datasets 模塊導(dǎo)入數(shù)據(jù)集:

import pandas as pd
from sklearn import datasets
iris_dataset = datasets.load_iris()

??load_iris 返回的是一個(gè) Bunch 對(duì)象,與字典十分相似,里面包含鍵值對(duì)

  • 使用留出法檢驗(yàn)?zāi)P?/strong>

??使用 sklearn.model_selection 中的 train_test_split 對(duì)數(shù)據(jù)進(jìn)行劃分

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris_dataset.data, iris_dataset.target, random_state=0)
  • 觀察數(shù)據(jù)
    ??同樣我們也采用 散點(diǎn)圖矩陣 兩兩查看所有的數(shù)據(jù)特征

    散點(diǎn)圖矩陣

    ??對(duì)角線上是每個(gè)特征的直方圖。由圖我們可以看出利用這些測(cè)試數(shù)據(jù)基本可以按三個(gè)類別區(qū)分開(kāi)。這說(shuō)明機(jī)器學(xué)習(xí)模型可能可以學(xué)會(huì)區(qū)分他們。

  • 構(gòu)建模型

#隱藏警告
import warnings
warnings.filterwarnings('ignore')

from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(x_train, y_train)
  • 模型預(yù)測(cè)及評(píng)估
y_pred = LR.predict(x_test)
print('Test set prections:\n {}'.format(y_pred))

print('Test set score: {:.3f}'.format(np.mean(y_pred == y_test)))

結(jié)果:

Test set prections:
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 2 1 0 0 2 2 0 0 2 0 0 1 1 0 2 2 0 2 2 2 0 2]
Test set score: 0.868

3?練習(xí)題

  • 檢驗(yàn)邏輯回歸方程的顯著性

??邏輯回歸方程的顯著性檢驗(yàn)的目的是檢驗(yàn)自變量全體與 \text{Logit} P的線性關(guān)系是否顯著,從而決定邏輯回歸模型是否合理。

  • 檢驗(yàn)邏輯回歸系數(shù)的顯著性
    ??邏輯回歸系數(shù)的顯著性檢驗(yàn)?zāi)康氖侵饌€(gè)檢驗(yàn)各自變量是否與 \text{Logit} P 有顯著的線性關(guān)系,對(duì)結(jié)束 \text{Logit} P 具有重要貢獻(xiàn)。一般采用 Wald 檢驗(yàn)統(tǒng)計(jì)量,其服從 \chi^2(1) 分布。

  • 邏輯回歸方程的擬合優(yōu)度檢驗(yàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容