大三打卡(10.8)
实验二:逻辑回归算法实现与测试
一、实验目的
深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用 Python 语言实现对数 几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注 意同分布取样); (2)使用训练集训练对数几率回归(逻辑回归)分类算法; (3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选 择; (4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验二的 部分。
三、算法步骤、代码、及结果
1. 算法伪代码
BEGIN
# 1. 加载数据集
X, y = load_data()
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = split_data(X, y)
# 3. 训练模型
model = train_model(X_train, y_train)
# 4. 评估模型性能
cv_results = evaluate_model(X_train, y_train) # 用训练集进行交叉验证
PRINT "五折交叉验证结果:", cv_results
# 5. 测试模型性能
test_model(model, X_test, y_test) # 用测试集进行测试
END
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score,
cross_validate
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score,
f1_score
import numpy as np
# (1)从 scikit-learn 库中加载 iris 数据集,并留出 1/3 的样本作为测试集
iris = 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=1/3,
random_state=42, stratify=y)
# (2)使用训练集训练对数几率回归(逻辑回归)分类算法
logistic = LogisticRegression(max_iter=200)
logistic.fit(X_train, y_train)
# (3)使用五折交叉验证对模型性能进行评估和选择
scores = cross_validate(logistic, X_train, y_train, cv=5,
scoring=('accuracy', 'precision_macro', 'recall_macro', 'f1_macro'))
# 打印交叉验证结果
print("交叉验证结果:")
print("准确度: ",
np.mean(scores['test_accuracy']))
print("精度: ",
np.mean(scores['test_precision_macro']))
print("召回率: ",
np.mean(scores['test_recall_macro']))
print("F1 值: ", np.mean(scores['test_f1_macro']))
# (4)使用测试集,测试模型的性能
y_pred = logistic.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("测试集性能指标:")
print("准确度: ", accuracy)
print("精度: ", precision)
print("召回率: ", recall)
print("F1 值: ", f1)
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
训练集与测试集性能对比:
准确率对比:比较模型在训练集和测试集上的准确率,检查是否有过拟合或欠拟合的现象。如果训练集的准确率远高于测试集,可能存在过拟合;如果测试集的准确率远高于训练集,可能存在数据泄露或模型欠拟合。
精度、召回率和F1值对比:同样,对比这些指标在训练集和测试集上的表现,分析模型在不同数据集上的稳定性和一致性。
交叉验证结果分析:
稳定性:通过五折交叉验证得到的标准差可以衡量模型性能的稳定性。如果标准差较小,说明模型在不同训练集划分下的性能较为稳定;如果标准差较大,则模型性能可能对数据划分敏感。
参数调整的影响:
如果在实验中调整了逻辑回归模型的参数(例如正则化强度、最大迭代次数等),可以对比不同参数设置下的性能,分析哪些参数对模型性能有显著影响。
不同分类阈值的影响:
逻辑回归模型的分类阈值默认为0.5,但这个阈值是可以调整的。对比不同阈值下的性能指标,可以找到最优的分类阈值。
模型泛化能力:
通过比较训练集和测试集的性能,可以评估模型的泛化能力。一个好的模型应该在训练集上有较高的准确率,同时在未见过的测试集上也能保持较好的性能。
数据不平衡的影响:
如果数据集中的类别分布不均匀,需要分析这对模型性能的影响。可以通过调整类别权重或使用其他技术来处理数据不平衡问题,并对比处理前后的性能差异。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律