机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病

在这里插入图片描述

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控递归单元、大型语言模型和强化学习模型

帕金森病是一种进行性疾病,会影响神经系统和由神经控制的身体部位,症状看起来也不太明显。僵硬、震颤和运动减慢可能是帕金森病的征兆。

但是,由于没有诊断这种疾病的诊断方法,因此无法确定一个人是否患有帕金森氏病。但是,如果我们使用机器学习来预测一个人是否患有帕金森氏病,那会怎么样呢?这正是我们将在本文中讨论的内容。

目录

  • 1. 相关库和数据集
    • 1.1 首先让我们检查数据集的大小
    • 1.2 数据清理
    • 1.3 卡方检验
    • 1.4 数据检验
  • 2. 模型训练
    • 2.1 数据分离(训练和测试)
    • 2.2 数据建模(LogisticRegression、XGBClassifier、SVC)
  • 3. 模型评估
    • 3.1 逻辑回归
    • 3.2 支持向量机
  • 4. 结论

1. 相关库和数据集

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
  • XGBoost – 包含eXtreme Gradient Boosting 机器学习算法,能帮助我们实现高精度预测。
  • Imblearn – 此模块包含一个函数,可用于处理与数据不平衡相关的问题。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sbfrom imblearn.over_sampling import RandomOverSampler
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from sklearn.feature_selection import SelectKBest, chi2
from tqdm.notebook import tqdm
from sklearn import metrics
from sklearn.svm import SVC
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score as rasimport warnings
warnings.filterwarnings('ignore')

我们将在此处使用的UCI机器学习存储库中的数据集,包括755列和每位患者的三个观察值。这些列中的值是其他一些诊断的一部分,这些诊断通常用于捕获健康人与受影响的人之间的差异。现在,让我们将数据集加载到Pandas的数据框中。

df = pd.read_csv('pd_speech_features.csv')

1.1 首先让我们检查数据集的大小

df.shape

输出

(756, 755)

由于特征空间包含 755 列,因此数据集的维度非常高。让我们检查数据集的哪一列包含哪种类型的数据。

df.info()

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 756 entries, 0 to 755
Columns: 755 entries, id to class
dtypes: float64(749), int64(6)
memory usage: 4.4 MB

根据上述有关每列数据的信息,我们可以观察到没有空值。

df.describe().T

输出
describe

1.2 数据清理

从主要来源获得的数据被称为原始数据,需要大量的预处理,然后才能从中得出任何结论或对其进行一些建模。这些预处理步骤称为数据清理,它包括异常值删除、空值插补以及删除数据输入中的任何类型的差异。

df = df.groupby('id').mean().reset_index()
df.drop('id', axis=1, inplace=True)

这些特征只表明它们是相互衍生出来的,或者我们可以说它们之间的相关性很高。在下面的代码块中,实现了一个函数,可以删除目标列之外的高度相关特征。

columns = list(df.columns)
for col in columns:if col == 'class':continuefiltered_columns = [col]for col1 in df.columns:if((col == col1) | (col == 'class')):continueval = df[col].corr(df[col1])if val > 0.7:# If the correlation between the two# features is more than 0.7 removecolumns.remove(col1)continueelse:filtered_columns.append(col1)# After each iteration filter out the columns# which are not highly correlated features.df = df[filtered_columns]
df.shape

输出

(252, 287)

1.3 卡方检验

因此,从755列的特征空间,我们将其减少到287列的特征空间。但是,由于特征数量仍然超过示例或数据点的数量,所以这个数字仍然太高。这一说法背后的原因与维度诅咒问题背后的原因相同,因为随着特征空间的增长,在数据集上进行泛化所需的示例数量变得困难,模型的性能也会降低。

因此,让我们通过使用卡方检验将特征空间减少到30。

X = df.drop('class', axis=1)
X_norm = MinMaxScaler().fit_transform(X)
selector = SelectKBest(chi2, k=30)
selector.fit(X_norm, df['class'])
filtered_columns = selector.get_support()
filtered_data = X.loc[:, filtered_columns]
filtered_data['class'] = df['class']
df = filtered_data
df.shape

输出

(252, 31)

1.4 数据检验

由于数据集的维度现在处于控制之下,让我们检查一下数据集是否对两个类都是平衡的。

x = df['class'].value_counts()
plt.pie(x.values,labels = x.index,autopct='%1.1f%%')
plt.show()

