在学习了jack cui机器学习博客后,为了给自己留下一个理解的笔记,本人比较笨,以后方便查看。他的博客地址在下方,写得很好。
决策树机器学习的一种分类方法,
拿相亲来说,决策树模型就是上面这一个,长方形为这个人的某个特征,决策树有内部节点和叶节点。内部节点就是这个长方形,是其特征。叶节点是椭圆,就是其得到的结果,是备胎还是值得考虑。而特征也是一个分类的规则条件。是将它继续划分到哪一边。每一个特征都会影响这个决策树分类的结果。
决策树的构建这一过程要分为3个步骤:
特征选择,决策树的生成和决策树的修剪。使用决策树做预测需要一下过程:收集数据-->准备数据-->分析数据-->训练算法-->测试算法-->使用算法
1.特征选择:
特征选择就是选取具有分类能力的特征,如果某个特征对本次分类不会产生影响或则说产生的影响很低,那么我们就可以选择抛弃这个特征。这个特征就是没有分类能力的,无用特征。而在选取特征上,有一个方法就是计算某个特征的信息增益,然后看其信息增益的大小,越大的说明它对本次分类结果影响越大,反之亦然。
这里有一个实例,就是贷款申请的样本数据:
这次我们通过说给的数据学习一个贷款申请的决策树,用于对未来某个客户提出申请贷款时,我们可以根据这个人的一些特征数据考虑是否给这个人贷款。
那么我们要构建一个决策树模型,就应该选择分类能力大的特征,现在看上面那个表单,不会看到什么不同。这是就需要我们计算信息增益了,在计算信息增益之前,我们需要计算一个香农熵。
(1)香农熵(经验熵)

所以H(D)经验熵为0.971
那么现在需要的一个就是条件熵,也就是某个特征的信息增益:
在上面我给的那个博客地址上已经讲得很好了,很容易理解
以贷款申请样本数据表为例进行说明。看下年龄这一列的数据,也就是特征A1,一共有三个类别,分别是:青年、中年和老年。我们只看年龄是青年的数据,年龄是青年的数据一共有5个,所以年龄是青年的数据在训练数据集出现的概率是十五分之五,也就是三分之一。同理,年龄是中年和老年的数据在训练数据集出现的概率也都是三分之一。现在我们只看年龄是青年的数据的最终得到贷款的概率为五分之二,因为在五个数据中,只有两个数据显示拿到了最终的贷款,同理,年龄是中年和老年的数据最终得到贷款的概率分别为五分之三、五分之四。所以计算年龄的信息增益,过程如下:
好了,现在就来解读整个代码,这也是我这个小白写笔记的原因,方便以后复习
在编写代码之前,我们先对数据集进行属性标注。
- 年龄:0代表青年,1代表中年,2代表老年;
- 有工作:0代表否,1代表是;
- 有自己的房子:0代表否,1代表是;
- 信贷情况:0代表一般,1代表好,2代表非常好;
- 类别(是否给贷款):no代表否,yes代表是。
- from math import log
- '''''
- 函数说明:
- 创建测试数据集
- Parameters(参数):
- 无
- returns:
- dataSet:数据集
- labels 分类属性
- '''
- def createDataSet():
- dataSet = [[0, 0, 0, 0, 'no'], #数据集
- [0, 0, 0, 1, 'no'