机器学习:实验二:逻辑回归算法实现与测试

news/2024/12/15 10:23:46/文章来源:https://www.cnblogs.com/xuan-2004/p/18607719

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

 

一、实验目的

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

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

 

二、实验内容

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

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

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

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

 

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

   1. 算法伪代码

步骤1: 加载iris数据集

步骤2: 划分数据集为训练集和测试集(留出法,1/3作为测试集)

步骤3: 初始化逻辑回归模型

步骤4: 使用训练集训练逻辑回归模型

步骤5: 使用五折交叉验证评估模型性能(准确度、精度、召回率和F1值)

步骤6: 使用测试集测试模型性能

步骤7: 输出训练和测试结果(准确率、精度、召回率和F1值)

   2. 算法主要代码

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

# 导入所需的库

from sklearn.datasets import load_iris  # 用于加载数据集

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  # 评估指标

 

# 加载iris数据集

iris = load_iris()

X, y = iris.data, iris.target

 

# 使用留出法将数据集划分为训练集和测试集,测试集占1/3

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

 

# 初始化逻辑回归模型,max_iter设置为200以确保收敛

logreg = LogisticRegression(max_iter=200)

 

# 使用训练集训练逻辑回归模型

logreg.fit(X_train, y_train)

 

# 使用五折交叉验证评估模型性能,这里我们关注的是准确度

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

 

# 在训练集上评估模型性能

accuracy = accuracy_score(y_train, logreg.predict(X_train))  # 准确率

precision = precision_score(y_train, logreg.predict(X_train), average='macro')  # 精度(查准率)

recall = recall_score(y_train, logreg.predict(X_train), average='macro')  # 召回率(查全率)

f1 = f1_score(y_train, logreg.predict(X_train), average='macro')  # F1

 

# 打印训练集的性能指标

print(f"交叉验证平均准确率: {cv_scores.mean():.2f} +/- {cv_scores.std():.2f}")

print(f"训练集准确率: {accuracy:.2f}")

print(f"训练集精度(查准率): {precision:.2f}")

print(f"训练集召回率(查全率): {recall:.2f}")

print(f"训练集F1: {f1:.2f}")

 

调用库方法(函数参数说明)

  • train_test_split(X, y, test_size=1/3, random_state=42): 划分数据集为训练集和测试集,test_size参数指定测试集的比例,random_state用于确保结果的可重复性。
  • LogisticRegression(max_iter=200): 初始化逻辑回归模型,max_iter参数指定最大迭代次数。
  • cross_val_score(model, X, y, cv=5, scoring='accuracy'): 进行交叉验证,cv参数指定折数,scoring参数指定评分标准。
  • accuracy_score(y_true, y_pred): 计算准确率,y_true为真实标签,y_pred为预测标签。
  • precision_score(y_true, y_pred, average='macro'): 计算精度,average参数指定平均方法。
  • recall_score(y_true, y_pred, average='macro'): 计算召回率,average参数指定平均方法。
  • f1_score(y_true, y_pred, average='macro'): 计算F1值,average参数指定平均方法。

 

 

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

 

 

四、实验结果分析

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

 

 

  1. 对比分析

训练集与测试集性能对比

准确率对比:比较模型在训练集和测试集上的准确率,检查是否有过拟合或欠拟合的现象。如果训练集的准确率远高于测试集,可能存在过拟合;如果测试集的准确率远高于训练集,可能存在数据泄露或模型欠拟合。

精度、召回率和F1值对比:同样,对比这些指标在训练集和测试集上的表现,分析模型在不同数据集上的稳定性和一致性。

交叉验证结果分析

稳定性:通过五折交叉验证得到的标准差可以衡量模型性能的稳定性。如果标准差较小,说明模型在不同训练集划分下的性能较为稳定;如果标准差较大,则模型性能可能对数据划分敏感。

参数调整的影响

如果在实验中调整了逻辑回归模型的参数(例如正则化强度、最大迭代次数等),可以对比不同参数设置下的性能,分析哪些参数对模型性能有显著影响。

不同分类阈值的影响

逻辑回归模型的分类阈值默认为0.5,但这个阈值是可以调整的。对比不同阈值下的性能指标,可以找到最优的分类阈值。

