2024.9.30

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

一、实验目的

深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用 Python 语言实现对数

几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

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

意同分布取样);

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

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

择;

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

部分。

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

   1. 算法伪代码

(1) 加载Iris数据集

(2) 提取特征集X和标签集y

(3) 使用留出法将数据集分为训练集(X_train, y_train)和测试集(X_test, y_test),测试集大小为1/3,保持类别比例

(4) 创建逻辑回归模型,设置最大迭代次数为200

(5) 训练模型:

    (a) 使用训练集(X_train, y_train)训练逻辑回归模型

(6) 使用五折交叉验证评估模型性能:

    (a) 对训练集(X_train, y_train)进行五折交叉验证

    (b) 计算准确度、精度、召回率和F1值的平均值

(7) 输出交叉验证结果:

    (a) 打印准确度、精度、召回率和F1值的平均值

(8) 使用测试集评估模型性能:

    (a) 使用模型对测试集(X_test)进行预测,得到预测结果y_pred

    (b) 计算测试集上的准确度、精度、召回率和F1

(9) 输出测试集评估结果:

    (a) 打印测试集上的准确度、精度、召回率和F1

(10) 输出详细的分类报告:

    (a) 使用y_testy_pred生成分类报告,并打印

   2. 算法主要代码

import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report

# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 留出法分割数据集,留出1/3的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 创建逻辑回归模型并训练
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 使用五折交叉验证评估模型性能
accuracy = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
precision = cross_val_score(model, X_train, y_train, cv=5, scoring='precision_macro')
recall = cross_val_score(model, X_train, y_train, cv=5, scoring='recall_macro')
f1 = cross_val_score(model, X_train, y_train, cv=5, scoring='f1_macro')

# 输出交叉验证结果
print(f'交叉验证准确度: {accuracy.mean():.4f}')
print(f'交叉验证精度: {precision.mean():.4f}')
print(f'交叉验证召回率: {recall.mean():.4f}')
print(f'交叉验证F1: {f1.mean():.4f}')

# 使用测试集进行预测
y_pred = model.predict(X_test)

# 评估模型性能
accuracy_test = accuracy_score(y_test, y_pred)
precision_test = precision_score(y_test, y_pred, average='macro')
recall_test = recall_score(y_test, y_pred, average='macro')
f1_test = f1_score(y_test, y_pred, average='macro')

# 输出测试结果
print(f'测试集准确度: {accuracy_test:.4f}')
print(f'测试集精度: {precision_test:.4f}')
print(f'测试集召回率: {recall_test:.4f}')
print(f'测试集F1: {f1_test:.4f}')

# 输出详细的分类报告
print(classification_report(y_test, y_pred, target_names=iris.target_names))

(2)调用库方法

1.load_iris()

来源:sklearn.datasets

参数:无

作用:加载Iris数据集。

train_test_split()

 

2.来源:sklearn.model_selection

参数:

X:特征数据。

y:目标数据。

test_size:测试集的比例,这里设置为0.33,即33%的数据用作测试集。

random_state:随机数生成器的种子,这里设置为42,确保每次划分的结果相同。

stratify:根据目标变量y的分布进行分层抽样,确保每个类别的比例在训练集和测试集中保持一致。

作用:将数据集划分为训练集和测试集。

LogisticRegression()

 

3.来源:sklearn.linear_model

参数:

max_iter:最大迭代次数,这里设置为200,用于确保模型能够收敛。

作用:创建一个逻辑回归模型实例。

fit()

 

4.来源:sklearn.base

参数:

X_train:训练集的特征数据。

y_train:训练集的目标数据。

作用:训练逻辑回归模型。

cross_val_score()

 

5.来源:sklearn.model_selection

参数:

model:要评估的模型。

X_train:训练集的特征数据。

y_train:训练集的目标数据。

cv:交叉验证的折数,这里设置为5

scoring:评分标准,分别使用'accuracy''precision_macro''recall_macro''f1_macro'来评估模型的准确度、精度、召回率和F1值。

作用:使用交叉验证评估模型性能。

predict()

 

6.来源:sklearn.base

参数:

X_test:测试集的特征数据。

作用:使用训练好的模型对测试集进行预测。

accuracy_score()precision_score()recall_score()f1_score()

 

7.来源:sklearn.metrics

参数:

y_test:测试集的真实目标数据。

y_pred:模型预测的目标数据。

average:计算平均值的方法,这里使用'macro',即不考虑类别不平衡,对所有类别同等重视。

作用:计算测试集上的准确度、精度、召回率和F1值。

classification_report()

8.来源:sklearn.metrics

参数:

y_test:测试集的真实目标数据。

y_pred:模型预测的目标数据。

target_names:类别名称,用于报告中显示。

作用:输出一个详细的分类报告,包括主要的分类指标和每个类别的指标。

posted @ 2024-09-30 00:13  kuku睡  阅读(19)  评论(0)    收藏  举报