實驗二:邏輯迴歸演算法實現與測試
一、實驗目的
深入理解對數機率迴歸(即邏輯迴歸的)的演算法原理,能夠使用 Python 語言實現對數
機率迴歸的訓練與測試,並且使用五折交叉驗證演算法進行模型訓練與評估。
二、實驗內容
(1)從 scikit-learn 庫中載入 iris 資料集,使用留出法留出 1/3 的樣本作為測試集(注
意同分布取樣);
(2)使用訓練集訓練對數機率迴歸(邏輯迴歸)分類演算法;
(3)使用五折交叉驗證對模型效能(準確度、精度、召回率和 F1 值)進行評估和選
擇;
(4)使用測試集,測試模型的效能,對測試結果進行分析,完成實驗報告中實驗二的
部分
三、演算法步驟、程式碼、及結果
1. 演算法虛擬碼
匯入必要的庫。
載入iris資料集並分為特徵集X和目標集y。
將資料集分為訓練集和測試集(測試集佔1/3)。
建立邏輯迴歸模型。
使用訓練集訓練模型。
進行五折交叉驗證並計算平均準確率。
使用模型預測測試集。
計算並列印準確率、精確率、召回率和F1分數。
列印分類報告。
2. 演算法主要程式碼
完整原始碼\呼叫庫方法(函式引數說明)
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report
# 載入iris資料集
iris = load_iris()
X, y = iris.data, iris.target
# 使用train_test_split函式劃分資料集,test_size=1/3表示測試集佔1/3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42, stratify=y)
# 建立邏輯迴歸分類器例項
logreg = LogisticRegression(max_iter=200)
# 使用訓練集資料訓練模型
logreg.fit(X_train, y_train)
# 定義五折交叉驗證
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 使用cross_val_score計算五折交叉驗證的準確率
accuracies = cross_val_score(logreg, X_train, y_train, cv=kf, scoring='accuracy')
print(f'五折交叉驗證的平均準確率: {np.mean(accuracies)}')
# 如果需要計算其他指標,可以手動分割資料集並計算
# 預測測試集
y_pred = logreg.predict(X_test)
# 計算各種效能指標
acc = accuracy_score(y_test, y_pred)
prec = precision_score(y_test, y_pred, average='weighted')
rec = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
print(f'Accuracy: {acc}')
print(f'Precision: {prec}')
print(f'Recall: {rec}')
print(f'F1 Score: {f1}')
# 列印詳細的分類報告
print(classification_report(y_test, y_pred, target_names=iris.target_names))
3. 訓練結果截圖(包括:準確率、精度(查準率)、召回率(查全率)、F1)
四、實驗結果分析
1. 測試結果截圖(包括:準確率、精度(查準率)、召回率(查全率)、F1)
- 對比分析
準確率對比:
訓練集上的五折交叉驗證平均準確率為 0.95。
測試集上的準確率為 0.94。
分析:訓練集和測試集的準確率非常接近,這表明模型在訓練集和測試集上的表現較為一致,沒有明顯的過擬合現象。
精確率對比:
測試集上的加權平均精確率為 0.9409722222222223。
分析:精確率較高,說明模型在預測正類時的正確率較高。
召回率對比:
測試集上的加權平均召回率為 0.94。
分析:召回率較高,說明模型在預測所有正類時的覆蓋率較高。
F1 值對比:
測試集上的加權平均 F1 值為 0.939948051948052。
分析:F1 值是精確率和召回率的調和平均值,綜合考慮了兩者的平衡,較高的 F1 值表明模型在這兩個方面都有較好的表現。