【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估

《------往期经典推荐------》

一、【100个深度学习实战项目】【链接】,持续更新~~

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 1.原始数据分析
    • 1.1 查看数据基本信息
    • 1.2 绘图查看数据分布
  • 2.数据预处理
    • 2.1 数据特征编码与on-hot处理
  • 3.模型训练与调优
    • 3.1 数据划分
    • 3.2 模型训练调优
    • 3.3 模型评估

1.原始数据分析

1.1 查看数据基本信息

#import libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#Load Data
data = pd.read_csv('/kaggle/input/brain-tumor-dataset/brain_tumor_dataset.csv')
#insights from data
data.head()
Tumor TypeLocationSize (cm)GradePatient AgeGender
0OligodendrogliomaOccipital Lobe9.23I48Female
1EpendymomaOccipital Lobe0.87II47Male
2MeningiomaOccipital Lobe2.33II12Female
3EpendymomaOccipital Lobe1.45III38Female
4EpendymomaBrainstem6.45I35Female
data.shape
(1000, 6)

脑肿瘤的类型查看,共5种。

data['Tumor Type'].unique()
array(['Oligodendroglioma', 'Ependymoma', 'Meningioma', 'Astrocytoma','Glioblastoma'], dtype=object)
data.describe()
Size (cm)Patient Age
count1000.0000001000.000000
mean5.22150043.519000
std2.82731825.005818
min0.5100001.000000
25%2.76000022.000000
50%5.26500043.000000
75%7.69250065.000000
max10.00000089.000000
#Percentage of missing values in the dataset
missing_percentage = (data.isnull().sum() / len(data)) * 100
print(missing_percentage)
Tumor Type     0.0
Location       0.0
Size (cm)      0.0
Grade          0.0
Patient Age    0.0
Gender         0.0
dtype: float64

没有缺失数据

1.2 绘图查看数据分布

import seaborn as snsplt.figure(figsize=(10, 6))
sns.histplot(data['Patient Age'], bins=10, kde=True, color='skyblue')
plt.title('Distribution of Patient Ages')
plt.xlabel('Age')
plt.ylabel('Count')
plt.grid(True)
plt.show()

在这里插入图片描述

plt.figure(figsize=(10, 6))
sns.boxplot(x='Tumor Type', y='Size (cm)', data=data, palette='pastel')
plt.title('Tumor Sizes by Type')
plt.xticks(rotation=45)
plt.xlabel('Tumor Type')
plt.ylabel('Size (cm)')
plt.grid(True)
plt.show()

在这里插入图片描述


plt.figure(figsize=(8, 6))
sns.countplot(x='Tumor Type', data=data, palette='Set3')
plt.title('Count of Tumor Types')
plt.xlabel('Tumor Type')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()

在这里插入图片描述


plt.figure(figsize=(10, 6))
sns.scatterplot(x='Size (cm)', y='Patient Age', hue='Tumor Type', data=data, palette='Set2', s=100)
plt.title('Tumor Sizes vs. Patient Ages')
plt.xlabel('Size (cm)')
plt.ylabel('Patient Age')
plt.grid(True)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()


在这里插入图片描述

location_counts = data['Location'].value_counts()
plt.figure(figsize=(8, 8))
plt.pie(location_counts, labels=location_counts.index, autopct='%1.1f%%', colors=sns.color_palette('pastel'))
plt.title('Distribution of Tumor Locations')
plt.axis('equal')
plt.show()

在这里插入图片描述

2.数据预处理

2.1 数据特征编码与on-hot处理

