邏輯迴歸例項
Logistic迴歸分析也用於研究影響關係,即X對於Y的影響情況。Y為定量資料,X可以是定量資料或定類資料。
Logistic迴歸和線性迴歸最大的區別在於Y的資料型別。線性迴歸分析的因變數Y屬於定量資料,而Logistic迴歸分析的因變數Y屬於分類資料。
邏輯迴歸的公式如下:
邏輯函式影象如下:
可以看到,邏輯迴歸函式是一個s形的曲線,取值在[0,1]之間,在遠離0的地方函式的值會很快接近0或者1。通常可以選擇0。5作為閾值,劃定一個決策面,當y>=0。5時,確定標籤為1,當y<0。5時,確定標籤為0。
如果輸入的資料是一個
維空間特徵,考慮一個
分類問題,那麼分類器將會把這個
維空間的特徵點分為
個區域。每個區域顯然就屬於一個類別,如果輸入一個點
落在第
個區域,那麼就屬於第
類。分割成這些區域的邊界就稱為
決策面
。
例項:學習時間和透過考試有什麼樣的關係?
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)
得到
。
#獲取機率值:使用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。