
分类(Classification)任务就是通过学习获得一个目标函数(Target Function)f, 将每个属性集x映射到一个预先定义好的类标号y。
分类任务的输入数据是记录的集合,每条记录也称为实例或者样例。用元组(X,y)表示,其中,X 是属性集合,y是一个特殊的属性,指出样例的类标号(也称为分类属性或者目标属性)。
解决分类问题的一般方法分类技术是一种根据输入数据集建立分类模型的系统方法。
分类技术一般是用一种学习算法确定分类模型,该模型可以很好地拟合输入数据中类标号和属性集之间的联系。学习算法得到的模型不仅要很好拟合输入数据,还要能够正确地预测未知样本的类标号。因此,训练算法的主要目标就是要建立具有很好的泛化能力模型,即建立能够准确地预测未知样本类标号的模型。
分类方法的实例包括:决策树分类法、基于规则的分类法、神经网络、支持向量机、朴素贝叶斯分类方法等。
通过以上对分类问题一般方法的描述,可以看出分类问题一般包括两个步骤:
模型构建(归纳)
通过对训练集合的归纳,建立分类模型。
预测应用(推论)
根据建立的分类模型,对测试集合进行测试。
决策树是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。
决策树的优点
与决策树相关的重要算法:CLS, ID3,C4.5,CART
决策树的基本组成部分:决策结点、分支和叶子。
决策树中最上面的结点称为根结点,是整个决策树的开始。每个分支是一个新的决策结点,或者是树的叶子。每个决策结点代表一个问题或者决策.通常对应待分类对象的属性。每个叶结点代表一种可能的分类结果。
在沿着决策树从上到下的遍历过程中,在每个结点都有一个测试。对每个结点上问题的不同测试输出导致不同的分枝,最后会达到一个叶子结点。这一过程就是利用决策树进行分类的过程,利用若干个变量来判断属性的类别。
ID3ID3算法主要针对属性选择问题。是决策树学习方法中最具影响和最为典型的算法。
该方法使用信息增益度选择测试属性。
Shannon1948年提出的信息论理论。事件ai的信息量I(ai )可如下度量:
其中p(ai)表示事件ai发生的概率。
假设有n个互不相容的事件a1,a2,a3,….,an,它们中有且仅有一个发生,则其平均的信息量可如下度量:
由上式,对数底数可以为任何数,不同的取值对应了熵的不同单位。
通常取2,并规定当p(ai)=0时:
用熵度量样例的均一性
熵刻画了任意样例集合 S 的纯度
给定包含关于某个目标概念的正反样例的样例集S,那么 S 相对这个布尔型分类(函数)的熵为:
信息论中对熵的一种解释:熵确定了要编码集合S中任意成员的分类所需要的最少二进制位数;熵值越大,需要的位数越多。
更一般地,如果目标属性具有c个不同的值,那么 S 相对于c个状态的分类的熵定义为:
例如:求集合R = {a,a,a,b,b,b,b,b}的信息熵
理解信息熵:
用来衡量给定的属性区分训练样例的能力
ID3算法在生成 树的每一步使用信息增益从候选属性中选择属性
用信息增益度量熵的降低程度
属性A 的信息增益,使用属性A分割样例集合S 而导致的熵的降低程度
Gain (S, A)是在知道属性A的值后可以节省的二进制位数
信息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度。
理解信息增益:
熵:表示随机变量的不确定性。
条件熵:在一个条件下,随机变量的不确定性。
信息增益:熵 - 条件熵。表示在一个条件下,信息不确定性减少的程度。
例如:
假设X(明天下雨)的信息熵为2(不确定明天是否下雨),Y(如果是阴天则下雨)的条件熵为0.01(因为如果是阴天就下雨的概率很大,信息就少了) 信息增益=2-0.01=1.99。信息增益很大。说明在获得阴天这个信息后,明天是否下雨的信息不确定性减少了1.99,所以信息增益大。也就是说阴天这个信息对下雨来说是很重要的。
ID3 决策树建立算法
小结
ID3算法是一种经典的决策树学习算法,由Quinlan于1979年提出。ID3算法的基本思想是,以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息量最多的属性,亦即能使熵值变为最小的属性,以构造一颗熵值下降最快的决策树,到叶子节点处的熵值为0。此时,每个叶子节点对应的实例集中的实例属于同一类。
安装rpart、rpart.plot、rattle三个数据包
rpart:用于分类与回归分析
rpart.plot:用于绘制数据模型
rattle:提供R语言数据挖掘图形界面
安装语句:
rpart:install.packages("rpart")
rpart:install.packages("rpart.plot")
install.packages("rattle")
以iris数据集为例:
训练集:
iris.train=iris[2*(1:75)-1,] 返回原数据集1、3、5、7、8、......、149奇数行行所有列的数据
测试集:
iris.test= iris[2*(1:75),] 返回原数据集2、4、6、8、10、......、150偶数行所有列的数据
加载rpart包:
> library("rpart")
> model <- rpart(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris.train, method="class")
rpart参数解释:
rpart(formula, data, method, parms, ...)
rpart.plot(model)
或
fancyRpartPlot(model)
iris.rp3=predict(model, iris.test[,-5], type="class")
iris.test[,-5]的意思是去掉原测试集第5列后的数据
table(iris.test[,5],iris.rp3)
可得accuracy=(25+24+22)/75=94.67%
asRules(model)