【Python自然语言处理】使用SVM、随机森林法、梯度法等多种方法对病人罹患癌症预测实战(超详细 附源码)

news2025/1/14 0:53:09

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

一、数据集背景

  • 乳腺癌数据集是由加州大学欧文分校维护的 UCI 机器学习存储库。

  • 数据集包含 569 个恶性和良性肿瘤细胞样本。

  • 样本类别分布:良性357,恶性212

  • 数据集中的前两列分别存储样本的唯一 ID 编号和相应的诊断(M=恶性,B=良性)。

  • 第 3-32 列包含 30 个实值特征,这些特征是根据细胞核的数字化图像计算得出的,可用于构建模型来预测肿瘤是良性还是恶性。

    • 1= 恶性(癌性)- (M)
    • 0 = 良性(非癌性)- (B)

为每个样本计算十个实值特征:

  • 半径(从中心到周边点的平均距离)
  • 纹理(灰度值的标准偏差)
  • 周长
  • 面积
  • 平滑度(半径长度的局部变化)
  • 紧凑性(周长^2/面积 - 1.0)
  • 凹度(轮廓凹入部分的严重程度)
  • 凹点(轮廓凹入部分的数量)
  • 对称
  • 分形维数

为每张图像计算这些特征的平均值、标准误差和“最差”或最大(三个最大值的平均值),从而产生 30 个特征。 在本实例中我们仅以特征平均值为对象进行研究。

接下来导入库文件,主要包括机器学习库Sklearn中的一些模块

数据清洗和样本显示

根据实例研究的对象指标,输出部分样本的指标分布特征,如下图所示

 剔除其他指标 仅保留研究对象半径 周长和面积平均值指标 结果如下

对病人诊断结果进行分类

目标数据进行归类:

  • 恶性肿瘤 - 1
  • 良性肿瘤 - 0

 绘制各半径 周长 面积指标之间的相关关系如下图

 选择相关性不小于68%作为阈值,分析特征值与罹患恶性肿瘤的关系 结果如下图

 

 

将数据划分为自变量和因变量 为后续模型分析准备数据

 

模型分析

下面使用不同分类方式 获得分析结果并比较分析精度

 可见随机森林法和逻辑回归法的精确度较高 效果较好

 

 

 梯度模型准确性变化趋势分析

选择梯度模型 分析其在迭代过程中的准确性变化规律

由下图可见  第二十一次迭代时达到极值 图形阴影部分表示置信区间 

二、代码 

部分代码如下  需要源码和数据集请点赞关注收藏后评论区留言私信~~~



#导入库

import matplotlib
import matplotlib.pyplot as plt 
import seaborn as sn 
from sklearn.svm import SVC
import numpy as np
import pandas as pds 
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
import xgboost as xgb
from matplotlib import font_manager
from sklearn.neighbors import LocalOutlierFactor
from sklearn.model_selection import train_test_split
#from sklearn.neighbors import NeighborhoodComponentsAnalysis

fontP = font_manager.FontProperties()
fontP.set_family('SimHei')
fontP.set_size(14)


# In[2]:


# 加载数据
dr = pds.read_csv('./data/data.csv')


# In[3]:


dr.head(5)


# In[4]:


dr.info()


# In[5]:


#dr.drop(['id','Unnamed: 32','fractal_dimension_worst','symmetry_worst','concave points_worst','concavity_worst','compactness_worst','smoothness_worst','area_worst','perimeter_worst','texture_worst','radius_worst','fractal_dimension_se','symmetry_se','concave points_se','concavity_se','compactness_se','smoothness_se','area_se','perimeter_se','texture_se','radius_se','radius_se'], axis = 1 , inplace=True)
dr.drop(['id','Unnamed: 32','texture_mean','smoothness_mean','compactness_mean','concavity_mean','concave points_mean','symmetry_mean','fractal_dimension_mean','fractal_dimension_worst','symmetry_worst','concave points_worst','concavity_worst','compactness_worst','smoothness_worst','area_worst','perimeter_worst','texture_worst','radius_worst','fractal_dimension_se','symmetry_se','concave points_se','concavity_se','compactness_se','smoothness_se','area_se','perimeter_se','texture_se','radius_se','radius_se'], axis = 1 , inplace=True)



