大数据分析案例-基于高斯朴素贝叶斯算法构建良恶性肿瘤识别器

news2024/11/18 1:50:02

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1分析良性/恶性肿瘤的占比情况

4.3.2分析不同肿瘤的半径和纹理的区别

4.3.3分析各变量的相关系数

4.4特征工程

4.5模型构建

4.6模型评估

4.7模型预测

5.实验总结

源代码


1.项目背景

        2015年1月,美国政府提出“精准医学倡议”,精准医学的概念随后迅速进入了公众视野和国际舞台,成为学术界关注的热点话题。精准医学被定义为“一种考虑到差异的个体“基因、环境和生活方式”的来预防和治疗疾病的新方法。“精确医学计划”的目的是将精确医学的概念转变为临床实践的科学依据,从而开创医学的新时代。

        “精准医学倡议”的提议与癌症密切相关。癌症具有世界上最高的病死率,并且随着年龄的增长而上升,其特征是“无法解释的耐药性,肿瘤的遗传异质性,未能充分评估疗效和肿瘤复发”。精准医学强调个体化药物,可以根据癌症本身的特点,通过生物信息数据库,患者的个体化检测技术,大数据分析技术和大数据分析,来创建个体化的医学。针对不同患者的治疗方案,使肿瘤治疗显得“个性化”、“精确”和“最优”。

        互联网的普及将人类带入了大数据时代。互联网带来的信息风暴正在改变我们的生活,工作和思维方式。在生物医学领域,大数据被抽象地定义为“生物医学大数据” ,“健康和医学大数据”,“医学大数据”。它为癌症的预防和治疗研究提供了重要的平台,例如“人类基因组计划”,“人类蛋白质组计划(HPP)”等。大数据不仅可以加强临床信息与分子生物学,基因组学,代谢组学等学科的整合,还可以帮助人们发现疾病背后的秘密,提高靶向药物,免疫疗法和综合治疗的研究效率。      

        人工智能(AI)是指由人类制造的机器所显示的智能,它使计算机能够模拟人类的某些思维过程和智能行为。它在心理学,哲学,语言学,生物医学领域和其他学科中具有广泛的应用。2017年,在日本使用AI诊断大肠癌的准确率高达86%,并且AI在癌症预防和治疗中的应用已变得越来越深入。 

2.项目简介

2.1项目说明

        本项目通过分析良性肿瘤(Benign cancer)和恶性肿瘤(Malignant cancer)的细胞特征差异性,最后使用机器学习中的高斯朴素贝叶斯、支持向量机、逻辑回归、随机森林等分类算法模型构建癌细胞分类器,以此判断是否为良性或恶性。

2.2数据说明

        数据来源于kaggle平台,原始数据集共有569个癌细胞和30个特征判断我们数据中的癌细胞是良性还是恶性,我们的癌症数据包含两种类型的癌症:1. 良性癌症 (B) 和 2. 恶性癌症 (M)。

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

朴素贝叶斯算法

(1)算法简介

        朴素贝叶斯法是基于贝叶斯定理与特征条件独立性假设的分类方法。对于给定的训练集,首先基于特征条件独立假设学习输入输出的联合概率分布(朴素贝叶斯法这种通过学习得到模型的机制,显然属于生成模型);然后基于此模型,对给定的输入 x,利用贝叶斯定理求出后验概率最大的输出 y。

(2)朴素贝叶斯分类器的公式

        假设某个体有n项特征(Feature),分别为F1、F2、…、Fn。现有m个类别(Category),分别为C1、C2、…、Cm。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C)/P(F1F2...Fn)

