实验二:逻辑回归算法实现与测试

一、实验目的

深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用Python语言实现对数几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

(1)从scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);

(2)使用训练集训练对数几率回归(逻辑回归)分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验二的部分。

三、算法步骤、代码、及结果

  1. 算法伪代码

从 scikit-learn 库中加载 Iris 数据集;

使用留出法(Hold-Out Method)将数据集划分为训练集和测试集,保持数据分布一致(同分布随机划分),将 1/3 数据作为测试集;

使用逻辑回归算法训练模型,使用训练集对模型进行拟合;

使用五折交叉验证(5-fold cross-validation)对模型的准确率、精度、召回率和 F1 值进行评估;

使用测试集评估训练好的模型,输出准确率、精度、召回率、F1 值,并进行结果分析;

  1. 算法主要代码

完整源代码\调用库方法(函数参数说明)

import numpy as np

from sklearn.model_selection import train_test_split, cross_val_score

from sklearn.linear_model import LogisticRegression

from sklearn.datasets import load_iris

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

 

iris = load_iris()

X = iris.data

y = iris.target

 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33,  stratify=y)

 

logreg = LogisticRegression(max_iter=200)

 

cross_val_accuracy = cross_val_score(logreg, X_train, y_train, cv=5, scoring='accuracy')

cross_val_precision = cross_val_score(logreg, X_train, y_train, cv=5, scoring='precision_macro')

cross_val_recall = cross_val_score(logreg, X_train, y_train, cv=5, scoring='recall_macro')

cross_val_f1 = cross_val_score(logreg, X_train, y_train, cv=5, scoring='f1_macro')

 

print(f"\n交叉验证结果:")

print(f"准确率: {np.mean(cross_val_accuracy):.4f}")

print(f"精度: {np.mean(cross_val_precision):.4f}")

print(f"召回率: {np.mean(cross_val_recall):.4f}")

print(f"F1 值: {np.mean(cross_val_f1):.4f}")

 

logreg.fit(X_train, y_train)

 

y_pred = logreg.predict(X_test)

 

accuracy = accuracy_score(y_test, y_pred)

precision = precision_score(y_test, y_pred, average='macro')

recall = recall_score(y_test, y_pred, average='macro')

f1 = f1_score(y_test, y_pred, average='macro')

 

print(f"\n测试集测试结果")

print("准确率: {:.4f}".format(accuracy))

print("精度: {:.4f}".format(precision))

print("召回率: {:.4f}".format(recall))

print("F1 值: {:.4f}".format(f1))

 

(1)train_test_split:

X 和 y:数据特征和目标标签。

test_size=0.33:测试集占总数据集的 1/3,剩余的为训练集。

random_state=42:控制随机性,确保每次分割数据时结果一致。

stratify=y:确保训练集和测试集中目标标签的分布与原数据集一致。

 

 

(2)LogisticRegression:

max_iter=200:最大迭代次数。为了确保模型收敛,设置足够的迭代次数。

 

(3)cross_val_score:

cv=5:五折交叉验证。

scoring='accuracy'、scoring='precision_macro'、scoring='recall_macro'、scoring='f1_macro':分别评估准确率、精度、召回率和 F1 值,采用宏观平均。

 

(4)accuracy_score、precision_score、recall_score、f1_score:

这些函数分别用于计算准确率、精度、召回率和 F1 值,average='macro' 表示在多类问题下对各类结果求平均。

  

  1. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

四、实验结果分析

  1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
  2. 对比分析

训练集与测试集差异较小:训练集和测试集的性能差异在合理范围内,训练集的表现略优于测试集,这通常是由于模型对训练数据的拟合程度较高,且模型的泛化能力较强,能够在测试数据上保持良好的表现。

过拟合风险较低:由于训练集和测试集的表现差距较小,可以认为模型没有发生过拟合。通常如果测试集准确率远低于训练集准确率,就需要关注模型是否过拟合。

模型表现良好:无论是在训练集还是测试集上,模型的各项指标都较为接近,并且都达到了较高的水平,表明逻辑回归模型在该数据集上的表现非常优秀。

posted on 2024-12-07 22:47  leapss  阅读(33)  评论(0)    收藏  举报