文章目录

  • 1 目的
  • 2 数据来源
  • 3 案例演示
    • 3.1 数据读取及预处理
      • 1. 读取数据并查看数据类型
      • 2 .查看数据基本特征
    • 3.2 工具函数编写
      • 1.标准化函数编写
      • 2.工具函数性能测试
    • 3.3 原始数据标准化
  • 4 模型建立及优化
    • 4.1 训练集测试集划分
    • 4.2 基于数据训练模型
    • 4.3 改进模型,提高模型性能
      • 1. 利用Z-分数标准化数据
      • 2.测试其他k值

1 目的

  利用机器学习根据样本特征自动识别癌细胞,提高检测过程的效率,并尝试改进算法提高模型性能。

2 数据来源

  该演示数据来源于: 机器学习和智能系统中心

3 案例演示

3.1 数据读取及预处理

1. 读取数据并查看数据类型

  运行代码:

1.   data<-read.csv("G:\\wisc_bc_data.csv",stringsAsFactors = FALSE)  #读取数据
2.  str(data)                                                        #查看数据类型

   部分结果展示:

'data.frame':  569 obs. of  32 variables:$ id               : int  87139402 8910251 905520 868871 9012568 906539 925291 87880 862989 89827 ...$ diagnosis        : chr  "B" "B" "B" "B" ...$ radius_mean      : num  12.3 10.6 11 11.3 15.2 ...$ texture_mean     : num  12.4 18.9 16.8 13.4 13.2 ...$ perimeter_mean   : num  78.8 69.3 70.9 73 97.7 ...$ area_mean        : num  464 346 373 385 712 ...$ smoothness_mean  : num  0.1028 0.0969 0.1077 0.1164 0.0796 ...$ compactness_mean : num  0.0698 0.1147 0.078 0.1136 0.0693 ...$ concavity_mean   : num  0.0399 0.0639 0.0305 0.0464 0.0339 ...$ points_mean      : num  0.037 0.0264 0.0248 0.048 0.0266 ...$ symmetry_mean    : num  0.196 0.192 0.171 0.177 0.172 ...$ dimension_mean   : num  0.0595 0.0649 0.0634 0.0607 0.0554 ...$ radius_se        : num  0.236 0.451 0.197 0.338 0.178 ...$ texture_se       : num  0.666 1.197 1.387 1.343 0.412 ...$ perimeter_se     : num  1.67 3.43 1.34 1.85 1.34 ...$ area_se          : num  17.4 27.1 13.5 26.3 17.7 ...$ smoothness_se    : num  0.00805 0.00747 0.00516 0.01127 0.00501 ...$ compactness_se   : num  0.0118 0.03581 0.00936 0.03498 0.01485 ...$ concavity_se     : num  0.0168 0.0335 0.0106 0.0219 0.0155 ...$ points_se        : num  0.01241 0.01365 0.00748 0.01965 0.00915 ...$ symmetry_se      : num  0.0192 0.035 0.0172 0.0158 0.0165 ...$ dimension_se     : num  0.00225 0.00332 0.0022 0.00344 0.00177 ...$ radius_worst     : num  13.5 11.9 12.4 11.9 16.2 ...$ texture_worst    : num  15.6 22.9 26.4 15.8 15.7 ...$ perimeter_worst  : num  87 78.3 79.9 76.5 104.5 ...$ area_worst       : num  549 425 471 434 819 ...$ smoothness_worst : num  0.139 0.121 0.137 0.137 0.113 ...$ compactness_worst: num  0.127 0.252 0.148 0.182 0.174 ...$ concavity_worst  : num  0.1242 0.1916 0.1067 0.0867 0.1362 ...$ points_worst     : num  0.0939 0.0793 0.0743 0.0861 0.0818 ...$ symmetry_worst   : num  0.283 0.294 0.3 0.21 0.249 ...$ dimension_worst  : num  0.0677 0.0759 0.0788 0.0678 0.0677 ...

  通过运行结果我们可以较为明晰地观察到各列数据数据类型,为数据处理需要,利用stringsAsFactors= FALSE防止字符串string的列被辨认成factor。

2 .查看数据基本特征

  1)良性、恶性肿块数字特征

  运行代码:

1.   data1<-data[-1]                                   #剔除id特征数据
2.  table(data1$diagnosis)                            #输出良性、恶性肿块数量特征

  结果展示:

  B   M
357 212

  由运行结果我们可以观察到,案例中良性、恶性肿块数量分别为357,212。

  2)良性、恶性肿块数量占比

1.   summary(data1[c("radius_mean","area_mean","smoothness_mean")])     #输出部分案例特征信息

  结果展示:

radius_mean       area_mean      smoothness_mean  Min.   : 6.981   Min.   : 143.5   Min.   :0.05263  1st Qu.:11.700   1st Qu.: 420.3   1st Qu.:0.08637  Median :13.370   Median : 551.1   Median :0.09587  Mean   :14.127   Mean   : 654.9   Mean   :0.09636  3rd Qu.:15.780   3rd Qu.: 782.7   3rd Qu.:0.10530  Max.   :28.110   Max.   :2501.0   Max.   :0.16340

  通过运行结果显示。我们可以发现案例样本半径、面积、光滑度的样本特征分布情况,其中样本面积范围为143.5-2501.0;样本光滑度范围为0.05-0.16。

3.2 工具函数编写

1.标准化函数编写

  运行代码:

1.   normalize<-function(x){
2.    return((x-min(x))/(max(x)-min(x)))
3.  }                                                  #创建极大极小标准化函数
4.  normalize(c(1,2,3,4,5))                            #测试函数效果

2.工具函数性能测试

  运行代码:

> normalize(c(1,2,3,4,5))            #测试函数效果

   结果展示:

[1] 0.00 0.25 0.50 0.75 1.00

  通过函数测试效果,可以看出,标准化函数编写成功。

3.3 原始数据标准化

  运行代码:

1.   data2<-as.data.frame(lapply(data1[2:31],normalize))    #标准化数据,并转化为数据框格式
2.  summary(data2$area_mean)                               #输出area_mean特征

  结果展示:

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 0.0000  0.1174  0.1729  0.2169  0.2711  1.0000

4 模型建立及优化

4.1 训练集测试集划分

  由于样本数据本身为随机化数据,故以前469个样本作为训练集,后100个样本作为测试集,并将这些类的标签分别存储在相应因子向量中。

  运行代码:

1.   data2_train<-data2[1:469,]                      #创建训练集
2.  data2_test<-data2[470:569,]                     #创建测试集
3.  data2_train_lables<-data1[1:469,1]              #存储因子向量型训练集类标签
4.  data2_test_lables<-data1[470:569,1]             #存储因子向量型测试集类标签

4.2 基于数据训练模型

  运行代码:

1.   library("class")                    #加载包
2.  data2_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=21)                                         #将k值设置为21
3.  library("gmodels")                  #加载包
4.  CrossTable(x=data2_test_lables,y=data2_test_pred,prop.chisq = F)

  结果展示:

data2_test_pred
data2_test_lables Benigen Malignant Row Total
Benigen 61 0 61
1.000 0 0.610
0.968 0.000
0.610 0.000
Malignant 2 37 39
0.051 0.949 0.390
0.032 1.000
0.020 0.370
Column Total 63 37 100
0.630 0.370

  由运行结果显示:模型判断准确率达(37+61)/100=98%,其中共存在37个真阳性、2个假阴性案例。

4.3 改进模型,提高模型性能

1. 利用Z-分数标准化数据

  运行代码:

1.   data4<-as.data.frame(scale(data1[-1]))
2.  summary(data4$area_mean)
3.  data4_train<-data4[1:469,]
4.  data4_test<-data4[470:569,]
5.  data4_train_lables<-data1[1:469,1]
6.  data4_test_lables<-data1[470:569,1]
7.  data4_test_pred<-knn(train = data4_train,test = data4_test,cl<-data4_train_lables,k=21)
8.  CrossTable(x=data4_test_lables,y=data4_test_pred,prop.chisq = F)

  结果展示:

data4_test_pred
data4_test_lables Benigen Malignant Row Total
Benigen 61 0 61
1.000 0 0.610
0.968 0.000
0.610 0.000
Malignant 5 34 39
0.128 0.872 0.390
0.076 1.000
0.050 0.340
Column Total 66 34 100
0.660 0.340

  由运行结果显示:模型判断准确率达(61+34)/100=95%,其中共存在34个真阳性、5个假阴性案例,相比于极大极小标准化法,模型效能相对较低。

2.测试其他k值

  运行代码:

1.   data5_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=1)
2.  CrossTable(x=data2_test_lables,y=data5_test_pred,prop.chisq = F) #测试性能
3.  data6_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=5)
4.  CrossTable(x=data2_test_lables,y=data6_test_pred,prop.chisq = F) #测试性能
5.  data7_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=11)
6.  CrossTable(x=data2_test_lables,y=data7_test_pred,prop.chisq = F) #测试性能
7.  data8_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=15)
8.  CrossTable(x=data2_test_lables,y=data8_test_pred,prop.chisq = F) #测试性能
9.  data9_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=21)
10. CrossTable(x=data2_test_lables,y=data9_test_pred,prop.chisq = F) #测试性能
11. data10_test_pred<-knn(train = data2_train,test = data2_test,cl<-data2_train_lables,k=27)
12. CrossTable(x=data2_test_lables,y=data10_test_pred,prop.chisq = F) #测试性能

  结果展示:

