经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
机器学习 - 相关概念与实现流程
来源:cnblogs  作者:划水De雁晓明  时间:2021/1/4 9:44:12  对本文有异议

 

一个重要的闭环:

机器学习-数据挖掘的流程(CRISP-DM:围绕数据进行如下6个活动进行闭环式地探索活动

  1. 商业理解
  2. 数据理解
  3. 数据准备
  4. 建立模型
  5. 模型评估
  6. 方案实施

 

一个重要的概念:

特征工程:最大限度地从原始数据中提取特征以供算法和模型使用,包括如下几个主要部分:

  • 数据预处理:标准化、缩放、缺失、变换、编码等
  • 特征产生:结合业务数据、派生新的特征
  • 特征选择:通过各种统计量、模型评分等,筛选合适的特征
  • 降维:PCALDA等减少特征个数

 

两个重要的算法: 

决策树:

  • 构建决策树

 

 

 

  • 如何选择当前最佳特征”:

其中包含的主要概念:

信息熵:信息论理的概念,香农提出;描述混乱程度的度量;取值范围:0~1(值越大,越混乱)。计算公式如下:

   

信息增益:信息是确定性的增加;从一个状态到另一个状态信息的变化;信息增益越大,对确定性贡献越大。

 

 

  • 决策树算法的主要分类
  1. ID3系列Iterative Dichotomiser 3, 迭代树三代):核心是信息熵,根据信息增益决策树的节点;存在一些问题:信息度量不合理-倾向于选择取值多的字段;输入类型单一 - 离散型;不做剪枝,容易过拟合。
  2. C4.5:和ID3相比的改进:用信息增益率代替信息增益;能对连续属性进行离散化,对不完整数据进行处理;进行剪枝。
  3. C50C4.5相比的改进:使用了boosting; 前修剪、后修剪
  4. CARTClassification and Regression Tree: 核心是基尼系数Gini); 分类是二叉树;支持连续值和离散值;后剪枝进行修剪;支持回归,可以预测连续值

 

  • 决策树的具体施行
  • 集成学习:针对同一数据集,训练多种学习器,来解决同一问题。

  • Bagging: 有放回抽样构建多个子集;训练多个分类器;最终结果由各分类器结果投票得出;(实现非常简单)。

  • Boosting: 重复使用一类学习器来修改训练集;每次训练后根据结果调整样本的权重;每个学习器加权后的线性组合即为最终结果。

  • AdaBoost:

 

  • 其他实现方法:

Stacking: 由两级组成,第一级为初级学习器,第二级为高级学习器;第一级学习器的输出作为第二级学习器的输入。

 

 

 

随机森林

由许多决策树组成,树生成时采用了随机的方法;Smart Bagging;生成步骤:1.随机采样,生成多个样本集;2.对每个样本集构建决策树。

其优点包括:可以处理多分类;不会过拟合;容易实现并行;对数据集容错能力强。

 

参考 - 1. R语言运用随机森林的例子:

  1. ###################################################
  2. ### Gene (Feature) Selection 基因特征选择: 1.过滤方法;2.封装方法
  3. ###################################################
  4. if (!requireNamespace("BiocManager", quietly = TRUE))
  5. install.packages("BiocManager")
  6. BiocManager::install(version = "3.11")
  7. BiocManager::install(c("Biobase", "genefilter"))
  8. BiocManager::install(c("ALL"))
  9.  
  10. library(Biobase)
  11. library(ALL)
  12. data(ALL)
  13.  
  14. ALLb <- ALL[,tgt.cases]
  15.  
  16. rowIQRs <- function(em)
  17. rowQ(em,ceiling(0.75*ncol(em))) - rowQ(em,floor(0.25*ncol(em)))
  18. plot(rowMedians(es),rowIQRs(es),
  19. xlab='Median expression level',
  20. ylab='IQR expression level',
  21. main='Main Characteristics of Genes Expression Levels')
  22.  
  23. library(genefilter)
  24. ALLb <- nsFilter(ALLb,
  25. var.func=IQR,
  26. var.cutoff=IQR(as.vector(es))/5,
  27. feature.exclude="^AFFX")
  28. ALLb <- ALLb$eset
  29. es <- exprs(ALLb)
  30. dim(es)
  31.  
  32. #ANOVA过滤
  33. f <- Anova(ALLb$mol.bio,p=0.01)
  34. ff <- filterfun(f)
  35. selGenes <- genefilter(exprs(ALLb),ff)
  36.  
  37. sum(selGenes)
  38. ALLb <- ALLb[selGenes,]
  39. ALLb
  40.  
  41. es <- exprs(ALLb)
  42. plot(rowMedians(es),rowIQRs(es),
  43. xlab='Median expression level',
  44. ylab='IQR expression level',
  45. main='Distribution Properties of the Selected Genes')
  46.  
  47. # 用随机森林(适合用于处理包含大量特征的问题)进行过滤:随机森林由一组决策树构成,取决于分析的问题采用回归树还是分类树 - 每棵树都是通过自助法抽样(从原始数据集中用有放回抽样法随机抽取N个个案)进行训练
  48. # 对于回归问题,采用每棵树的预测值得平均值作为这些组合的预测值。对于分类问题,则采用投票机制
  49. featureNames(ALLb) <- make.names(featureNames(ALLb))
  50. es <- exprs(ALLb)
  51.  
  52. library(randomForest)
  53. dt <- data.frame(t(es),Mut=ALLb$mol.bio)
  54. rf <- randomForest(Mut ~ .,dt,importance=T)
  55. imp <- importance(rf)
  56. imp <- imp[,ncol(imp)-1]
  57. rf.genes <- names(imp)[order(imp,decreasing=T)[1:30]]
  58.  
  59. sapply(rf.genes,function(g) tapply(dt[,g],dt$Mut,median))
  60.  
  61. library(lattice)
  62. ordMut <- order(dt$Mut)
  63. levelplot(as.matrix(dt[ordMut,rf.genes]),
  64. aspect='fill', xlab='', ylab='',
  65. scales=list(
  66. x=list(
  67. labels=c('+','-','*','|')[as.integer(dt$Mut[ordMut])],
  68. cex=0.7,
  69. tck=0)
  70. ),
  71. main=paste(paste(c('"+"','"-"','"*"','"|"'),
  72. levels(dt$Mut)
  73. ),
  74. collapse='; '),
  75. col.regions=colorRampPalette(c('white','orange','blue'))
  76. )
  77.  
  78. #用特征聚类的组合进行过滤
  79. library(Hmisc)
  80. vc <- varclus(t(es))
  81. clus30 <- cutree(vc$hclust,30)
  82. table(clus30)
  83.  
  84. getVarsSet <- function(cluster,nvars=30,seed=NULL,verb=F)
  85. {
  86. if (!is.null(seed)) set.seed(seed)
  87.  
  88. cls <- cutree(cluster,nvars)
  89. tots <- table(cls)
  90. vars <- c()
  91. vars <- sapply(1:nvars,function(clID)
  92. {
  93. if (!length(tots[clID])) stop('Empty cluster! (',clID,')')
  94. x <- sample(1:tots[clID],1)
  95. names(cls[cls==clID])[x]
  96. })
  97. if (verb) structure(vars,clusMemb=cls,clusTots=tots)
  98. else vars
  99. }
  100. getVarsSet(vc$hclust)

 

2. R语言数据科学包列表 : https://www.cnblogs.com/yxmings/p/14213573.html  

 

原文链接:http://www.cnblogs.com/yxmings/p/14224216.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号