一. 决策树
  
  决策树(Decision Tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法。决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型。树中的每个非叶子节点记录了使用哪个特征来进行类别的判断,每个叶子节点则代表了最后判断的类别。根节点到每个叶子节点均形成一条分类的路径规则。而对新的样本进行测试时,只需要从根节点开始,在每个分支节点进行测试,沿着相应的分支递归地进入子树再测试,一直到达叶子节点,该叶子节点所代表的类别即是当前测试样本的预测类别。
  
  如下图 "年龄"为决策树的根节点,"年龄"为"长相"的父节点,"长相"为"年龄"的子节点,"见"与"不见"为叶子节点,再该树中同时也为标签,“长相”"年龄"等特征称为该树的属性。
  
  决策树的学习采用的是自顶向下的学习。
  
  建立决策树的基本思想为:以信息熵为度量构造以可熵值下降最快的树,到叶子节点处熵值为0。
  
  建立决策树的关键:即在当前状态下选择哪个属性(最优属性)作为分类依据。
  
  根据不同目标函数,建立决策树主要有三种算法。
  
  a) ID3 b)C4.5 c)CART
  
  a) ID3
  
  ID3算法是决策树的一种,它是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。ID3算法,即Iterative Dichotomiser 3,迭代二叉树3代,是Ross Quinlan发明的一种决策树算法,这个算法的基础就是上面提到的奥卡姆剃刀原理,越是小型的决策树越优于大的决策树。即**遍历所有特征,选择信息增益最大的特征作为当前的分裂特征。
  
  特征A对训练数据集D的信息增益公式表达为g(D,A)=H(D)-H(D|A)。
  
  b) C4.5
  
  C4.5是Ross Quinlan在1993年在ID3的基础上改进而提出的。.ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大).为了避免这个不足C4.5中是用**信息增益率(gain ratio)**来作为选择分支的准则。信息增益率通过引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature。所以C4.5在处理未知数据上相比较于ID3具有更好的泛化能力。
  
  信息增益率公式表达为:
  
  选择具有最大增益率的属性作为分裂属性。
  
  c) CART
  
  Gini系数
  
  Gini系数可以用于评估属性与标签之间的差异。该系数主要在CART中使用。Gini系数度量数据划分或训练元组集D的不纯度,其公式可表示为:
  
  二.随机森林
  
  1.Boostraping策略
  
  源自英文"pull up by your own boostraps",意思是依靠自己的资源,称为自助法,即依靠自身力量不借助外力让自己变得更好。它是一种有放回的抽样方法。
  
  2.Begging(boostrap aggregation)策略
  
  a) 从样本集中重采样(有重复的)选出n个样本
  
  b) 在所有属性上,对这n个样本建立分类器(ID3,C4.5,CART,SVM,Logistic回归等)
  
  c) 重复以上两步m次,即获得m个分类器
  
  d) 将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类
  
  3.随机森林
  
  随机森林在begging基础上做了修改。
  
  a)从样本集中用Boostrap采样选出n个样本;
  
  b)从所有属性中随机选择k个属性,选择最佳分割属性最为节点建立CART决策树;
  
  c)重复以上两步m次,即建立了m棵CART决策树;
  
  d)这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类
  
  注:随机森林的随机性体现在去样本的随机性和属性的随机性两方面。
  
  三.Adaboost
  
  Adaboost,是应为"Adaptive Boosting"(自适应增强)的缩写,是一种机器学习方法,有Yoav Freund和Robert Schapire提出。
  
  AdaBoost方法的自适应在于:前一个分类器分错
  
  的样本会被用来训练下一个分类器。AdaBoost方
  
  法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。
  
  Adaboost(对于m=1,2,…M)方法如下:
  
  设训练数据集T={(x1,y1), (x2,y2)…(xN,yN)}
  
  初始化训练数据的权值分布
  
  使用具有权值分布Dm的训练数据集学习,
  
  得到基本分类器
  
  计算Gm(x)在训练数据集上的分类误差率
  
  计算Gm(x)的系数
  
  更新训练数据集的权值分布
  
  这里,Zm是规范化因子
  
  它的目的仅仅是使Dm+1成为一个概率分布
  
  构建基本分类器的线性组合
  
  得到最终分类器
  
  Adaboost算法举例
  
  给定下列训练样本,试用Adaboost算法学习一个强分类器。
  
  解
  
  1.初始化训练数据的权值分布(m=1)
  
  由
  
  得
  
  2.在权值分布为D1的训练数据上,阈值v取2.5
  
  时误差率最低,故基本分类器为:
  
  3.计算G1(x)在训练数据集上的误差率
  
  e1=P(G1(xi)≠yi) =0.3
  
  4.计算G1的系数:
  
  5.f1(x)=0.4236*G1(x)
  
  分类器sign(f1(x))在训练数据集上有3个误分
  
  类点。
  
  6.更新训练数据的权值分布(m=2):

