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

news2024/12/23 5:44:11

在这里插入图片描述

前言

系列专栏:机器学习:高级应用与实践【项目实战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 sb

from 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 ras

import 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':
		continue

	filtered_columns = [col]
	for col1 in df.columns:
		if((col == col1) | (col == 'class')):
			continue

		val = df[col].corr(df[col1])

		if val > 0.7:
			# If the correlation between the two
			# features is more than 0.7 remove
			columns.remove(col1)
			continue
		else:
			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.coloradmin.cn/o/1631524.html

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

相关文章

Panoptic Domain Adaptive Mask R-CNN (PDAM) 论文总结

论文&#xff08;CVPR会议&#xff09;&#xff1a; Unsupervised Instance Segmentation in Microscopy Images via Panoptic Domain Adaptation and Task Re-weighting &#xff08;TMI期刊&#xff09;&#xff1a;PDAM: A Panoptic-Level Feature Alignment Framework for …

微软如何打造数字零售力航母系列科普03 - Mendix是谁?作为致力于企业低代码服务平台的领头羊,它解决了哪些问题?

一、Mendix 成立的背景 Mendix的成立是为了解决软件开发中最大的问题&#xff1a;业务和IT之间的脱节。这一挑战在各个行业和地区都很普遍&#xff0c;很简单&#xff1a;业务需求通常被描述为IT无法正确解释并转化为软件。业务和IT之间缺乏协作的原因是传统的代码将开发过程限…

[论文笔记]Language Modeling with Gated Convolutional Networks

引言 今天带来论文Language Modeling with Gated Convolutional Networks的笔记&#xff0c;该篇工作提出了GLU(Gated Linear Units&#xff0c;门控线性单元)。 注意该篇工作是2016年发表&#xff0c;是在Transformer论文发表之前。当时作者认为语言建模的主要方法是基于循环…

百度语音识别的springboot应用

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

qt-C++笔记之滑动条QSlider和QProgressBar进度条

qt-C笔记之滑动条QSlider和QProgressBar进度条 —— 2024-04-28 杭州 本例来自《Qt6 C开发指南》 文章目录 qt-C笔记之滑动条QSlider和QProgressBar进度条1.运行2.阅读笔记3.文件结构4.samp4_06.pro5.main.cpp6.widget.h7.widget.cpp8.widget.ui 1.运行 2.阅读笔记 3.文件结构…

ubuntu安装Anaconda安装及conda使用

一. 安装anaconda3详细教程 1、下载镜像 清华大学开源软件镜像站下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下拉到最低端选择Linux&#xff0c;选择最新版&#xff08;32/64位&#xff09;下载。这里我下载的是版本Anaconda3-4.3.30-Linux…

《微服务设计》读书笔记

此为阅读纽曼《微服务设计》一书后总结的读书笔记&#xff0c;点此处下载PDF文档。 一、微服务的概念 微服务&#xff08;或称微服务架构&#xff09;是一种云原生架构方法&#xff0c;其核心思想在于将单个应用拆分为众多 小型、松散耦合的服务&#xff0c;服务之间均通过网…

AI视频教程下载:构建一个ChatGPT股票配对交易机器人

ChatGPT及其后续版本GPT-4已经开始改变世界。人们对新机会感到兴奋&#xff0c;同时对我们社会可能受到的影响感到恐惧。这门课程结合了两个主题&#xff1a;AI和财务&#xff08;算法交易&#xff09;。 你将会学到的&#xff1a; 使用ChatGPT构建一个Python配对交易机器人 …

车载系统的 加减串器应用示意

overview 车载系统上使用加减串器来实现camera&#xff0c; led液晶显示屏等 图像数据的远距离传输&#xff0c;将原先在短距离传输视频信号的mipi csi&#xff0c;dsi 等的TX&#xff0c;RX中间&#xff0c;插入加减串器&#xff0c;实现长距离的可靠传输。 示意图如下 往往…