输出
在这里插入图片描述
可以看出数据不平衡。我们必须解决这个问题,否则在这个数据集上训练的模型将更难预测阳性类别,这是我们在这里的主要目标。

2. 模型训练

2.1 数据分离(训练和测试)

现在我们将分离特征和目标变量,并将其分为训练数据和测试数据,通过使用这些数据,我们将选择在验证数据上表现最佳的模型。

features = df.drop('class', axis=1)
target = df['class']X_train, X_val,\Y_train, Y_val = train_test_split(features, target,test_size=0.2,random_state=10)
X_train.shape, X_val.shape

输出

((201, 30), (51, 30))

通过在少数类上使用过采样方法处理数据不平衡问题。

# As the data was highly imbalanced we will balance
# it by adding repetitive rows of minority class.
ros = RandomOverSampler(sampling_strategy='minority',random_state=0)
X, Y = ros.fit_resample(X_train, Y_train)
X.shape, Y.shape

输出

((302, 30), (302,))

2.2 数据建模(LogisticRegression、XGBClassifier、SVC)

数据集已经在数据清理步骤中进行了标准化,我们可以直接训练一些最先进的机器学习模型,并比较它们与我们的数据是否更匹配。

models = [LogisticRegression(), XGBClassifier(), SVC(kernel='rbf', probability=True)]for i in range(len(models)):models[i].fit(X, Y)print(f'{models[i]} : ')train_preds = models[i].predict_proba(X)[:, 1]print('Training Accuracy : ', ras(Y, train_preds))val_preds = models[i].predict_proba(X_val)[:, 1]print('Validation Accuracy : ', ras(Y_val, val_preds))print()

在这里插入图片描述

3. 模型评估

从上述准确度来看,我们可以说逻辑回归和SVC在验证数据上的表现更好,验证数据和训练数据之间的差异更小。让我们使用逻辑回归和SVC模型为验证数据绘制混淆矩阵。

3.1 逻辑回归

metrics.ConfusionMatrixDisplay.from_estimator(models[0],X_val, Y_val)
plt.title('Confusion matrix for the validation data')
plt.show()
print(metrics.classification_report(Y_val, models[0].predict(X_val)))

在这里插入图片描述

3.2 支持向量机

metrics.ConfusionMatrixDisplay.from_estimator(models[2],X_val, Y_val)
plt.title('Confusion matrix for the validation data')
plt.show()
print(metrics.classification_report(Y_val, models[2].predict(X_val)))

在这里插入图片描述

4. 结论

我们创建的机器学习模型的准确率约为75%至80%。对于没有诊断方法的疾病,机器学习模型能够预测一个人是否患有帕金森氏症。这就是机器学习的力量,通过使用它,许多现实世界的问题正在得到解决。

完整源码:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病【源码】✨︎

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

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

相关文章

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

科研学习|论文解读——CVPR 2021 人脸造假检测(论文合集)

随着图像合成技术的成熟&#xff0c;利用一张人脸照片合成假视频/不良视频现象越来越多&#xff0c;严重侵犯个人隐私、妨碍司法公正&#xff0c;所以人脸造假检测越来越重要&#xff0c;学术界的论文也越来越多。 一、研究1 1.1 论文题目 Multi-attentional Deepfake Detecti…

自学Python爬虫js逆向(二)chrome浏览器开发者工具的使用

js逆向中很多工作需要使用浏览器中的开发者工具&#xff0c;所以这里以chrome为例&#xff0c;先把开发者工具的使用总结一下&#xff0c;后面用到的时候可以回来查询。 Google Chrome浏览器的开发者工具是前端开发者的利器&#xff0c;它不仅提供了丰富的功能用于开发、调试和…

什么是中间件?中间件有哪些?

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…

排序算法(2)快排

交换排序 思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 一、冒泡排序 public static…

uniapp:K线图,支持H5,APP

使用KLineChart完成K线图制作,完成效果: 1、安装KLineChart npm install klinecharts2、页面中使用 <template><view class="index"><!-- 上方选项卡 --><view class="kline-tabs"><view :style="{color: current==ite…

stm32单片机开发四、USART

串口的空闲状态时高电平&#xff0c;起始位是低电平&#xff0c;来打破空闲状态的高电平 必须要有停止位&#xff0c;停止位一般为一位高电平 串口常说的数据为8N1&#xff0c;其实就是8个数据位&#xff08;固定的&#xff09;&#xff0c;N就是none&#xff0c;也就是0个校验…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答&#xff1a;MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

