深度学习与大模型第4课:使用多种模型在Pima印度糖尿病数据集上的分类效果评估

news/2024/9/17 0:43:32/ 标签: 深度学习, 分类, 人工智能

文章目录

    • 技术博客:使用多种模型在Pima印度糖尿病数据集上的分类效果评估
      • 数据集介绍
      • 数据预处理
      • 模型一:逻辑斯谛回归(Logistic Regression)
      • 模型二:支持向量机(SVM)
      • 模型三:决策树(Decision Tree)
      • 结果总结
      • 小结

技术博客:使用多种模型在Pima印度糖尿病数据集上的分类效果评估

在机器学习中,选择适合的数据处理和模型是影响结果的重要因素。本文以Pima印度糖尿病数据集为例,通过逻辑斯谛回归(Logistic Regression)、支持向量机(SVM)、以及决策树(Decision Tree)三个模型,对数据进行分类,并通过网格搜索(GridSearchCV)优化模型参数,评估每个模型的表现。

数据集介绍

Pima Indians Diabetes 数据集包含了768名女性患者的医疗记录,每条记录包含8个特征,包括怀孕次数、血糖、血压等,目标值为是否患有糖尿病(Outcome: 0 或 1)。

数据预处理

首先,我们使用pandas读取数据,并使用自定义的ProcessData类进行数据划分与标准化:

class ProcessData(TransformerMixin):def __init__(self, label, shuffle=False):self.label = labelself.shuffle = shuffledef transform(self, X, y=None):y_data = X[self.label]X_data = X.drop(self.label, axis=1)if self.shuffle:X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, shuffle=True, stratify=y_data, random_state=42)else:X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42)stdScaler = StandardScaler().fit(X_train)return stdScaler.transform(X_train), y_train, stdScaler.transform(X_test), y_testproData = ProcessData(label='Outcome', shuffle=True)
X_train, y_train, X_test, y_test = proData.fit_transform(df)

我们将数据集划分为训练集和测试集,并对特征进行了标准化处理。

模型一:逻辑斯谛回归(Logistic Regression)

逻辑斯谛回归是一种广泛使用的线性分类算法。我们首先通过交叉验证(cross-validation)评估原始模型的表现,接着通过网格搜索优化模型的超参数。

lr_model = LogisticRegression()
cv_score = cross_val_score(lr_model, X_train, y_train, scoring='f1', cv=10)
print('cross validation score of raw model {}'.format(cv_score))# 网格搜索
c_range=[0.001, 0.01, 0.1, 1.0]
solvers = ['liblinear', 'lbfgs', 'newton-cg', 'sag']
max_iters=[80, 100, 150, 200, 300]
tuned_parameters= dict(solver=solvers, C=c_range, max_iter=max_iters)
grid= GridSearchCV(lr_model, tuned_parameters, cv=10, scoring='f1')
grid.fit(X_train,y_train)

结果

  • 最优参数:{'C': 0.001, 'max_iter': 80, 'solver': 'liblinear'}
  • 训练集 F1 分数:0.6587
  • 测试集 F1 分数:0.5656

模型二:支持向量机(SVM)

SVM是一种强大的分类算法,适用于线性和非线性数据。我们采用线性核函数并使用网格搜索优化正则化参数C和核函数参数gamma。

svc_model = SVC()
c_range = [0.001, 0.01, 0.1, 1.0, 10, 100]
kernels = ['linear', 'rbf', 'poly']
gamma_range = ['scale', 'auto']
tuned_parameters = dict(C=c_range, kernel=kernels, gamma=gamma_range)
grid = GridSearchCV(svc_model, tuned_parameters, cv=10, scoring='f1')
grid.fit(X_train, y_train)

结果

  • 最优参数:{'C': 1.0, 'gamma': 'scale', 'kernel': 'linear'}
  • 训练集 F1 分数:0.6632
  • 测试集 F1 分数:0.5656

模型三:决策树(Decision Tree)

决策树是一种非参数分类模型,适合处理较为复杂的数据。我们通过网格搜索优化其分割准则、深度和叶子节点的最小样本数等参数。