认清新形势 适应新变化 明确新要求 九河云召开渠道合作沙龙座谈

为推动“聚势、合作、共赢”主题沙龙高质量开展&#xff0c;牢牢把握“守初心、担责任&#xff0c;找差距、抓落实”的总要求&#xff0c;按照九河有关部署和集团实施方案有关安排&#xff0c;连日来&#xff0c;九河云领导班子成员分别讲授专题培训&#xff0c;讲本心传递精神…

最新发布:中国移动建成全球运营商最大单体智算中心

4月28日&#xff0c;中国移动正式对外发布全球运营商最大单体智算中心——中国移动智算中心&#xff08;呼和浩特&#xff09;&#xff0c;目前已投产使用。 该智算中心填补了我国人工智能广泛应用所需算力的巨大缺口&#xff0c;快速赋能交通、医疗、教育、能源、金融等行业大…

图神经网络入门与实战:从图嵌入(GE)到图神经网络(GNN)

目录 一. 图的基本概念(Graph) 1.1 图的定义 1.2 图表示的基本概念 1.3 图的应用场景 1.4 图的分类 二. 图嵌入(Graph Embedding) 2.1 图嵌入的基本概念 2.2 图嵌入方法分类 2.3 图嵌入和图神经网络的区别 三. 图神经网络(Graph Neural Network) 3.1 图神经网络的基…

挑战一周完成Vue3项目Day2:路由配置+登录模块+layout组件+路由鉴权

一、路由配置 经过分析&#xff0c;项目一共需要4个一级路由&#xff1a;登录&#xff08;login&#xff09;、主页&#xff08;home&#xff09;、404、任意路由&#xff08;重定向到404&#xff09;。 1、安装路由插件 pnpm install vue-router 2、创建路由组件 在src目…

237基于matlab的偏振态仿真

基于matlab的偏振态仿真&#xff0c;不同偏振态下光强计算。本仿真软件可以仿真波片对偏振光的相位调制过程。用户可以通过改变波片的类型&#xff0c;波片长轴与 X 轴的夹角&#xff0c;起偏器透光与 X 轴的夹角&#xff0c;检偏器透光轴与 X 轴的夹角等参数&#xff0c;来观察…

服务器部署教程下(线下、线上部署)

1、线下部署 1.1 前端 首先将拉代码下来&#xff0c;cd到想启动项目的目录下(控制台 cd 文件夹名称) 比如 blog-v3(cd blog-v3)要在存在package.json文件的目录才能进行依赖下载、项目启动操作 检查一下自己的node版本是否为18级以上(node -v) 博客前台blog-v3使用vite4开发…

【介绍下IDM的实用功能】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

五•一颂|广州流辰信息致敬每一个辛勤的劳动者,祝大家五一快乐!

时光飞逝&#xff0c;一年一度的五一国际劳动节如期而至。在这个竞争激烈的社会中&#xff0c;拥有勤劳品质的人儿总会在适当的时机迎来人生的高光时刻。或许你的人生经历非常丰富&#xff0c;或顺利&#xff0c;或坎坷&#xff0c;不管是哪种状态&#xff0c;勤劳的人应该是这…

大核注意力 LKA | Visual Attention Network

论文名称&#xff1a;《Visual Attention Network》 论文地址&#xff1a;2202.09741 (arxiv.org) 尽管最初是为自然语言处理任务而设计的&#xff0c;但自注意力机制最近在各个计算机视觉领域迅速崭露头角。然而&#xff0c;图像的二维特性给计算机视觉中的自注意力应用带来了…

Polyscope,一款简洁的三维可视化工具!

Polyscope是用于三维数据&#xff08;如meshes、point clouds&#xff09;的可视化工具&#xff0c;通过编程或动态GUI完成&#xff1b;支持C和Python编程&#xff1b;追求“一行代码”为数据提供有用的可视界面展示。 下面来简单介绍Polyscope使用。 Polyscope效果 Point Cl…

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E)&#xff0c;生成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。 设R为G的所有生成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称…