由于P(F1F2…Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求

P(F1F2...Fn|C)P(C)的最大值。朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此

P(F1F2...Fn|C)P(C) = P(F1|C)P(F2|C) ... P(Fn|C)P(C)

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。虽然“所有特征彼此独立”这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大。

(3)朴素贝叶斯常用的三个模型

高斯模型:处理特征是连续型变量的情况

多项式模型:最常见,要求特征是离散数据

伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0

(4) 朴素贝叶斯法的评价

朴素贝叶斯法的优点:

朴素贝叶斯算法假设了数据集属性之间是相互独立的,因此算法的逻辑性十分简单,并且算法较为稳定,当数据呈现不同的特点时,朴素贝叶斯的分类性能不会有太大的差异。换句话说就是朴素贝叶斯算法的健壮性比较好,对于不同类型的数据集不会呈现出太大的差异性。当数据集属性之间的关系相对比较独立时,朴素贝叶斯分类算法会有较好的效果。

朴素贝叶斯法的缺点:

属性独立性的条件同时也是朴素贝叶斯分类器的不足之处。数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低。

4.项目实施步骤

4.1理解数据

首先使用pandas库导入我们的癌症数据集并查看数据前五行

使用.shape数据查看数据大小,发现数据共有569行,33列 

 

使用. info()方法查看数据基本信息

 

 从数据基本信息中,我们可以看到各列特征的数据类型以及缺失情况,最后还有占用的内存大小。

使用.describe()查看数据描述性统计

 从描述性统计结果中,我们可以得出各列变量的均值、方差、最大最小值、四分位数等信息。

4.2数据预处理

统计一下各列特征的总缺失值数

 从结果中可以发现,最后一列“Unnamed:32”明显是异常的一列,后面删除即可。

使用any()检验原始数据集是否有重复值 

结果为False说明数据不存在重复值情况,反之则说明存在。

删除最后异常的那一列,同时将目标变量列diagnosis中的B和M用0 1进行表示

4.3探索性数据分析

4.3.1分析良性/恶性肿瘤的占比情况

 通过饼图我们发现该数据集中良性肿瘤数据占多数,具体数量是多少,我们用条形图来展示。

 4.3.2分析不同肿瘤的半径和纹理的区别

 从图中我们看出,恶性肿瘤在细胞半径大小和纹理都大于良性肿瘤。

4.3.3分析各变量的相关系数

 当然我们也可以将相关系数值打印出来

4.4特征工程

在选择特征变量的时候,我们将id和diagnosis删除,然后作为特征变量X,将diagnosis作为目标变量y,最后拆分数据集为训练集和测试集,其中测试集比例为0.2。

4.5模型构建

首先导入本次需要用到的模型库

 接着构建模型,并打印模型准确率

 将以上模型准确率进行汇总统计

从结果中我们可以看出高斯朴素贝叶斯算法模型的准确率最高,故我们采用其作为最终的算法模型。 

4.6模型评估

模型评估我们使用混淆矩阵、分类报告、ROC曲线最为评估指标

 从混淆矩阵中,我们可以看出模型在0分类上全部正确,在1分类上预测正确40个,错误3个。在分类报告中,我们可以得出模型在0和1分类上的精确率、召回率、F1值等信息。最后ROC曲线趋向于左上方,面积越大,表示模型效果越好。综合以上结果看出,模型效果整体不错。

4.7模型预测

将真实值和预测值进行汇总,然后随机挑选10个来看看结果

 从结果看出,随机挑选10个中,全部预测正确。

5.实验总结

        本次实验我们通过分析癌细胞的特征差异最后使用高斯朴素贝叶斯算法模型构建了癌细胞识别器,以此来识别是否为良/恶性,识别器的准确率为97%,效果不错。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

import pandas as pd
import warnings
warnings.filterwarnings('ignore')

data = pd.read_csv("Cancer_Data.csv")
data.head()
data.shape
data.info()
data.describe().T
print('Train columns with null values:\n', data.isnull().sum())
any(data.duplicated())
# 删除缺失列-'Unnamed: 32'
data.drop('Unnamed: 32',axis=1,inplace=True)
# 将目标变量列diagnosis中的B和M用0 1进行表示
data['diagnosis'].replace(['B', 'M'],[0, 1], inplace=True)
data.head()
# 分析目标变量B和M的占比情况
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
plt.pie(data['diagnosis'].value_counts(),autopct='%1.2f%%', startangle=90,labels=['B','M'])
plt.axis('equal')
plt.title("B x M")
plt.show()
# 分析目标变量B和M的数量分布
ax = sns.countplot(data=data, x='diagnosis')
plt.title('Total B x M cells')
ax.bar_label(ax.containers[0], label_type='edge')
plt.show()
# 分析不同肿瘤的半径和纹理的区别特征
M_data = data[data.diagnosis == 1] # 取出恶性肿瘤M的数据
B_data = data[data.diagnosis == 0] # 取出良性肿瘤B的数据
plt.scatter(M_data.radius_mean,M_data.texture_mean, label = "Malignant", alpha = 0.3)
plt.scatter(B_data.radius_mean,B_data.texture_mean,label = "Benign", alpha = 0.3)
plt.xlabel("radius_mean")
plt.ylabel("texture_mean")
plt.legend()
plt.show()
plt.figure(figsize=(20,20))
sns.heatmap(data.corr(),cbar=True,annot=True,cmap='Blues')
plt.show()
data.corr()
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from xgboost import XGBClassifier
# 准备特征变量和目标变量
X = data.drop(['id','diagnosis'],axis=1)
y = data['diagnosis']
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建一个来存储模型准确率的字典
model_dict = {}
# 构建逻辑回归模型
lg = LogisticRegression()
lg.fit(X_train, y_train)
acc_score = lg.score(X_test,y_test)
model_dict['LogisticRegression'] = acc_score
print(acc_score)
# 构建高斯朴素贝叶斯模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)
acc_score = gnb.score(X_test,y_test)
model_dict['GaussianNB'] = acc_score
print(acc_score)
# 构建SVC支持向量机模型
svc = SVC()
svc.fit(X_train, y_train)
acc_score = svc.score(X_test,y_test)
model_dict['SVC'] = acc_score
print(acc_score)
# 构建随机森林模型
forest = RandomForestClassifier()
forest.fit(X_train, y_train)
acc_score = forest.score(X_test,y_test)
model_dict['RandomForestClassifier'] = acc_score
print(acc_score)
# 构建决策树模型
tree = DecisionTreeClassifier()
tree.fit(X_train, y_train)
acc_score = tree.score(X_test,y_test)
model_dict['DecisionTreeClassifier'] = acc_score
print(acc_score)
# 构建XGBoost模型
xgb = XGBClassifier()
xgb.fit(X_train, y_train)
acc_score = xgb.score(X_test,y_test)
model_dict['XGBClassifier'] = acc_score
print(acc_score)
model_accuracies_df = pd.DataFrame(columns=['Model', 'Accuracy'])
model_accuracies_df['Model'] = model_dict.keys()
model_accuracies_df['Accuracy'] = model_dict.values()
model_accuracies_df.sort_values(by = "Accuracy", ascending=False)
from sklearn.metrics import confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = gnb.predict(X_test)
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = gnb.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10)

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

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

