机器学习中分类和预测算法的评估
- 分类达到的准确率是多少
- 算法复杂度高低影响其速度
- 数据中有噪音,关键值有缺失时,算法表现是否依旧稳定与准确,体现其健壮性
- 数据规模非常大时,同样的算法,是否会产生问题,其可规模性
- 当算算法做出特征值的选择和归类的时候,这种归类能否解释直觉和观察实相符的,能否非常容易的解释学习出来的模型,即可解释性
什么是决策树/判定树(decision tree)?
-
根据如下实例树的最顶层是根结点,出去玩与天气因素的关系数据集,判定树是一个类似于如下的流程图的树结构:其中,每个内部结点表示在一个属性(例如 根节点outlook)上的测试,每个分支代表一个属性输出(sunny,overcast,rain),而每个树叶结点代表类或类分布。,
构造决策树的基本算法
- 收集卖电脑用户的信息数据集[用户属性,要判别的类别标记即用户行为]
熵(entropy)概念:
- 信息和抽象,是否可度量度量?当然可以,那就是“信息熵”,香农(Shannon)在他著名的《通信的数学原理》论文中指出:“信息是用来消除随机不确定性的东西”,并提出了“信息熵(entropy)”的概念(借用了热力学中熵的概念),来解决信息的度量问题。
信息熵是消除不确定性所需信息量的度量,也即未知事件可能含有的信息量。一个事件或一个系统,准确的说是一个随机变量,它有着一定的不确定性。例如,“除东道主俄罗斯外,哪31个国家能进军2018年俄罗斯世界杯决赛圈”,这个随机变量的不确定性很高,要消除这个不确定性,就需要引入很多的信息,这些很多信息的度量就用“信息熵”表达。需要引入消除不确定性的信息量越多,则信息熵越高,反之则越低。例如“中国男足进军2018年俄罗斯世界杯决赛圈”,这个因为确定性很高,几乎不需要引入信息,因此信息熵很低。一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者 是我们一无所知的事情,需要了解大量信息也就是信息量的度量就等于不确定性的多少
例子:举个吴军在《数学之美》中一样的例子,假设世界杯决赛圈32强已经产生,那么随机变量“2018年俄罗斯世界杯足球赛32强中,谁是世界杯冠军?”的信息量是多少呢? 根据香农(Shannon)给出的信息熵公式,对于任意一个随机变量X,它的信息熵定义如下,单位为比特(bit):
那么上述随机变量(谁获得冠军)的信息量是:
H=-(p1·logp1+p2·logp2+…p32·logp32)其中,p1,p2,…,p32分别是这32强球队夺冠的概率。
吴军的书中给出了几个结论:一是32强球队夺冠概率相同时,H=5;二是夺冠概率不同时,H<5;三是H不可能大于5。对于第一个结论:结果是很显然的,夺冠概率相同,即每个球队夺冠概率都是1/32,所以H=-((1/32)·log(1/32)+(1/32)·log(1/32)+…+(1/32)·log(1/32))=-log(1/32)=log(32)=5(bit)
对于第二个结论和第三个结论:使用拉格朗日乘子法进行证明,详见《求约束条件下极值的拉格朗日乘子法》。这实际上是说系统中各种随机性的概率越均等,信息熵越大,反之越小。
从香农给出的数学公式上可以看出,信息熵其实是一个随机变量信息量的数学期望。
决策树归纳算法 (ID3)
1970-1980, J.Ross. Quinlan, ID3算法
选择属性判断结点,度量标准
- 根据信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D),通过A来作为节点分类获取了多少信息
不以任何属性来分的信息熵计算
以年龄 age 来分,年轻人概率占5/14,那么在和五个年轻人里面,购买电脑的信息熵5/14(-2/5log2/5-3/5log3/5)
二者差值,即为以年轻人为分类的信息获取量
类似,以其他属性进行分类的信息获取量
Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048
故,选择age 作为第一个根节点
如上表可见,当age为中年人时,已经不需要再分了,而在youth和senior还可以构建下一个节点,此时还剩income,student,credit_rating这三种属性,同样的方法,这分别以这三种属性的作为分类的信息获取量谁最大,就以该属性为新的节点,不断重复此过程,寻找新的属性作为节点,增长决策树,直到不需要再分(只有一种目标类出现的时候)或者满足某种停止条件时,这就是ID3。
ID3算法总结:
- 树以代表训练样本的单个结点开始(步骤1)。
- 如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。
否则,算法使用称为信息增益(信息获取度)的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。 - 在算法的该版本中,所有的属性都是分类的,即离散值。连续属性必须离散化, 比如 age阈值化。
- 对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。
- 算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)比如 age 在后代不考虑。
递归划分步骤仅当下列条件之一成立停止: - (a) 给定结点的所有样本属于同一目标类(步骤2 和3)。
- (b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。
这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结
点样本的类分布。 - (c) 分枝
test_attribute = a i 没有样本(步骤11)。在这种情况下,以 samples 中的多数类
创建一个树叶(步骤12)
其他算法:
C4.5: (Quinlan)
Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)
共同点:都是贪心算法,自上而下(Top-down approach)
区别:属性选择度量方法不同: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)
3.2 如何处理连续性变量的属性? (离散化)
树剪枝叶 (避免overfitting),背景:树增长时深度太大,属性分的太细,训练集还好,给一些测试集就表现差
1. 先剪枝 (分到一定程度,根据类多少,不去增长树了)
2. 后剪枝 (完全把树建好,之后根据一定的标准不如类之间的纯度,把部分叶子减掉)
决策树的优点:
- 直观,便于理解,小规模数据集有效
决策树的缺点:
- 处理连续变量不好(离散化,阈值化的时候,取值范围对结果影响较大)
- 类别较多时,错误增加的比较快
- 可规模性一般(数据集大的时候)