#Data Preprocessing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
import pandas as pddata['Gender'] = LabelEncoder().fit_transform(data['Gender'])  # Encode Gender (0 for Female, 1 for Male)
data['Location'] = LabelEncoder().fit_transform(data['Location'])  # Encode Location
data['Grade'] = LabelEncoder().fit_transform(data['Grade'])data['Tumor Type'] = LabelEncoder().fit_transform(data['Tumor Type'])  # Encode Tumor Typecolumns = ['Gender','Location','Grade']
enc = OneHotEncoder()
# 将['Gender','Location','Grade']这3列进行独热编码
new_data = enc.fit_transform(data[columns]).toarray()
new_data.shape
(1000, 12)
data.head()
Tumor TypeLocationSize (cm)GradePatient AgeGender
0439.230480
1130.871471
2332.331120
3131.452380
4106.450350
from sklearn.preprocessing import StandardScaler
# 1、实例化一个转换器类
transfer = StandardScaler()
# 2、调用fit_transform
data[['Size (cm)','Patient Age']] = transfer.fit_transform(data[['Size (cm)','Patient Age']])
old_data = data[['Tumor Type','Size (cm)','Patient Age']]
old_data.head()
one_hot_data = pd.DataFrame(new_data)
one_hot_data.head()
01234567891011
01.00.00.00.00.01.00.00.01.00.00.00.0
10.01.00.00.00.01.00.00.00.01.00.00.0
21.00.00.00.00.01.00.00.00.01.00.00.0
31.00.00.00.00.01.00.00.00.00.01.00.0
41.00.01.00.00.00.00.00.01.00.00.00.0
final_data =pd.concat([old_data, one_hot_data], axis=1)
final_data.head()
Tumor TypeSize (cm)Patient Age01234567891011
041.4184840.1792881.00.00.00.00.01.00.00.01.00.00.00.0
11-1.5398610.1392770.01.00.00.00.01.00.00.00.01.00.00.0
23-1.023212-1.2610971.00.00.00.00.01.00.00.00.01.00.00.0
31-1.334617-0.2208191.00.00.00.00.01.00.00.00.00.01.00.0
410.434728-0.3408511.00.01.00.00.00.00.00.01.00.00.00.0
final_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 15 columns):#   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  0   Tumor Type   1000 non-null   int64  1   Size (cm)    1000 non-null   float642   Patient Age  1000 non-null   float643   0            1000 non-null   float644   1            1000 non-null   float645   2            1000 non-null   float646   3            1000 non-null   float647   4            1000 non-null   float648   5            1000 non-null   float649   6            1000 non-null   float6410  7            1000 non-null   float6411  8            1000 non-null   float6412  9            1000 non-null   float6413  10           1000 non-null   float6414  11           1000 non-null   float64
dtypes: float64(14), int64(1)
memory usage: 117.3 KB

3.模型训练与调优

3.1 数据划分

# Defining features and target
X = final_data.iloc[:,1:].values
y = final_data['Tumor Type'].values  # Example target variable# Splitting data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train.shape
(800, 14)

3.2 模型训练调优

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCVparam_grid = {'C': [0.1, 1, 10, 100],'kernel': ['linear', 'poly', 'rbf', 'sigmoid'],'degree': [3, 5]  # 仅对多项式核有效
}
grid_search = GridSearchCV(SVC(random_state=42), param_grid, cv=5, n_jobs=-1)
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_
print("Best Parameters from Grid Search:")
print(best_params)
Best Parameters from Grid Search:
{'C': 0.1, 'degree': 3, 'kernel': 'linear'}

3.3 模型评估

best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
print("Best Model Classification Report:")
print(classification_report(y_test, y_pred))
# Print Confusion Matrix
print(confusion_matrix(y_test, y_pred))

好了,这篇文章就介绍到这里,如果对你有帮助,感谢点赞关注!

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

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

相关文章

苹果电脑维护工具:CleanMyMac X让你的Mac焕发新生!

在我们的数字生活中&#xff0c;苹果电脑&#xff08;Mac&#xff09;已成为不可或缺的一部分&#xff0c;无论是为工作披星戴月&#xff0c;还是为娱乐畅游云端。但是&#xff0c;就像任何长时间运行的机器一样&#xff0c;Mac也可能会因为积累的文件和不必要的数据而开始变慢…

Linux云计算 |【第二阶段】NETWORK-DAY4

主要内容&#xff1a; NAT 原理与配置&#xff08;私有IP地址、静态NAT转换、Easy IP&#xff09;、VRRP解析&#xff08;主路由器、备份路由器、虚拟路由器、优先级&#xff09; 一、NAT概述 NAT 网络地址转换&#xff08;Network Address Translation&#xff09;是一种网络…

NLP从零开始------9文本进阶处理之文本相似度计算

1.文本相似度计算简介 在自然语言处理中&#xff0c;经常会涉及度量两个文本相似度的问题。在诸如对话系统和信息减速等中&#xff0c;度量句子或短语之间的相似度尤为重要。在新闻学传媒中应用文本相似度可以帮助读者快速检索到想要了解的报道。 文本相似度的定义式如下所示&a…

YOLO系列:从yolov1至yolov8的进阶之路 持续更新中

一、基本概念 1.YOLO简介 YOLO&#xff08;You Only Look Once&#xff09;&#xff1a;是一种基于深度神经网络的对象识别和定位算法&#xff0c;其最大的特点是运行速度很快&#xff0c;可以用于实时系统。 2.目标检测算法 RCNN&#xff1a;该系列算法实现主要为两个步骤&…

江科大/江协科技 STM32学习笔记P22

文章目录 AD单通道&AD多通道ADC基本结构和ADC有关的库函数AD单通道AD.cmain.c连续转换&#xff0c;非扫描模式的AD.c AD多通道AD.cmain.c AD单通道&AD多通道 ADC基本结构 第一步&#xff0c;开启RCC时钟&#xff0c;包括ADC和GPIO的时钟&#xff0c;ADCCLK的分频器也需…