dt_model = DecisionTreeClassifier()
criterion = ['gini', 'entropy']
splitter = ['best', 'random']
max_depth = [None, 10, 20, 30, 50]
min_samples_split = [2, 10, 20]
min_samples_leaf = [1, 5, 10]
tuned_parameters = dict(criterion=criterion, splitter=splitter, max_depth=max_depth, min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf)
grid = GridSearchCV(dt_model, tuned_parameters, cv=10, scoring='f1')
grid.fit(X_train, y_train)

结果

  • 最优参数:{'criterion': 'gini', 'max_depth': 10, 'min_samples_leaf': 10, 'min_samples_split': 2, 'splitter': 'random'}
  • 训练集 F1 分数:0.6702
  • 测试集 F1 分数:0.5053

结果总结

  • 逻辑斯谛回归:表现均衡,测试集F1分数略高于其他模型,适合应用于特征较为线性的任务。
  • 支持向量机:尽管在训练集上表现良好,但在测试集上泛化能力有所欠缺。
  • 决策树:对于非线性数据,决策树在训练集表现出色,但在测试集上的表现略逊。

通过比较可得出,在Pima印度糖尿病数据集上,逻辑斯谛回归模型经过优化后具有较为优越的泛化能力,而SVM和决策树模型在训练时虽然表现优秀,但在测试集上的表现一般,可能存在过拟合的现象。

小结

本次分析展示了如何使用网格搜索优化机器学习模型的超参数,并结合交叉验证(cross-validation)和F1分数进行评估。在实际应用中,选择合适的模型及其参数是至关重要的,只有经过充分调优才能获得最佳效果。


http://www.ppmy.cn/news/1522627.html

相关文章

1、正则表达式

1、正则表达式是一种用于描述文本模式的工具。它是由字符和特殊符号组成的字符串,描述了模式的重复或者多个字符,于是就可以按照某种模式匹配一系列有相似特征的字符串。它主要的作用是将文本用某种可被计算机识别的模式表现出来,为高级的文本…

Helm Deploy Online Rancher v2.9.1

文章目录 准备安装查看下载 准备 $ kubectl get node NAME STATUS ROLES AGE VERSION kube-master01 Ready control-plane 19d v1.29.5 kube-node01 Ready <none> 19d v1.29.5 kube-node02 Ready <none&…

Tekton简介,安装和构建最简单ci/cd

简介 Tekton是一种基于k8的支持CI/CD的operator。 说到持续集成&#xff0c;我们比较熟悉的有jenkins&#xff0c;gitlab ci等&#xff0c;但只有Tekton是云原生的。 既然Tekton是一种operator&#xff0c;那就必须了解它的CRD&#xff0c;然后我们定义CR&#xff0c;让Tekt…

WebAPI (一)DOM树、DOM对象,操作元素样式(style className,classList)。表单元素属性。自定义属性。间歇函数定时器

文章目录 Web API基本认知一、 变量声明二、 DOM1. DOM 树2. DOM对象3. 获取DOM对象(1)、选择匹配的第一个元素(2)、选择匹配多个元素 三、 操作元素1. 操作元素内容2. 操作元素属性(1)、常用属性&#xff08;href之类的&#xff09;(2)、通过style属性操作CSS(3)、通过类名(cl…

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、…

golang hertz框架入门

两种模式新建项目 1、手动新建项目 2、使用hz工具新建项目 一、手动创建项目&#xff0c;并拉取框架 1、新建项目目录 hertz_demo_w 2、在项目跟目录新建main.go 文件 package mainimport ("context""github.com/cloudwego/hertz/pkg/app""github.…

API安全 | 发现API的5个小tips

在安全测试目标时&#xff0c;最有趣的测试部分是它的 API。API 是动态的&#xff0c;它们比应用程序的其他部分更新得更频繁&#xff0c;并且负责许多后端繁重的工作。在现代应用程序中&#xff0c;我们通常会看到 REST API&#xff0c;但也会看到其他形式&#xff0c;例如 Gr…

C# 使用国密SM4加密解密

首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09;&#xff0c;支持.NET 4,.NET Standard 2.0 目录 使用BouncyCastle指定填充方案 零填充&#xff08;Zero Padding&#xff09; PKCS7填充&…

MariaDB基本知识汇总

