機器學習 簡單的邏輯回歸案例


1.邏輯回歸

1.1簡單邏輯回歸模型實例——二分類

1.1.1問題描述

利用Python中sklearn包進行邏輯回歸分析。根據已有數據探究“學習時長”與“是否通過考試”之間關系,並建立預測模型。

1.2代碼及其解釋

1.2.1生成/導入數據

# 1.導入包
import warnings
import pandas as pd
import numpy as np
from collections import OrderedDict
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
# 2.創建數據(學習時間與是否通過考試)
dataDict={'學習時間':list(np.arange(0.50,5.50,0.25)),
    '考試成績':[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
dataOrDict=OrderedDict(dataDict)
dataDf=pd.DataFrame(dataOrDict)

1.2.2查看數據

# 查看數據具體形式
dataDf.head()
# 查看數據類型及缺失情況
dataDf.info()
# 查看描述性統計信息
dataDf.describe()

1.2.3繪制散點圖查看數據分布情況

# 提取特征和標簽
exam_X = dataDf['學習時間']
exam_y = dataDf['考試成績']
# 繪制散點圖
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.scatter(exam_X, exam_y, color='b', label='考試數據')
plt.legend(loc=2)
plt.xlabel('學習時間')
plt.ylabel('考試成績')
plt.show()

image
從圖中可以看出當學習時間高於某一閾值時,一般都能夠通過考試,因此我們利用邏輯回歸方法建立模型。

1.2.4構建模型

(1)拆分訓練集並利用散點圖觀察

# 1.拆分訓練集和測試集
from sklearn.model_selection import train_test_split

exam_X = exam_X.values.reshape(-1, 1)
exam_y = exam_y.values.reshape(-1, 1)
train_X, test_X, train_y, test_y = train_test_split(exam_X, exam_y, train_size=0.8)
print('訓練集數據大小為', train_X.size, train_y.size)
print('測試集數據大小為', test_X.size, test_y.size)

# 2.散點圖觀察
plt.scatter(train_X, train_y, color='b', label='考試數據')
plt.scatter(test_X, test_y, color='r', label='測試數據')

plt.legend(loc=2)
plt.xlabel('學習時間')
plt.ylabel('考試成績')
plt.show()

image

(2)導入模型

# 3.導入模型
from sklearn.linear_model import LogisticRegression

modelLR = LogisticRegression()

(3)訓練模型

# 4.訓練模型
modelLR.fit(train_X,train_y)

1.2.4模型評估

1、模型評分(即准確率)

modelLR.score(test_X,test_y)
>>>
0.75

2、指定某個點的預測情況

# 學習時間確定時,預測為0和1的概率分別為多少?
modelLR.predict_proba([[3]])
>>>
array([[0.53351574, 0.46648426]])

# 學習時間確定時,預測能否通過考試?
modelLR.predict([[3]])
>>>
array([0], dtype=int64)

3、求出邏輯回歸函數並繪制曲線
邏輯回歸函數

# 先求出回歸函數y=a+bx,再代入邏輯函數中pred_y=1/(1+np.exp(-y))
b=modelLR.coef_
a=modelLR.intercept_

print('該模型對應的回歸函數為:1/(1+exp-(%f+%f*x))'%(a,b))
>>>
該模型對應的回歸函數為:1/(1+exp-(-4.891204+1.585647*x))

邏輯回歸曲線

# 畫出相應的邏輯回歸曲線
plt.scatter(train_X,train_y,color='b',label='考試數據')
plt.scatter(test_X,test_y,color='r',label='測試數據')
plt.plot(test_X,1/(1+np.exp(-(a+b*test_X))),color='r')
plt.plot(exam_X,1/(1+np.exp(-(a+b*exam_X))),color='y')
plt.legend(loc=2)
plt.xlabel('學習時間')
plt.ylabel('考試成績')plt.show()

image

1.3實驗結果

1.3.1預測訓練數據

# 預測訓練數據
modelLR.predict(exam_X)
>>>
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
  dtype=int64)
# 由預測結果可知學習時間大於3時,預測能否通過考試

1.3.2計算各種指標

from sklearn.metrics import accuracy_score, precision_score, recall_score

y_true = dataDf['考試成績']
y_pred = modelLR.predict(exam_X)

# 准確率
accuracy_score(y_true, y_pred)
>>>
0.95

# 精確度
precision_score(y_true, y_pred)
>>>
1.0

# 召回率
recall_score(y_true, y_pred)
>>>
0.9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM