Logistic迴歸分析也用於研究影響關係,即X對於Y的影響情況。Y為定量資料,X可以是定量資料或定類資料。

Logistic迴歸和線性迴歸最大的區別在於Y的資料型別。線性迴歸分析的因變數Y屬於定量資料,而Logistic迴歸分析的因變數Y屬於分類資料。

邏輯迴歸的公式如下:

g(z)=\frac{1}{1+e^{-z}}\\ z=a+bx

邏輯函式影象如下:

邏輯迴歸例項

可以看到,邏輯迴歸函式是一個s形的曲線,取值在[0,1]之間,在遠離0的地方函式的值會很快接近0或者1。通常可以選擇0。5作為閾值,劃定一個決策面,當y>=0。5時,確定標籤為1,當y<0。5時,確定標籤為0。

如果輸入的資料是一個

L

維空間特徵,考慮一個

M

分類問題,那麼分類器將會把這個

L

維空間的特徵點分為

M

個區域。每個區域顯然就屬於一個類別,如果輸入一個點

x

落在第

i

個區域,那麼就屬於第

i

類。分割成這些區域的邊界就稱為

決策面

例項:學習時間和透過考試有什麼樣的關係?

1.提出問題

已知一部分學生的學習時間和透過考試的情況,預測另一部分學生的透過考試的情況。其中,特徵為學習時間,標籤為透過考試。

2.理解資料

將資料集匯入python

#OrderedDict,實現了對字典物件中元素的排序。

from collections import OrderedDict

import pandas as pd

#資料集

examDict={

‘學習時間’:[0。50,0。75,1。00,1。25,1。50,1。75,1。75,2。00,2。25,

2。50,2。75,3。00,3。25,3。50,4。00,4。25,4。50,4。75,5。00,5。50],

‘透過考試’:[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]}

}

examOrderDict=OrderedDict(examDict)

examDf=pd。DataFrame(examOrderDict)

#檢視資料集前5行

examDf。head()

邏輯迴歸例項

#提取特徵和標籤

#特徵features

exam_X=examDf。loc[:,‘學習時間’]

#標籤labes

exam_y=examDf。loc[:,‘透過考試’]

#繪製散點圖

import matplotlib。pyplot as plt

#散點圖

plt。scatter(exam_X, exam_y, color=“b”, label=“exam data”)

#新增圖示標籤

plt。xlabel(“Hours”)

plt。ylabel(“Pass”)

#顯示影象

plt。show()

邏輯迴歸例項

3.構建模型

(1) 提取特徵和標籤

#特徵features

exam_X=examDf。loc[:,‘學習時間’]

#標籤labes

exam_y=examDf。loc[:,‘透過考試’]

(2) 建立訓練資料和測試資料

from sklearn。model_selection import train_test_split

#建立訓練資料和測試資料

X_train , X_test , y_train , y_test = train_test_split(exam_X,exam_y,train_size=0。8)

#輸出資料大小

print(‘原始資料特徵:’,exam_X。shape,‘訓練資料特徵:’,X_train。shape,‘,測試資料特徵:’,X_test。shape)

print(‘原始資料標籤:’,exam_y。shape,‘訓練資料標籤:’,y_train。shape ,‘測試資料標籤:’,y_test。shape)

邏輯迴歸例項

#散點圖

plt。scatter(X_train, y_train, color=“blue”, label=“train data”)

plt。scatter(X_test, y_test, color=“red”, label=“test data”)

邏輯迴歸例項

(3) 訓練模型(使用訓練資料)

#將訓練資料特徵轉換成二維陣列XX行*1列

X_train=X_train。values。reshape(-1,1)

#將測試資料特徵轉換成二維陣列行數*1列

X_test=X_test。values。reshape(-1,1)

‘’‘ reshape(-1,列數)是根據所給的列數,自動按照原始陣列的大小形成一個新的陣列,

例如reshape(-1,1)就是改變成1列的陣列,這個陣列的長度是根據原始陣列的大小來自動形成的。

reshape(行數,-1)是根據所給的行數,自動按照原始陣列的大小形成一個新的陣列。’‘’

#第1步:匯入邏輯迴歸

from sklearn。linear_model import LogisticRegression

#第2步:建立模型:邏輯迴歸

model = LogisticRegression()

#第3步:訓練模型

model。fit(X_train , y_train)

邏輯迴歸例項

(4) 模型評估(使用測試資料)

與線性迴歸不同,邏輯迴歸利用準確率來評估模型。利用score方法,透過輸入測試資料,利用剛才的邏輯迴歸模型,計算出預測結果。

#評估模型:準確率

model。score(X_test , y_test)

得到

R^{2}=0.75

#獲取機率值:使用predict_proba方法獲取透過考試的機率

#第1個值是標籤為0(不透過考試)的機率值,第2個值是標籤為1(透過考試)的機率值

model。predict_proba([[3]])#計算學習時間3小時透過考試的機率

邏輯迴歸例項

#預測資料:使用模型的predict方法可以進行預測。這裡我們輸入學生的特徵學習時間3小時,模型返回結果標籤是1,就代表預測該學生透過考試。

pred=model。predict([[3]])#學習時間3小時透過的機率為60。03%,機率大於0。5,因此預測該學生透過考試,模型應返回結果標籤1。

print(pred)

邏輯迴歸例項

‘’‘

理解邏輯迴歸函式

斜率slope

截距intercept

’‘’

#第1步:得到迴歸方程的z值

#迴歸方程:z= + x

#截距

a=model。intercept_

#迴歸係數

b=model。coef_

#第2步:將z值帶入邏輯迴歸函式中,得到機率值

x=3

z=a+b*x

y_pred=1/(1+np。exp(-z))

print(‘預測的機率值:’,y_pred)

預測的機率值為0。74885523。