1.目的:衡量好问题
decision tree 是一个决策的模型:就是不断设置二元问题,回答是与否,然后像树一样不断分叉下去,最后无论是什么样的情况,都能找到对应的一个决策答案。
上面说的,学习决策树,就是学习一系列if/else问题,使我们能以最快的速度得到正确答案。
那么,这个if/else问题应该设为什么?换而言之,衡量这个设的问题的好的标准到底是什么?→找出对目标变量影响的最大的一个。→对目标变量来说信息最大的一个。→对目标变量来说,最能提取出共性的一个问题 → 这个问题提出来后,分类成的两堆是最有共性的。eg.分开苹果和香蕉,那么我提出的这个问题是否是圆形?就将这一堆水果直接分成了香蕉和苹果。但是我提出一个问题,是否是甜的?那么肯定分出的两堆都是各有苹果各有香蕉。
我们把这个全分为香蕉或者全分为苹果的评判的结果称为,pure.纯的。到pure的时候,我们就可以停止预测了。因为到现在答案非常明确,要不是苹果要不是香蕉。
问题是,提出一个好的问题是很难的,不那么好的问题得到的结果就不会那么纯。但是我们为了提出一个好的问题,而要付出很多的时间精力也是不值当的,不如一堆苹果里夹着一个香蕉,这种分类结果我也可以接受。也就是说,纯度不高我也能接受。
2. 用纯度。纯度的表达:
2.1 entropy熵
无论如何,要如何准确衡量这个纯度呢?毕竟我们是为了和机器进行交流的,需要很明确的数学表达。大概思路是,我们去看看杂质含量有多少,杂质越多就越不纯。
解释一下这个式子,举个例子:
这个方法,其实就是 -sum(权重×杂质)。杂质的衡量用log2(),带符号是因为小于一之后log是负数,想把它变正。就是加权之后,H越大代表杂质越多,越不纯。那么这个问题提的就不太好。
2.2 Gini entropy
还有一个方法,Gini:
这个就是简单点儿,把原来衡量杂质的log变成了P概率。然后就不需要符号了,更简单一点儿。
2.1 Information Gini(IG)
- information gain
这个计算的是信息增益。就是说我采取了一个分类方法,然后我去衡量采取了这个方法前后,情况有没有变得更好。
这个情况,指的是 有序的状态 = 低熵 = 纯度更高。
好比你要收拾你的屋子,你希望房子越干净越好,这就意味着相似的东西都在一个地方。厨房用品都在厨房,洗浴用品都在浴室。房子变得很有序,每次你想要什么东西的时候就可以直接拿到。熵,可以理解为无序状态。熵越高越混乱,那么低熵就以为着有序。
想想最开始说得例子,我们希望二叉树分类结果是使最后的节点是纯的,即低熵。
如果我们不进行分类,那么最开始的原数据肯定是高熵的,再我们整理分类后就可以变得低熵了。衡量我们整理得好不好的方法,就是看熵的变化程度。上面的这个式子就是在描述这样一个事情。
H(D)是说我原本的数据集D的熵H是怎么样的
H(D|A) 是常见的条件概率,就是说在我实行了A这一个举动之后,数据集D的熵H是什么样的。
H(D|A)这个怎么求呢?
简单来说就是采取了这个方法之后,加权平均我的无序熵是什么。
网上有蛮多的例子,主要是没有找到我之前看到的那个很好的图表,所以就不粘贴了。