华为hcip-big data 学习笔记《一》大数据应用开发总指导

一、大数据应用开发总指导 1. 前言 随着大数据技术的飞速发展和大数据应用的不断普及&#xff0c;大数据已经成为当今时代最热门的话题之一。不过对于大数据的了解&#xff0c;很多人还只是停留在表面&#xff0c;提到大数据&#xff0c;很多人只是直到它是最新的科技&#x…

集成新的 AI 服务时需要考虑的问题

让我们来谈论最近发生的几个恐怖故事。 去年年底&#xff0c;一家雪佛兰经销商在其主页上部署了一个由大型语言模型 (LLM) 驱动的聊天机器人。该 LLM 经过雪佛兰汽车详细规格的训练&#xff0c;旨在仅回答有关雪佛兰汽车的问题。 然而&#xff0c;用户很快就找到了绕过这些限…

在 Linux 9 上安装 Oracle 19c:克服兼容性问题 (INS-08101)

Oracle 数据库 19c 的基础版本 (19.3) 发布的时候还没有 Linux 9 &#xff0c;因此在Linux 9上面安装Oracle 19c会遇到很多兼容性问题。本文将探讨如何解决这些问题。 安装步骤 设置环境变量以绕过操作系统检查&#xff1a; Oracle 19.3 安装程序无法识别 Linux 9。 [WARNIN…

【机器学习】 Sigmoid函数:机器学习中的关键激活函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Sigmoid函数&#xff1a;机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…

C语言之“ 分支和循环 ” (2)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C语言基础 目录 前言 一、switch语句 1.1 if语句和switch语句的对比 1.2 switch语句中的break 1.3 switch语句中的default 1.4 switch语句中的case和default…

Java | Leetcode Java题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isPowerOfThree(int n) {return n > 0 && 1162261467 % n 0;} }

HTML表单元素

HTML表单元素 表单把用户的信息发给服务器。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title> </head><body><form class"stylin_form1" action"process_form.php" met…

WPF篇(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件&#xff08;瀑布流布局&#xff09; WrapPanel控件表示将其子控件从左到右的顺序排列&#xff0c;如果第一行显示不了&#xff0c;则自动换至第二行&#xff0c;继续显示剩余的子控件。我们来看看它的结构定义&#xff1a; public class WrapPanel : Panel {pub…

新书速览|Python数据可视化:科技图表绘制(送书)

《Python数据可视化:科技图表绘制》 本书内容 《Python数据可视化:科技图表绘制》结合编者多年的数据分析与科研绘图经验&#xff0c;详细讲解Python语言及包括Matplotlib在内的多种可视化包在数据分析与科研图表制作中的使用方法与技巧。《Python数据可视化:科技图表绘制》分为…

基于大数据的气象数据分析与可视化系统设计与实现【爬虫海量数据,LSTM预测】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍研究目的研究意义研究思路可视化展示每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本课题主要针对气象数据进行分析以及可视化…

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task01 DeepSeek简易AI助手

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向 Task01 正处于拿毕业证求职和实习离职期间的过渡期&#xff0c;想着闲着也是闲着&#xff0c;索性拉上本科同学队友报名参加AI比赛&#xff0c;想方设法卷个项目经验出来。 Task1的任务主要是体验从0开始搭建一个AI对…

SpringBoot统一功能处理——统一数据返回格式

目录 一、简单使用 二、存在的问题描述 三、优点 一、简单使用 统一的数据返回格式使用 ControllerAdvice 和 ResponseBodyAdvice 的方式实现 ControllerAdvice 表示控制器通知类。 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口&#xff0c;并在类上添加 …

使用 Matplotlib 绘制折线图

使用 Matplotlib 绘制折线图 数据可视化是数据分析的重要组成部分&#xff0c;通过图表&#xff0c;我们可以更直观地理解数据背后的趋势和模式。Matplotlib 是 Python 最基础也是最常用的绘图库之一&#xff0c;非常适合初学者。本文将带你从零开始&#xff0c;逐步创建和自定…

VisionPro二次开发学习笔记2-使用C#从图像数据库文件获取图像

使用C#从图像数据库文件获取图像 图像文件对象使您可以从图像文件获取图像&#xff0c;以及将获取的图像保存到图像文件中以备后用。VisionPro为图像文件对象提供了几种类&#xff0c;具体取决于您要使用的图像格式&#xff1a; 对CDB / IDB文件使用CogImageFileCDB对象将Cog…

谈对象系列:C++类和对象

文章目录 一、类的定义1.1类定义的格式类的两种定义方法结构体&#xff1a; 1.2访问限定符1.3类域 二、实例化2.1变量的声明和定义2.2类的大小计算空类的大小&#xff08;面试&#xff09;&#xff1a; 三、this指针小考题 一、类的定义 1.1类定义的格式 使用class关键字&…