模型泛化能力

通过比较训练集和测试集的性能,可以评估模型的泛化能力。一个好的模型应该在训练集上有较高的准确率,同时在未见过的测试集上也能保持较好的性能。

数据不平衡的影响

如果数据集中的类别分布不均匀,需要分析这对模型性能的影响。可以通过调整类别权重或使用其他技术来处理数据不平衡问题,并对比处理前后的性能差异。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853173.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖Lets Encrypt证书申请

注意本文时效性:2024.9.23 引言 为了保证SSL证书的权威性和安全性,Lets Encrypt 会验证您对域名的控制权。 申请 Lets Encrypt 证书有以下的验证控制权的方式:Web验证:通过在http的有权威的目录下创建一个验证文件以验证对服务器的控制权 Dns验证:通过在 DNS Record 中添加…

《计算机基础与程序设计》第十二周学习总结

学期(如2024-2025-1) 学号(如:20241300) 《计算机基础与程序设计》第十二周学习总结 作业信息这个作业属于哪个课程 <班级的链接> 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接> 2024-2025-1计算机基础与程序设计第十二周作业)这个作…

读数据保护:工作负载的可恢复性14备份和恢复数据库

备份和恢复数据库1. 给采用传统方式交付的数据库制作备份 1.1. 某个数据库是新还是旧,跟该数据库是不是传统数据库没有必然的联系,真正的决定因素在于,这个数据库是不是运行在你所管理的服务器或虚拟机里1.1.1. 如果是,那就可以归入按照传统模型来交付的数据库1.1.2. 如果不…

2024北京多校联训游记

乡下人进城——开了眼了Day \(-\infty\) NOIP考的十分炸裂,一道题都没做出来,结果下来 \(40min\) 就切掉了第 \(2\) 题???这时 \(hfu\) 通知有意向的同学可以去参加在北京的多校联训。经过一番思想斗争后,还是决定去参加一下,毕竟技多不压身,且基础知识也整理的差不多了…

[CSP2020-J4] 直播获奖

题面 题目描述 NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 $w%$,即当前排名前 $w%$ 的选手的最低成绩就是即时的分数线。 更具体地,若当前已评出了 $p$ 个选手的成绩,则当前计划获奖人数为 $\max(1, \…

LLM大模型推理优化示例分析

Large Transformer Model Inference Optimization 人工智能芯片与自动驾驶

遥感全景锐化的内容自适应非局部卷积

遥感全景锐化的内容自适应非局部卷积目前,基于机器学习的遥感泛变方法发展迅速。然而,现有的pansharpening方法往往没有充分利用非局部空间中的区分区域信息,从而限制了方法的有效性,并导致冗余的学习参数。介绍了一种所谓的内容自适应非局部卷积(CANConv),这是一种专为…

渗透测试-前端加密分析之AES

本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密。前言 本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AE…

python内置函数permutations

what permutations是python的itertools模块的一个函数,可以用来求可迭代对象的全排列 itertools.permutations(iterable, r)iterable:可迭代对象 r:全排列的长度 return:tuple后面r的作用解释一下,加入iterable中元素有n个,r=m,就相当于先在n中选m个,再对m个进行全排列…

python内置函数map

what map是python提供的一个内置函数,用于对一个序列中每个元素,或者对多个序列中对应元素进行操作。 why 函数式编程范式的一种工具,可以代替一些循环操作。同时map操作在小数据100W即1e7的时候操作会比for循环和列表表达式快。 但是当继续增大数据量就会显出劣势,不过在处…

服务器信息

引子:作为信息收集篇的第一篇文章,本篇主要讲测试者在面对服务器时该收集什么样的信息,以及这些信息的收集方法。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 一、服务器信息引子:作为信息收集篇的第一篇文章,本篇主要讲测试者在面对…

01背包+多状态dp

01背包+多状态dp 前置知识 dp的四步法(绝对不是水字数):确定状态 确定答案 确定状态转移方程 确定初始状态和边界P7074 [CSP-J2020] 方格取数 题目中所给出的状态是这样的(图一):但是这样就会导致一个问题, \(i\) 值会访问空的地方,所以这里会有两种方案:左上角走到右…