/* MariaDB 1、视图 2、临时表 3、自定义函数 4、存储过程 5、触发器 6、游标 7、变量声明与赋值 8、常用函数&#xff08;日期格式&#xff0c;Guid&#xff0c;判断&#xff0c;循环&#xff0c;XML格式操作&#xff09; 9、动态执行SQL 语句 10、开启执行计划 11、创建登录M…

AI智能分析/智慧安防EasyCVR视频汇聚平台新版本(V3.6.0)播放鉴权与播放限制时长的区别介绍

随着科技的飞速发展&#xff0c;视频技术已成为现代社会不可或缺的一部分&#xff0c;广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。EasyCVR视频汇聚平台作为视频技术的佼佼者&#xff0c;不断推陈出新&#xff0c;通过功能更新迭代&#xff0c;为用户提供更加…

什么是视频缓存服务器,它有哪些作用?

视频缓存服务器通常拥有大容量的存储空间和高速的读写能力&#xff0c;它通过缓存(即临时存储)用户经常访问的视频内容&#xff0c;来优化内容的分发过程。这种服务器通常部署在网络中的关键位置&#xff0c;如靠近用户接入点的位置&#xff0c;以降低用户访问视频内容时的网络…

rtsp服务器逻辑

定时器逻辑&#xff1a;比如H264文件是每隔40ms发送一帧数据。aac文件每隔23ms发送一个音频帧数据。 在sink的子类中有aac和h264的sink&#xff0c;在两个子类的构造函数中需要添加它们各自的触发时间。调用的函数时runEvery()&#xff0c;将这两个触发时间设置到了TimerManag…

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么&#xff1f; HTML是什么&#xff1f; 如何运行HTML文件&#xff1f; 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关 项目合作管理相关 后话 前…

数据结构之堆的创建

1、堆的概念及结构 1.1堆的概念 如果有一个关键码的集合K{k0,k1,k2,…,kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足ki<k2i1且ki<k2i2&#xff08;或满足ki>k2i1且ki>k2i2&#xff09;&#xff0c;其中i0…

Vue2项目搭建:Vue2.7+Vite4+Pinia+TailwindCSS+Prettier+ESLint

目前 create-vue 和 Vite 都不提供 Vue2 项目的搭建&#xff0c;不想用 Vue CLI 和 webpack&#xff0c;于是就打算从 0 搭建一个工程化项目&#xff0c;支持组合式 API (Composition API) 写法&#xff0c;没有使用 TypeScript&#xff0c;有朋友需要的话我可以再完善一下。 N…

结构体小知识

目录 前言1.结构体数组1.1结构体数组理解1.2结构体数组知识运用1.3 -> 操作符 2. 知识拓展 前言 本期blog是对上一期指针知识的知识补充&#xff0c;如果各位大佬感兴趣的话&#xff0c;可以结合起来一起看&#xff01; 1.结构体数组 1.1结构体数组理解 结构体数组在本…

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码&#xff08;one-hot encoding&#xff09;张量的函数。独热编码是一种常用的编码方式&#xff0c;特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 tor…

notepad++软件介绍(含安装包)

Notepad 是一款开源的文本编辑器&#xff0c;主要用于编程和代码编辑。它是一个功能强大的替代品&#xff0c;常常被用来替代 Windows 系统自带的记事本。 Notepad win系统免费下载地址 以下是 Notepad 的一些主要特点和功能&#xff1a; 多语言支持&#xff1a;Notepad 支持多…

Kafka【八】如何保证消息发送的可靠性、重复性、有序性

【1】消息发送的可靠性保证 对于生产者发送的数据&#xff0c;我们有的时候是不关心数据是否已经发送成功的&#xff0c;我们只要发送就可以了。在这种场景中&#xff0c;消息可能会因为某些故障或问题导致丢失&#xff0c;我们将这种情况称之为消息不可靠。虽然消息数据可能会…

proxy代理解决vue中跨域问题

vue.config.js module.exports {...// webpack-dev-server 相关配置devServer: {host: 0.0.0.0,port: port,open: true,proxy: {/api: {target: https://vfadmin.insistence.tech/prod-api,changeOrigin: true,pathRewrite: {//[^ process.env.VUE_APP_BASE_API]: ^/api: / …