学习目标

  • 掌握决策树实现过程
  • 知道信息熵的公式以及作用
  • 知道信息增益的作用
  • 知道信息增益率的作用
  • 知道基尼指数则作用
  • 知道id3,c4.5,cart算法的区别
  • 了解cart剪枝的作用
  • 应用DecisionTreeClassifier实现决策树分类

    纪要

    4.1 决策树算法简介【**】

    1.简介

    1. 定义:<br /> 是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树

    4.2 决策树分类原理【**

    1.熵

    1. 用于衡量一个对象的有序程度<br /> 系统越有序,熵值越低;系统越混乱或者分散,熵值越高。

    2.信息熵

    1. 1.从信息的完整性上进行的描述:<br /> 当系统的有序状态一致时,数据越集中的地方熵值越小,数据越分散的地方熵值越大。<br /> 2.从信息的有序性上进行的描述:<br /> 当数据量一致时,系统越有序,熵值越低;系统越混乱或者分散,熵值越高。

    3.把信息转换成熵值

    1. -plogp

    4.2 决策树分类原理【*

    1.信息增益

    1. 信息增益 = entroy(前) - entroy(后)<br /> 注意:信息增益越大,我们优先选择这个属性进行计算<br /> 信息增益优先选择属性总类别比较多的进行划分

    2.信息增益率

    1. 维持了一个分离信息度量,通过这个分离信息度量当分母,进行限制

    3.基尼增益

    1.基尼值:
    1. 从数据集D中随机抽取两个样本,其类别标记不一致的概率<br /> GiniD)值越小,数据集D的纯度越高。
    2.基尼指数:
    1. 选择使划分后基尼系数最小的属性作为最优化分属性
    3.基尼增益:
    1. 选择基尼增益最大的点,进行优化划分
    4.基尼增益构造过程:
    1. 1.开始将所有记录看作一个节点<br /> 2.遍历每个变量的每一种分割方式,找到最好的分割点<br /> 3.分割成两个节点N1N2<br /> 4.N1N2分别继续执行2-3步,直到每个节点足够“纯”为止。
    5.决策树的变量可以有两种,分别对应的划分方式:
    1. 1.数字型<br /> 通过对数据取两个数字之间的中间值,进行划分<br /> 2.名称型<br /> 通过对属性的类别进行划分
    6.如何评估分割点的好坏?
    1. 主要看分割的是否纯

    4.三种算法对比:【**

    ID3 算法
    1. 采用信息增益作为评价标准<br /> 只能对描述属性为离散型属性的数据集构造决策树<br /> 缺点是倾向于选择取值较多的属性
    C4.5算法
    1. 用信息增益率来选择属性<br /> 可以处理连续数值型属性<br /> 采用了一种后剪枝方法<br /> 对于缺失值的处理<br /> 缺点是:C4.5只适合于能够驻留于内存的数据集
    CART算法
    1. C4.5不一定是二叉树,但CART一定是二叉树<br /> 是信息增益的简化版本

    4.3 cart剪枝

    1.剪枝原因

    1. 噪声、样本冲突,即错误的样本数据<br /> 特征即属性不能完全作为分类标准<br /> 巧合的规律性,数据量不够大。

    2.常用剪枝方法

    预剪枝
    1. 在构建树的过程中,同时剪枝<br /> eg:<br /> 限制节点最小样本数<br /> 指定数据高度<br /> 指定熵值的最小值
    后剪枝
    1. 把一棵树,构建完成之后,再进行从下往上的剪枝

    4.4 特征工程-特征提取【*

    1.特征提取

    1. 将任意数据(如文本或图像)转换为可用于机器学习的数字特征

    2.特征提取分类:

    1. 字典特征提取(特征离散化)<br /> 文本特征提取<br /> 图像特征提取(深度学习将介绍)

    3.api

    1. sklearn.feature_extraction

    4.字典特征提取

    1. 字典特征提取就是对类别型数据进行转换<br /> api:<br /> sklearn.feature_extraction.DictVectorizer(sparse=True,…)<br /> aparse矩阵<br /> 1.节省内容<br /> 2.提高读取效率<br /> 属性:<br /> DictVectorizer.get_feature_names() 返回类别名称<br /> 注意:<br /> 对于特征当中存在类别信息的我们都会做one-hot编码处理

    5.文本特征提取(英文)

    1. api:<br /> sklearn.feature_extraction.text.CountVectorizer(stop_words=[])<br /> stop_words -- 停用词<br /> 注意:没有sparse这个参数<br /> 单个字母,标点符号不做统计

    6.文本特征提取(中文)

    1. 注意:<br /> 1.在中文文本特征提取之前,需要对句子(文章)进行分词(jieba)<br /> 2.里面依旧可以使用停用词,进行词语的限制

    7.tfidf

    1. 1.主要思想:<br /> 如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类<br /> 2.tfidf<br /> tf -- 词频<br /> idf -- 逆向文档频率<br /> 3.api<br /> sklearn.feature_extraction.text.TfidfVectorizer<br /> 注意:<br /> 分类机器学习算法进行文章分类中前期数据处理方式

    4.5 决策树算法api【*】

    sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
    参数:
    criterion
    特征选择标准
    min_samples_split
    内部节点再划分所需最小样本数
    min_samples_leaf
    叶子节点最少样本数
    max_depth
    决策树最大深度

    4.6 案例:泰坦尼克号乘客生存预测【*

    1.流程分析

    1. 1.获取数据<br /> 2.数据基本处理<br /> 2.1 确定特征值,目标值<br /> 2.2 缺失值处理<br /> 2.3 数据集划分<br /> 3.特征工程(字典特征抽取)<br /> 4.机器学习(决策树)<br /> 5.模型评估

    2.可视化

    1. sklearn.tree.export_graphviz()

    3.小结

    1. 优点:<br /> 简单的理解和解释,树木可视化。<br /> 缺点:<br /> 决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。<br /> 改进:<br /> 减枝cart算法<br /> 随机森林(集成学习的一种)