618科技嘉年华!五款极致科技产品,开启智能生活新篇章!

准备好迎接一年一度的618了吗&#xff1f;这不仅仅是一场购物的狂欢&#xff0c;更是一次科技的盛宴&#xff0c;一次智能生活的全新启航。今年&#xff0c;我们将带来五款令人瞩目的极致科技产品&#xff0c;它们将彻底颠覆你对智能生活的认知。从娱乐到工作&#xff0c;这些产…

百度语音识别的springboot应用

1、pom依赖 <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.18</version> </dependency> 2、测试的demo 创建语音识别应用 百度智能云-管理中心 (baidu.com) 代码中要…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式&#xff0c;广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作&#xff0c;使得原像素值发生变化&#xff0c;进而使得图像内容发生变化&#xff0c;达到保护图像内容的目的。 该加密方法是以图像…

基于python-flask技术的社区信息交流平台【数据库+15000文档】

预览 介绍 系统只需使用者通过电脑浏览器即可实现系统的访问和操作的WEB模式的信息化系统。为了保证系统数据的准确性、安全性的数据存储&#xff0c;系统应用MySQL数据库进行系统数据存储服务。根据对社区工作的深入调研和对社区居民的走访调查&#xff0c;详细分析整体系统的…

短信验证码绕过漏洞(一)

短信验证码绕过漏洞 0x01原理&#xff1a; 服务器端返回的相关参数作为最终登录凭证&#xff0c;导致可绕过登录限制。 危害&#xff1a;在相关业务中危害也不同&#xff0c;如找回密码&#xff0c;注册&#xff0c;电话换绑等地方即可形成高危漏洞&#xff0c;如果是一些普…

【VS+QT】visual studio 2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 打开visual studio 2022&#xff0c;选择菜单栏中扩展->管理扩展 ,然后直接在vs插件市场搜索Qt Visual Studio Tools就行。 安装的时候根据提示&#xff0c;关闭…

YOLov5 + Gradio搭建简单的Web GUI

写在前面&#xff1a;当我们将模型训练出来了&#xff0c;此时就需要做UI界面给别人展示了。python提供的Gradio可以快速的搭建web页面。生成本地网址和公网网址&#xff0c;方面自己测试和用户测试。 一、安装 Gradio介绍 Gradio是一个开源的python库&#xff0c;用于构建机…

react完整项目搭建的思路

react完整项目搭建的思路 react完整项目搭建的思路1.使用creacte-react-app初始化项目2.安装所需插件:路由、网络、样式、组件库3.reactjs目录结构组织4. 配置路径别名4.配置路由5.网络配置,对axios进行封装》获取当前环境变量 6.配置代理解决跨域7.配置使用iconfont8.状态管理…

浅析扩散模型与图像生成【应用篇】(十七)——LDM

17. High-Resolution Image Synthesis with Latent Diffusion Models 该文首次提出在潜在特征空间中的扩散模型LDM&#xff0c;也是大名鼎鼎的Stable Diffusion&#xff08;SD&#xff09;模型的基础。不同于之前的扩散模型直接在图像维度上进行扩散和去噪&#xff0c;LDM首先训…

C++拷贝构造函数的合成

默认构造函数和拷贝构造函数在必要的时候才由编译期合成出来 文章目录 拷贝构造函数编译器合成拷贝构造函数的四种情况情况一 一个类有一个带有拷贝构造函数的类对象成员变量情况二 派生类的基类有一个拷贝构造函数类声明了一个或多个虚函数情况四 类派生自一个继承串联且有一个…

JUC-并发编程19-定时任务定时线程池-ScheduledThreadPoolExecutor

1、结构图 2、初识 ScheduledThreadPoolExecutor用来处理延时任务或定时任务。 流程如下&#xff1a; 2.1 定时任务分为四种 如下&#xff1a; 未来执行一次的任务&#xff0c;无返回值&#xff1b; 未来执行一次的任务&#xff0c;有返回值&#xff1b; 未来按固定频率重复…

安川YASKAWA机器人FS100控制箱维修全攻略

本文将一起探讨安川机器人控制箱维修和YASKAWA机械手FS100控制柜故障&#xff0c;从故障诊断到维修技巧。注意&#xff0c;在安川机械臂控制器FS100维修过程中&#xff0c;遇到复杂的问题&#xff0c;不要犹豫&#xff0c;及时联系子锐机器人&#xff0c;让您的机器人重获新生&…