决策树
可详见链接
-
定义
- 是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树
-
信息熵
- 熵 用于衡量一个对象的有序程度
- 从信息的完整性上描述
- 当系统的有序状态一致时,数据越集中的地方熵值越小;数据越分散的地方熵值越大
- 从信息的有序性上描述
- 当数据量一致时,系统越有序, 熵值越低;系统越混乱分散,熵值越高
- Ent(A) = - (求和 k=1-n) p_k * log_2(p_k) = -p1log2p1-p2log2p2…-pnlog2pn
- 假如事件A的分类划分时(A1,A2…An) 每部分发生概率(p1,p2…pn)
-
信息增益 ID3
- 信息增益:以某特征划分数据集前后的熵的差值。
- 熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
- 信息增益= entroy(前) - entroy(后) 信息增益越大 优先选择这个属性进行计算
- 特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
- g(D,A) = H(D) - H(D|A)
- 偏向属性类别更多的来划分 以编号来分 信息增益大
-
信息增益率 C4.5
- 用前面的增益度量和所分离信息度量的比值共同定义
-
基尼增益
- 基尼值 Gini(D):数据集中随机抽取两个样本,其类别标志不一致的概率,Gini(D) 越小纯度越高
- 基尼指数Gini_index(D,a) 一般选择使划分后基尼系数最小的属性作为最优划分属性
- 基尼增益:整体基尼值 - 基尼指数 选择基尼增益最大的属性作为最优化分属性
- 基尼增益构建过程
- 开始将所有记录看作一个节点
- 遍历每个变量的每一种分割方式,找到最好的分割点
- 分割成两个节点N1和N2
- 对N1和N2分别继续执行2、3步,直到每个节点足够纯为止
- 决策树的变量可以有两种:
- 数字型:通过对数据取两个数字之间的中间值,进行划分
- 名称型:通过对属性的类别进行划分
-
三种算法对比
- ID3算法
- 采用信息增益作为评价标准
- 只能对描述属性为离散型属性的数据
- 构造决策树
- 缺点: 倾向选择取值较多的属性
- C4.5
- 用信息增益率来选择属性
- 可以处理连续数值型属性
- 采用后剪枝方法
- 对于缺失值的处理
- 缺点:C4.5只适合与能驻留在内存中的数据
- CART
- C4.5不一定是二叉树,CART一定是
- 是信息增益的简化版本
- ID3算法
-
cart剪枝
- 剪枝原因
- 噪声、样本冲突即错误的样本数据
- 特征即属性不能完全作为分类标准
- 巧合的规律性,数据量不够大
- 预剪枝
- 在构建数的过程中同时剪枝
- 限制节点最小样本数
- 指定数据高度
- 指定熵值的最小值
- 在构建数的过程中同时剪枝
- 后剪枝
- 把一棵树构建完成后,再进行从下往上剪枝
- 剪枝原因
-
特征工程——特征提取
- 特征提取
- 将任意数据(文本、图像)转换为可用于机器学习的数字特征
- 分类
- 字典特征提取
- 文本特征提取
- 图形特征提取
- api
- from sklearn import feature_extraction
- 特征提取
-
字典特征提取
- 字典特征提取就是对类别数据进行转换
- 对于特征当中存在类别信息的我们都会做one-hot编码处理
- sklearn.feature_extraction.DictVectorizer(sparse=)
- DictVectorizer.fit_transform(X)
- X 字典或者包含字典的迭代器返回值
- 返回sparse矩阵(节省内存、提高读取效率)
- DictVectorizer.get_feature_names()
- 返回类别名称
-
文本特征提取(英文)
- sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
- stop_words - 不想统计的单词
- 注意:没有sparse这个参数 用.toarray()的方法
- 单个字母,标点符号不做统计
- sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
-
文本特征提取(中文)
- 在中文文本特征提取之前,需要对文字进行分词 jieba 调用其他人写的包
- 其他与英文的类似
-
tfidf
- 如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类
- 分类机器学习算法进行文章分类中前期数据处理方式
- tf * idf
- tf 词频 词语在文件中出现的频率
- idf 逆向文档频率 总文件数除以包含该词文件的数目,再取以10为底的对数
- sklearn.feature_extraction.text.TfidfVectorizer
-
决策树
- from sklearn.tree import DecisionTreeClassifier
- DecisionTreeClassifier(criterion=,max_depth=,random_state=)
- criterion 特征选择标准 默认 gini 基尼系数 entropy 信息增益
- min_samples_split 限制子树继续划分的条件 节点样本少于 不会继续虎贲
- min_samples_leaf 限制叶节点最少的样本数
- max_depth 最大深度
- random_state 随机数种子
- 优点 简单理解和解释 可视化
- 缺点 容易发生过拟合
- 改进 剪枝cart算法 、随机森林
-
流程分析
1.获取数据
2.数据基本处理
2.1 确定特征值,目标值
2.2 缺失值处理
2.3 数据集划分
3.特征工程(字典特征抽取)
4.机器学习(决策树)
5.模型评估