相关文章

时间复杂度和空间复杂度的七七八八

文章目录 时间空间复杂度1. 时间空间复杂度的重要性(作用)2. 时间复杂度和大O表示法1)算法图解2)代码随想录3)王道《数据结构》 3. 大O指的是最糟的情形和一般的情形1)大O表示的是一般情况,并不是严格的上界2&#xff…

算法修炼之练气篇——练气四层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

创建虚拟目录和用户访问控制+虚拟目录

目录标题 虚拟目录配置文件创建配置文件对应的目录资源在创建一个虚拟目录的配置文件 用户访问控制虚拟目录创建用户访问控制权限创建配置文件中的用户资源测试tom用户测试zhangsan用户 虚拟目录 Alias 虚拟目录名称 真是目录路径为了方便对于网站资源进行灵活管理&#xff0c…

使用 MVC 模式,实现简单登录功能 (Kotlin)

先放效果图: 第一张是登录页面效果图。用户输入登录名和密码,经过后台的非空验证和固定值验证,跳转到首页 第二张是首页效果图。用户点击 “update” 显示用户名和密码 这里的用户名和密码是后台设置的固定值,整体的登录逻辑特别…

python+opencv图像形态变换

形态变换主要用于二值图像的形状操作,形态变换的实现原理基于数字形态学。数字形态学也称形态学,它主要从图像内部提取信息来描述图像形态。形态学广泛应用于视觉检测、文字识别、医学图像处理、图像压缩编码等。形态变换主要包括腐蚀、膨胀和高级形态操…

Linux aarch64架构中使用docker安装mysql8

Linux aarch64架构中使用docker安装mysql8 1、遇到问题: 官网下载mysql包,安装完成后,启动mysql一直显示-bash: ./mysqld: 无法执行二进制文件。 网上找了各种资料,但是都没有作用,怀疑自己操作姿势不正确&#xff…

