11.15

灬倾夏發表於2024-11-15

實驗二:邏輯迴歸演算法實現與測試

一、實驗目的

深入理解對數機率迴歸(即邏輯迴歸的)的演算法原理,能夠使用 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

  1. 對比分析

準確率對比:

訓練集上的五折交叉驗證平均準確率為 0.95

測試集上的準確率為 0.94

分析:訓練集和測試集的準確率非常接近,這表明模型在訓練集和測試集上的表現較為一致,沒有明顯的過擬合現象。

精確率對比:

測試集上的加權平均精確率為 0.9409722222222223

分析:精確率較高,說明模型在預測正類時的正確率較高。

召回率對比:

測試集上的加權平均召回率為 0.94

分析:召回率較高,說明模型在預測所有正類時的覆蓋率較高。

F1 值對比:

測試集上的加權平均 F1 值為 0.939948051948052

分析:F1 值是精確率和召回率的調和平均值,綜合考慮了兩者的平衡,較高的 F1 值表明模型在這兩個方面都有較好的表現。