dr.info()


# In[6]:


dr.diagnosis.replace({"B":0,"M":1},inplace=True)


# **目标数据进行归类:**
# 
# * 恶性肿瘤 - 1
# * 良性肿瘤 - 0

# In[7]:


correlation = dr.corr()
plt.figure(figsize=(7,7))
sn.set(font_scale=1.2)
sn.set(font='SimHei')
sn.heatmap(correlation, cmap='Purples',annot = True,annot_kws={"size": 12}, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False)


# In[8]:


sn.heatmap(correlation, cmap='Purples', xticklabels=['诊断结果', '半径均值', '周长均值', '面积均值'],yticklabels=['诊断结果','半径均值','周长均值', '面积均值'],annot = True,annot_kws={"size": 10}, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False)


# In[9]:


correlation[abs(correlation['diagnosis']) > 0.68].index


# In[10]:


dr.drop('diagnosis', axis=1).corrwith(dr.diagnosis).plot(kind='bar', grid=True, figsize=(6, 6), title="Correlation",color="purple");


# **相关性** 
# * 选择相关性不小于68%作为阈值,分析特征值与罹患恶性肿瘤的关系.
# 

# In[11]:


correlation = dr.corr()
cancer_threshold = 0.68 
filter = np.abs(correlation["diagnosis"]) >= cancer_threshold
correlation.filter = correlation.columns[filter].tolist()
sn.set(font_scale=5.5)
sn.set(font='SimHei')
#sn.clustermap(dr[cf].corr(), figsize=(6, 6), xticklabels=['诊断结果', '面积均值','半径均值', '周长均值'],yticklabels=['周长均值', '半径均值', '面积均值', '诊断结果'],annot = True, annot_kws={"size": 12},cmap="Purples").fig.suptitle("罹患肿瘤相关性分析", fontproperties=fontP,x=0.6, y=1.0) 
res=sn.clustermap(dr.corr(), figsize=(6, 6),annot = True, annot_kws={"size": 16},cmap="Purples").fig.suptitle("罹患肿瘤相关性分析", fontproperties=fontP,x=0.6, y=1.0) 


# In[ ]:





# In[12]:


#组图
sn.set(font_scale=1.5)
sn.set_style(style='white')
sn.pairplot(dr[correlation.filter],dropna=True,grid_kws=None,  diag_kind = "kde", markers = ".", hue = "diagnosis", palette='Purples')


# **去除异常节点** 

# In[13]:


from sklearn.neighbors import LocalOutlierFactor
# 将数据划分为自变量和因变量
y=dr["diagnosis"]
x=dr.drop(["diagnosis"],axis=1)


# In[14]:


# -1代表异常节点
outlier= LocalOutlierFactor()
y.predict=outlier.fit_predict(x)
y.predict[0:10]


# In[15]:


x_factor= outlier.negative_outlier_factor_
pds.dataframe= pds.DataFrame()
pds.dataframe["score"]=x_factor

threshold= -2.5
data_filter= pds.dataframe["score"]< threshold
pds_filter_tolist= pds.dataframe[data_filter].index.tolist()


# In[17]:


x= x.drop(pds_filter_tolist)
y= y.drop(pds_filter_tolist).values


# In[18]:


x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=42)

scaler = StandardScaler()
x_nsform(x_test)


# In[19]:


index = ['梯度法','逻辑回归法','近邻法','支持向量机法','决策树法','随机森林法']
model_list = [GradientBoostingClassifier(),LogisticRegression(), KNeighborsClassifier(n_neighbors = 4), SVC(kernel="rbf"), DecisionTreeClassifier(), RandomForestClassifier(n_estimators=600)]
model_dict = dict(zip(index,model_list))
model_dict


# In[20]:


pediction_outcome_list =[]
for i,j in model_dict.items():
    j.fit(x_train,y_train)
    x_prediction = j.predict(x_test)
    accuracy = accuracy_score(y_test, x_prediction)
    pediction_outcome_list.append(accuracy)
    print(i,"{:.4f}".format(accuracy))


# In[21]:


plt.figure(figsize = (10,4))
sn.barplot(x =index , y =pediction_outcome_list, palette="vlag",  ci=95,edgecolor='purple',n_boot=1000, dodge=False)


# In[22]:


gradient_boost = GradientBoostingClassifier(loss='deviance',  learning_rate=0.1)
result_list = []
accuracy = []
for j in range(1,28,1):
    x_train,x_test,y_train,y_test = train_test_split(x, y, test_size = 0.25, random_state = j)    
    gradient_boost_fit = gradient_boost.fit(x_train, y_train)
    fit_predict_x = gradient_boost_fit.predict(x_test)
    accuracy.append(accuracy_score(y_test, fit_predict_x))
    result_list.append(j)


# In[23]:


plt.figure(figsize=(10,8))
plt.xlabel("迭代次数",fontsize=14)
plt.
# In[ ]:




创作不易 觉得有帮助请点赞关注收藏~~~

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

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

相关文章

Prototypical Networks for Few-shot Learning

摘要 我们为零样本分类问题提出了一个原型网络。在这里分类器必须能够被泛化到新类别&#xff08;在训练集中不可见&#xff09;&#xff0c;每个新类只给出少量示例。 原型网络能够学习一个度量空间&#xff0c;通过计算每个类别的原型表示距离实现分类。与少样本学习近几年的…

华为机试 - 完全二叉树非叶子部分后序遍历

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一个以顺序储存结构存储整数值的完全二叉树序列&#xff08;最多1000个整数&#xff09;&#xff0c;请找出此完全二叉树的所有非叶子节点部分&#xff0c;然后采用后序遍历方式将此部分树&#x…

AOP事务管理(下)

Transactional注解可以设置参数。 readOnly&#xff1a;true只读事务&#xff0c;false读写事务&#xff0c;增删改要设为false,查询设为true。 timeout:设置超时时间单位秒&#xff0c;在多长时间之内事务没有提交成功就自动回滚&#xff0c;-1表示不设置超 时时间。 rollbac…

熬夜也要肝完的阿里内部面试官手册,吃透直接拿下大厂心仪 offer

前言 蓦然回首自己做开发已经十年了&#xff0c;这十年中我获得了很多&#xff0c;技术能力、培训、出国、大公司的经历&#xff0c;还有很多很好的朋友。但再仔细一想&#xff0c;这十年中我至少浪费了五年时间&#xff0c;这五年可以足够让自己成长为一个优秀的程序员&#…

ASP.NET通用版权限管理系统源码分享

ASP.NET通用版权限管理系统源码 源码分享&#xff01;需要源码学习可私信我。 主要功能有&#xff1a;权限管理、角色管理、部门管理、用户管理、公司管理、模块管理、系统设置。 一、 权限管理 以关键字&#xff08;Key&#xff09;的方式来定义系统的权限&#xff0c;使系统…

(附源码)springboot农田灌溉设备管理系统 毕业设计 260931

题 目 springboot 农田灌溉设备管理系统 目 录 摘要 1 1 绪论 1 1.1选题的目的和意义 1 1.2研究现状 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 2 农田灌溉设备管理系统 系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1数据增加流程 3 2.3.2数据修改流程…

强的离谱!阿里人用五个模块讲明白了SpringCloud,已开源!

微服务 作为一名Java程序员如果你对微服务不了解&#xff0c;就会在学习或者使用的过程中觉得有点“晕”。微服务是一种面向服务的软件架构模式&#xff01; 我们常说&#xff0c;架构设计的核心是满足降本增效。该怎么理解&#xff1f; 举个例子&#xff0c;微服务架构之所…