K值 假阴性 假阳性 错误分类的百分比(%)
1 1 3 4
5 2 0 2
11 3 0 3
15 3 0 3
21 2 0 2
27 4 0 4

  由运行结果显示,K分别取1、5、11、15、21、27,当k,取21时,模型测试得出的准确率最高,达到了98%。

用kNN算法诊断乳腺癌--基于R语言相关推荐

  1. 广义相加模型(GAM)与向前逐步选择算法(基于R语言)

    广义相加模型(GAM)与向前逐步选择算法(基于R语言) 一.题目 (a)使用College数据集,以Outstate作为响应变量,其余作为预测变量,使用逐步回归得到一组合适的预测变量的子集. (b)将 ...

  2. 基于R语言混合效应模型(mixed model)案例研究

    全文链接: http://tecdat.cn/?p=2596 在本文中,我们描述了灵活的竞争风险回归模型.回归模型被指定为转移概率,也就是竞争性风险设置中的累积发生率(点击文末"阅读原文&q ...

  3. 基于R语言的聚类分析(k-means,层次聚类)

    今天给大家展示基于R语言的聚类,在此之前呢,首先谈谈聚类分析,以及常见的聚类模型,说起聚类我们都知道,就是按照一定的相似性度量方式,把接近的一些个体聚在一起.这里主要是相似性度量,不同的数据类型,我们 ...

  4. 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

    Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...

  5. r语言pls分析_基于R语言的PLS算法的实现解读.pptx

    基于R语言的PLS算法的实现及研究 目录 使用的开发工具 偏最小二乘的设计思想 基于R语言.MATLAB的偏最小二乘的实现 通径分析 测定系数 实验分析 使用的开发工具 R 语言(R是用于统计分析.绘 ...

  6. 基于R语言的多元线性回归--我国经济增长的定量研究

    基于R语言的多元线性回归--我国经济增长的定量研究 一.实验介绍 1.1 实验内容 经济增长一直以来都是我国宏观经济政策的目标之一,研究影响经济增长的因素对促进我国经济快速发展有着重要意义.本实验运用 ...

  7. python对电影进行预测评分_基于R语言构建的电影评分预测模型

    原标题:基于R语言构建的电影评分预测模型 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数据分析 ...

  8. Protein Cell:基于R语言的微生物组数据挖掘最佳流程(大众评审截止14号晚6点)...

    Protein & Cell综述:基于R语言的微生物组数据挖掘的最佳流程 近日,中国农业科学院刘永鑫组联合南京农业大学袁军组在国际期刊 Protein & Cell (IF = 15. ...

  9. canoco5主成分分析步骤_基于R语言的主成分分析

    基于R语言的主成分分析 加入的SPSS群里有人问,怎么用SPSS进行主成分分析.确实没有注意到这种操作.很好奇,于是翻了翻孙振球的<医学统计学>,发现主成分分析这一块,竟使用了SAS!后来 ...

最新文章

  1. mysql 硬解析 软解析_ORACLE sql语句的硬解析与软解析(收藏)
  2. iOS核心动画高级技术(十二) 性能调优
  3. 小学五年级计算机进度安排,五年级下册信息技术年度教学计划
  4. jquery为图片添加事件
  5. jQuery学习笔记之extend方法小结
  6. Loadrunner在post请求的cookie中插入其它多个值
  7. HashMap 怎么 hash?又如何 map?
  8. exxi6.7如何传文件到win7_比QQ直传快100倍!它让PC、安卓、iPhone光速互传文件
  9. 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
  10. Dubbo管理端安装
  11. 传递function_Excel VBA解读(132): 调用Function过程的4种方式
  12. 微信小程序为什么会成为了实体店“上线”的最优选择?
  13. 基于PHPCMS的SQL注入(Havij)
  14. 【鱼眼镜头1】鱼眼镜头的四种投影模型(指导镜头的设计),中央镜头综述
  15. 为什么使用多态?实现多态的有哪些方式?
  16. sophix热修复技术了解
  17. 重装win10专业版系统
  18. 我们为什么来到这个世界上?--黄金雄(杰西)
  19. 音频格式简介和PCM转换成WAV
  20. 设计功底如何得到提升 高效排版的技巧有哪些

热门文章

  1. 鲁大师历经18年的风雨后,又一重量级评测即将诞生
  2. 天宝营养冲刺深交所IPO:业绩明显波动,深创投是股东
  3. 支付宝服务商条码付,直接打款给签约子商户方法
  4. RK3568 Android11从入门到实战项目专栏目录及介绍
  5. 【Linux】使用grep命令查找文件内容
  6. HyperLynx(十)BoardSim和PCB板级仿真分析(一)
  7. PHP将图片和文字合成到一张背景图上
  8. 供应链协作平台产品设计思维导图
  9. Android粒子篇之Bitmap像素级操作
  10. 关于大脑记忆可视化的初步尝试(一)