面试题集合

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。 从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提…

DNS:DNS域名解析过程及原理

一、理解IP和域名 我们首先要了解域名和IP地址的区别。 IP地址是互联网上计算机唯一的逻辑地址。 通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。 但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所…

C基础 --- 因为整型提升导致的BUG

为什么会做整型提升 通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。C语言是一个注重 效率的语言,所以它会作整型提升,使得程序的运行速度尽可…

基于ChatGPT AI自动产生Shader,AI自动产生AICommand

AIEngine 基于ChatGPT AI自动产生Shader 代码地址:https://github.com/ManoKing/AIEngine 使用方法: 1,打开 Window/Package Manager 2,选择 /Add package from git URL… 3,添加URL: https://github.com/ManoKing/…

VMware Aria Automation Orchestrator 8.12 - 现代工作流程自动化平台

VMware Aria Automation Orchestrator 8.12 - 现代工作流程自动化平台 请访问原文链接:https://sysin.org/blog/vmware-aria-automation-orchestrator/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 现代工作流程…

民谣女神唱流行,基于AI人工智能so-vits库训练自己的音色模型(叶蓓/Python3.10)

流行天后孙燕姿的音色固然是极好的,但是目前全网都是她的声音复刻,听多了难免会有些审美疲劳,在网络上检索了一圈,还没有发现民谣歌手的音色模型,人就是这样,得不到的永远在骚动,本次我们自己构…

艺术家林曦老师新书《无用之美》即将发售,其中甘美提前与君共享~

十多年前,艺术家林曦老师做了一次主题为“无用之美”的演讲,从那时到现在,也一直教授着以“美”为核心的课程。经过十年的教学、和糯糯小朋友的相处,林曦老师觉得自己对这个主题有了更多的感触。      “有用的世界”繁复疲惫…

科技云报道:Serverless或许没有你想象中的安全

科技云报道原创。 随着云计算技术的进一步成熟,Serverless已成为引领云计算下一个十年的技术热点。 Serverless能够帮助开发者无需关注服务器、按照实际使用付费且可以享受服务自动弹性伸缩,将更多的精力放到业务逻辑本身。据Gartner预测,2…

Swift AsyncThrowingStream 和 AsyncStream Demo 演示

文章目录 前言什么是 AsyncThrowingStream?调整现有代码以使用流什么是 AsyncStream?AsyncThrowingStreamAsyncThrowingStream 迭代调试 AsyncStream取消一个 AsyncStream结论 前言 AsyncThrowingStream 和 AsyncStream 是 Swift 5.5 中由 SE-314 引入的并发框架的…

JUC并发编程15 | Java内存模型JMM与volatile

尚硅谷(56-70) JMM 引入一些大厂的面试题 Java内存模型JMM是什么JMM与volatile之间的关系是什么JMM有哪些特性or它的三大特性是什么为什么要有JMM,它为什么出现?功能和作用是什么?happens-before 先行发生原则是什么…

LaTeX极简入门

​LaTeX是什么? LaTeX是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利兰伯特(Leslie Lamport)在20世纪80年代初期开发。 LaTeX是一款开源免费,并且应用相当广泛的排版工具。不但能够对文字、公式、图片进行精确而复…

电容笔和触控笔有什么区别?电容笔牌子排行榜

而现在,在无纸化教育的大热之下,电容笔这个配件,也被很多人所关注。许多人对电容笔与触控笔的不同之处感到困惑,事实上,这二者是非常容易分辨的,电容笔是适用在我们最常见的电容屏上才能进行操作&#xff0…

算法工程师面试题

1.关于边缘提取的算法有那些?各有什么优缺点? Canny算法:Canny算法是一种经典的边缘检测算法,具有较高的准确性和良好的鲁棒性。该算法利用高斯滤波器对图像进行平滑处理,然后计算图像中每个像素的梯度和方向&#xff…

TinyHttpd 运行过程出现的问题

最近拉了个 TinyHttpd 的工程下来,不过好像各个都有些改动,最后挑了篇阅读量最多的。工程也是从这里面给的链接下载的。 参考自:https://blog.csdn.net/jcjc918/article/details/42129311 拿下来在编译运行前,按这里说的&#x…