0?前言
本次教程分為三部分
- 邏輯回歸在二分類(lèi)問(wèn)題的應(yīng)用
- 邏輯回歸在大數(shù)據(jù)集多分類(lèi)問(wèn)題的應(yīng)用
- 練習(xí)題
如想了解邏輯回歸的相關(guān)理論知識(shí),可以參考:
Logistic Regression(邏輯回歸)原理及公式推導(dǎo)
1?考試成績(jī)預(yù)測(cè)
(本節(jié)介紹如何利用邏輯回歸模型進(jìn)行二分類(lèi)預(yù)測(cè))
??關(guān)于課程“中級(jí)宏觀經(jīng)濟(jì)學(xué)”的新教學(xué)方法 PSI 的效果評(píng)價(jià)的數(shù)據(jù)資料如下表凿可。其中捻撑,GPA 為修該門(mén)課程前的學(xué)分績(jī)點(diǎn);TUCH 為修該門(mén)課程前的摸底測(cè)試成績(jī)姐帚;PSI 為 1 表示使用 PSI 方法呀枢;LG 為該門(mén)課程的考試成績(jī)?nèi)≈禐?1(LG=A) 或 0(LG=B 或 LG=C)霉晕。由于成績(jī)只有 0 或 1 兩種取值,因此該問(wèn)題為二分類(lèi)問(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
類(lèi)進(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ù)讀让⒅椤:
# 導(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')
??該數(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]
因此邏輯回歸模型為即其中,為 GPA娜汁,為 TUCH嫂易,表示是否使用 PSI 方法,是模型給出的該門(mén)考試成績(jī)?yōu)?1 的概率掐禁。由模型可知怜械,是否使用 PSI 方法,對(duì)成績(jī)的好壞影響極大傅事,驗(yàn)證了 PSI 教學(xué)方法的作用缕允。
2?鳶尾花分類(lèi)
本節(jié)介紹如何利用邏輯回歸模型進(jìn)行多分類(lèi)預(yù)測(cè)
??數(shù)據(jù)集為 UCI 公開(kāi)的 Iris 數(shù)據(jù)集,樣本數(shù)為 150 個(gè)蹭越,有 4 個(gè)特征障本,分別是花萼長(zhǎng)度、花萼寬度响鹃、花瓣長(zhǎng)度彼绷、花瓣寬度,類(lèi)別標(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ù)特征
??對(duì)角線上是每個(gè)特征的直方圖。由圖我們可以看出利用這些測(cè)試數(shù)據(jù)基本可以按三個(gè)類(lèi)別區(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)自變量全體與 的線性關(guān)系是否顯著,從而決定邏輯回歸模型是否合理怕膛。
檢驗(yàn)邏輯回歸系數(shù)的顯著性
??邏輯回歸系數(shù)的顯著性檢驗(yàn)?zāi)康氖侵饌€(gè)檢驗(yàn)各自變量是否與 有顯著的線性關(guān)系熟嫩,對(duì)結(jié)束 具有重要貢獻(xiàn)。一般采用 Wald 檢驗(yàn)統(tǒng)計(jì)量褐捻,其服從 分布掸茅。邏輯回歸方程的擬合優(yōu)度檢驗(yàn)