机器学习算法的R语言实现(二):决策树

1、介绍

?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法。在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程。

?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91

?

可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测)。决策树具有直观、易于解释的特性。

2、决策树生成算法

?本文主要讨论如何由一个给定的训练集生成一个决策树。如果都一个数据集合$D$,其特征集合为$A$,那么以何种顺序对A中的特征进行判断就成为决策树生成过程中的关键。首先给出一个决策树生成算法-ID3算法(参考《统计学习方法》李航著)

--------------------我是算法开始分割线-------------------------------------------

ID3算法:

输入:训练数据集D,特征集A,阈值e

输出:决策树T

(1)若D中所有样本属于同一类Ck,则T为单节点树,并将类Ck作为该节点的类标记,返回T;

(2)A为空集,T为单节点树,将D中实例数最大的类Ck作为该节点的类标记,返回T;

(3)否则,计算A中各特征对D的信息增益,选择信息增益最大的特征值Ag;

(4)如果Ag<e,则置T为单节点树,将D中实例数最大的类Ck作为该节点的类标记,返回T;

(5)否则,对Ag的每一个可能的取值ai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树T,返回T;

(6)对第i个子节点,以Di为训练集,以 A-{Ag}为特征集,递归调用(1)~(5)步,得到子树Ti,返回Ti。

--------------------我是算法结束分割线-------------------------------------------

算法第(3)步中,信息增益是评估每一个特征值对D的划分效果,划分的原则为将无序的数据变得尽量有序。评价随机变量不确定性的一个概念是熵,熵越大,不确定性越大。如果确定一个特征Ag,在确定该特征前后,D的熵的变化值就是特征Ag的信息增益。

3、熵及信息增益

熵:

设X是一个取有限个值(n)的离散随机变量,其概率分布为

\[P(X=x_{i})=P_{i}, i=1,2,...,n\]

则随机变量X的熵定义为

\[H(x) =  - \sum\limits_{i = 1}^n {{P_i}\log {P_i}} \]

信息增益:

训练集为\(D\),\(|D|\)为样本容量,设有k个类\({C_k}\),k=1,...k, \({|C_k|}\)为类\({C_k}\)的样本个数,且有\(\sum\limits_{i = 1}^k {|{C_k}|}  = |D|\)

设特征A有n个不同取值\(\{ {a_{1,}}{a_2}, \cdots ,{a_n}\} \)  ,根据A的值,将D划分为n个子集\({D_1},{D_2}, \cdots ,{D_n}\), \({|D_i|}\)为\({D_i}\) 的样本数,\(\sum\limits_{i = 1}^n {|{D_i}|}  = |D|\)。

记子集\({D_i}\)中属于类\({C_k}\)的样本集合为\({D_{ik}}\),即\({D_{ik}} = {D_i} \cap {C_k}\)。

\({|D_{ik}|}\)为\({D_{ik}}\)的样本个数。

(1)数据集D的经验熵H(D)

\[H(D) =  - \sum\limits_{k = 1}^K {\frac{{|{C_k}|}}{{|D|}}{{\log }_2}} \frac{{|{C_k}|}}{{|D|}}\]

(2)特征A对数据集D的经验条件熵H(D|A)

\[H(D|A) = \sum\limits_{i = 1}^n {\frac{{|{D_i}|}}{{|D|}}H({D_i}) =  - } \sum\limits_{i = 1}^n {\frac{{|{D_i}|}}{{|D|}}\sum\limits_{k = 1}^K {\frac{{|{D_{ik}}|}}{{|{D_i}|}}} } {\log _2}\frac{{|{D_{ik}}|}}{{|{D_i}|}}\]

(3)计算信息增益

\[g(D,A) = H(D) - H(D|A)\]

信息增益越大,表示A对D趋于有序的贡献越大。

来自为知笔记(Wiz)

机器学习算法的R语言实现(二):决策树,布布扣,bubuko.com

时间: 2024-12-21 04:06:11

机器学习算法的R语言实现(二):决策树的相关文章

机器学习算法的R语言实现(二):决策树算法

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

Bagging算法的R语言实现

bagging 是bootstrap aggregating的缩写,是第一批用于多分类集成算法. bagging算法如下: 循环K次,每次都从样本集D中有放回地抽取样本集Di,这样总共得到k个样本集,用这K个样本集进行决策树生成,获得K个决策树模型,再将要检测的数据用这K个决策树模型进行多数表决,获得票数多的结论. 这种思想跟现代民主投票制度如出一辙,一个人再厉害,判断力也是有限的,但是把一群人聚合在一起投票,那单个人所犯错误的概率就会被抵消,最后得出结论的正确性会明显优于单个人做出决策. 个人

R语言基础(二) 可视化基础

> which.max(apply(x[c("x1","x2","x3")], 1, sum))49 > x$num[which.max(apply(x[c("x1","x2","x3")], 1, sum))][1] 2005138149 > hist(x$x1) > plot(x$x1,x$x2) > table(x$x1) 80 81 82 83 84

#r语言(二)笔记

#r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: v<-1 v1<-c(1,2,3) 或者 assign('v1',c(1,2,3)) v<-1:10 #1~10 is.vector(v) #向量的输出: v 或者 print(v1) #向量的操作函数: #排序:sort(v1) 倒序: rev(v1) #最大值 最小值 平均值 max(v

机器学习 视频教程 数据挖掘 实战 开发 应用 算法 案例 R语言

视频资料都逐个核对,清晰高质量,而且包含各种文档.软件安装包和源码!永久免费更新! 技术团队永久免费解答各种技术问题:Hadoop.Redis.Memcached.MongoDB.Spark.Storm.云计算.R语言.机器学习.Nginx.Linux.MySQL.Java EE..NET.PHP,节省您的时间! 获取视频资料和技术支持地址 ------------------------------------------------------------------------------

机器学习 1、R语言

R语言 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 特点介绍 •主要用于统计分析.绘图.数据挖掘 •R内置多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强. •因为S的血缘,R比其他统计学或数学专用的编程语言有更强的面向对象(面向对象程序设计)功能 官网:http://cran.r-project.org/ 其他介绍 •R的另一强项是绘图功能,制图具有印刷的素质

几种经典排序算法的R语言描述

1.数据准备 # 测试数组 vector = c(5,34,65,36,67,3,6,43,69,59,25,785,10,11,14) vector ## [1] 5 34 65 36 67 3 6 43 69 59 25 785 10 11 14 2.R语言内置排序函数 在R中和排序相关的函数主要有三个:sort(),rank(),order(). sort(x)是对向量x进行排序,返回值排序后的数值向量; rank()是求秩的函数,它的返回值是这个向量中对应元素的“排名”; order()

R语言数据结构二

上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需要,于是向量,矩阵,数组,数据框等变量类型应运而生. 向量:与我们在数学里面所学到的向量不同,R语言中的向量类似于我们在C语言中学习的数组,表示一个同种数据类型的数据集. 向量的创建:在R语言中使用c( )命令就创建了一个向量,任何类型的数据都可以组成向量,但一个向量里面的数据最好类型一致,不然会发

knn算法及R语言实现(1)

算法要点: knn(k-nearst neighbor) 1:k:=最近邻点数,D:=training set of data 2:for (待测点z) 3:计算z和每个样例(x,y)的距离 4:选择离z最近的k个训练样例的集合 5:统计第4步得到的点哪一类多,则z就属于哪一类 6:end for 数据: libraryI(ISLR) names(Smarket )#R自带数据 knn代码: attach(Smarket) train=(Year<2005)