简单学校网页设计作业 静态HTML校园博客主页 DW大学网站模板下载 大学生简单我的学校网页作品代码 个人网页制作 学生个人网页设计作业

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]计算机毕业设计JAVA疫苗接种管理系统

[附源码]计算机毕业设计JAVA疫苗接种管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

AIGC的一些材料

概念和前景 先看亚马逊AWS给AIGC的定义。 AIGC 是什么_亚马逊云科技 AIGC 解决方案 它有多个模态分支&#xff0c;但大同小异。 Diffusion预训练成本降低6.5倍&#xff0c;微调硬件成本降低7倍&#xff01;Colossal-AI完整开源方案低成本加速AIGC产业落地 背景 1.01亿美元融资…

Java项目:SSM电器商城系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录…

低功耗局域网通信硬件之lora——sx1262-sx1276硬件设计开发

1.lora简介 LoRa是semtech公司开发的一种低功耗局域网无线标准&#xff0c;其名称“LoRa”是远距离无线电&#xff08;Long Range Radio&#xff09;&#xff0c;它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远&#xff0c;实现了低功耗和远距离的统一&#x…

浅谈ES标准的演变

ECMAScript从1997年第一版诞生依赖&#xff0c;经过无数人的“踩坑”和“填坑”&#xff0c;到现在&#xff0c;ES12呼之欲出。那么我们不妨讨论一下ES的发展历程&#xff0c;看它如何统一江湖&#xff0c;看它“曲折”而又令人期待的发展之路。 最近分析typescript&#xff0c…

双机互备是什么意思?双机互备就是双机热备吗?

看到不少小伙伴在问&#xff0c;双机互备是什么意思&#xff1f;双机互备就是双机热备吗&#xff1f;今天我们就来一起简单了解了解吧&#xff01; 双机互备是什么意思&#xff1f;双机互备就是双机热备吗&#xff1f; 双机互备是指在双机热备的基础上&#xff0c;两个相对独…

【AI数学】余弦相似性(含python实现)

Cosine Similarity&#xff0c;即余弦相似度&#xff0c;又叫余弦相似性。是一个中学数学的概念&#xff0c;即用两个向量之间的夹角余弦值代表这两个向量之间的相似度。 Cosine Similarity虽然简单&#xff0c;但广泛应用在AI模型中&#xff0c;比如CLIP计算图像embedding和文…

【KCP】UDP可靠性传输

1 如何做到可靠性传输 ◼ ACK机制 ◼ 重传机制 ◼ 序号机制 3 2 1 -》2 3 1 ◼ 重排机制 2 3 1 ->3 2 1 ◼ 窗口机制 Tcp不用我们管 可靠性udp 5种机制都需要用户层处理 2 UDP与TCP&#xff0c;我们如何选择 3 UDP如何可靠&#xff0c;KCP协议在哪些方面有优势 以10%-20%…

Java人事管理系统oa人力人事办公(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术JSP、Struts2、MyBatis、dwr、Tomcat服务器、MySQL数据库、项目含有源码、配套开发软件、软件安装教程、项目发布教程以及代码讲解教程 【项目使用技术&#xff1a;】Struts2MyBatisdwrjqueryjscss等技术 【技术特色】 文件上传&#xff1a; Strut…

Android依赖注入与Hilt的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 基础知识 一、依赖注入是什么&#xff1f; 二.如果依赖注入这么简单&#xff0c;为什么需要专门开发一个框架&#xff1f; 三.安卓的依赖注入框架Dagger与Hilt 四.…

[附源码]计算机毕业设计基于Springboot甜品购物网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

如何恢复文件夹隐藏文件?超实用的2种技巧来了

案例&#xff1a;电脑中毒&#xff0c;文件夹数据自动隐藏&#xff0c;现在全都找不到了怎么办&#xff1f;——在日常办公使用电脑过程当中&#xff0c;总会遇到这样那样的问题&#xff0c;比如文件夹数据隐藏问题&#xff0c;当我们需要这些数据时如何恢复正常呢&#xff1f;…