- (void)useBlockOperationAddExecutionBlock {

// 1.创建 NSBlockOperation 对象
NSBlockOperation *op www.michenggw.com= [NSBlockOperation blockOperationWithBlock:^{
for (int i =www.mhylpt.com 0; i < 2; i++) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"1---%@", [NSThread currentThread]); // 打印当前线程
}
}];

// 2.添加额外的操作
[op addExecutionBlock:^{
for (int i = 0; i <www.gcyL157.com 2; i++) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"2---%@", [NSThread currentThread]); // 打印当前线程
  
  由
  
  得D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715,
  
  0.0715,0.1666, 0.1666, 0.1666, 0.0715)
  
  7.在权值分布为D2的训练数据上,阈值v取8.5
  
  时误差率最低,故基本分类器为:
  
  8.G2(x)在训练数据集上的误差率
  
  e2=P(G2(xi)≠yi) www.feifanyule.cn=0.2143(0.0715*3)
  
  9.计算G2的系数:
  
  10.f2(x)=0.4236G1(x) + 0.6496G2(x)
  
  分类器sign(f2(x))在训练数据集上有3个误分类点
  
  11.更新训练数据的权值分布(m=3.):
  
  由
  
  得D3=(0.0455, 0.0455, 0.0455, 0.1667, 0.1667,
  
  0.01667,0.1060, 0.1060, 0.1060, 0.0455)
  
  12.在权值分布为D3的训练数据上,阈值v取5.5
  
  时误差率最低,故基本分类器为:
  
  13.G3(x)在训练数据集上的误差率
  
  e3=P(G3(xi)≠yi) =www.haom178.com/ 0.1820(0.0455*4)
  
  14.计算G3的系数:
  
  15.f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)
  
  分类器sign(f3(x))在训练数据集上有0个误分类点
  
  16.故选择sign(f3(x))分类器。
  
 

最新文章

  1. Something Wrong or Something Right
  2. vijos1910解方程
  3. phpstudy linux (lnmp,lamp)一键安装
  4. 秒杀 ILSpy 等反编译利器 DotNet Resolver
  5. ABP中动态WebAPI原理解析
  6. 华丽的网上突出代码组件CodeMirror
  7. JS检测图片的大小
  8. 1.如何使用vbs打开网页并且登陆
  9. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
  10. MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用
  11. [TJOI 2017]可乐
  12. DSAPI 远程协助之获取当前鼠标指针坐标及样式
  13. CentOS:xmr-stak-cpu安装,服务器CPU挖Monero门罗币
  14. Go - WaitGroup
  15. Maven、SpringBoot框架结构优化
  16. 如何删除WINDOWS中服务中不再使用的服务?
  17. 2017秋季面向对象程序设计(Java)教材、教学纲要、考核要求
  18. ubuntu12.04 lts 安装gcc 4.8
  19. linux下升级npm以及node
  20. Git的常用撤销技巧与解决冲突方法

热门文章

  1. tcl之控制流-while
  2. 基于THINKPHP+layui+Ajax无刷新实现图片上传预览
  3. python爬虫:利用BeautifulSoup爬取链家深圳二手房首页的详细信息
  4. Django项目发布到Apache2.4配置mod_wsgi,解决遭遇的各种坑。
  5. 指定的参数已超出有效值的范围。 参数名: site
  6. C语言基础篇(三) 指针
  7. Alice’s Stamps HDU - 6249 (区间DP)
  8. JAVA运行机制
  9. CentOS 使用 LAMP 环境开启 SSL 搭建 WordPress
  10. notepad++ 换行技巧 log换行