决策树算法:
分类算法:
目标值
离散型
特征值:
离散型[如这里的字符串类型的特征值] 将特征值为离散型的数值转化为数值型
‘1st’
‘2nd’
‘3rd’
在pandas里面数据离散化采用:
one-hot编码
####决策树算法去关心的两个问题:
1 结果(目标值)纯度问题
2 如何选择最优划分指标 --> 让我们结果尽可能的简单纯粹
纯度 :
{1,1,1,1,1,1,1}
{0,0,0,0,0,0,0,0,0}
不纯的情况:
{0,1,0,1,0,1,0,1,0,1}
{1,1,1,0,0,0,1,1,1,0}
####决策树分类原理
信息熵:
n pi = 1/n
当信息熵最不纯的时候,每种发生的概率值是相等的
-sum[pi*log(pi)]
- sum pi * log(pi)
最不纯的情况:
log(n)
最纯的情况:
p1 = 1 p2, p3, pn = 0
- 1 * log(1) = 0
信息熵的单位是 bit
log(32) = 5 bit
所以对咱们的32支球队的获胜的预测概率求解,假设如果是等概率的情况,那么需要使用5位可以预测最后的获胜球队
11111 bit
决策树的划分依据一----信息增益
H(D)
咱们的信息熵的计算始终是针对结果(目标值的划分而来的)
大数据集:D |D|
划分条件:A 即按照某个特征对大数据集进行划分
假设划分为一个具有两类结果的问题:
da1 da2 --> |da1| |da2|
条件熵
H(da1)* |da1|/|D| + H(da2)*|da2|/|D|
信息增益:gain 即信息增益的值越大,则以该条件划分之后的结果越纯
g(D, A) = H(D) - 条件熵
决策树的划分依据二----信息增益率
信息增益率 = 信息增益/划分指标的信息熵 【注意:这里并没有使用咱们的目标值的信息熵】
按照性别作为指标的信息熵:-[7/15*log(7/15) + 8/15 *log(8/15)]
信息增益当作划分标准的缺点:优先选择取值比较多的特征(比较贪心)
由于信息增益的这种缺点,因此,咱们让其除以自己的信息熵(越大越混乱)
决策树的划分依据三——基尼值和基尼指数
基尼值Gini(D):
gini(D): sum(pi * (1 - pi)) = 1 - sum(pi^2)
最纯:
只含有一个类别 p1 = 1
gini = 0
最不纯:
含有n个类别 1/n
gini(D) = 1 - n * (1/n)^2 = 1 - 1/n
信息熵与基尼值是用来判断咱们的样本目标值纯不纯的方法
构建决策树的两个标准:度量纯度,最优的划分指标
信息熵的范围: (0,log(n))
基尼值得范围: (0, 1 - 1/n)
基尼指数 gini_index(D):
大数据集:D |D|
划分条件:A
da1 da2 |da1| |da2|
gini_index(D,A) = gini(da1)* |da1|/|D| + gini(d2)* |da2|/|D|
ID3: 信息熵 信息增益
C4.5: 信息熵 信息增益率
CART: 基尼值 基尼系数
回归:
目标值: 连续型
咱们的决策树其实也是可以做回归问题的,包括咱们的KNN也是去可以做回归问题的,咱们去找K个最邻近的样本点,这K个样本的平均值我们当做目标值
连续型怎么度量纯度?
用方差去度量咱们的纯度
5.1 ID3 算法
信息增益的缺点
是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息.
离散型属性的数据集构造决策树
5.2 C4.5算法
用信息增益率来选择属性
可以处理连续数值型属性(相当于做了一些离散化的处理)
采用了一种后剪枝方法
对于缺失值的处理
C4.5算法的优缺点
产生的分类规则易于理解,准确率较高
缺点:
在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
5.3 CART算法
基尼值
基尼指数
二叉树
分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的。这样决策得到的决策树更加准确。这个决策树叫做多变量决策树(multi-variate decision tree)
如果样本发生一点点的改动,就会导致树结构的剧烈改变
避免过拟合:
剪枝
随机森林
cart剪枝
1 为什么要剪枝
避免过拟合
决策树很容易在一个小的数据集上生成一颗比较复杂的树
2 常用的减枝方法
前剪枝(一边长一边剪)
不纯,要分 (验证集合)
剪之前(分):验证集合的准确率
剪之后(不分):验证集合的准确率
谁的准确率高,就按谁走
后剪枝(长完再剪)
剪,从叶子节点开始判断是否需要剪
剪之前:验证集合的准确率
剪之后:验证集合的准确率
谁的准确率高,就按谁走
4.4 特征工程-特征提取
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
.fit_transform(X)
.get_feature_names()
[{‘city’: ‘北京’,‘temperature’:100},
{‘city’: ‘上海’,‘temperature’:60},
{‘city’: ‘深圳’,‘temperature’:30}]
稀疏矩阵
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
[‘city=上海’, ‘city=北京’, ‘city=深圳’, ‘temperature’]
4.5 决策树算法api
sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
4.6 案例:泰坦尼克号乘客生存预测
读取数据
基本数据处理
取出特征值,目标值
处理缺失值
划分数据集
特征工程
选择决策树训练模型
预测
评估
3 决策树可视化
graphviz dot 经常是一对出现,如果树的结构比较复杂,咱们通常是将其转化为dot 文件之后在处理
tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
3.5 决策树总结
优点:
原理清晰,解释性强,树形结构可以可视化
缺点:
太容易生成结构复杂的树,容易过拟合
改进:
剪枝
随机森林
文本特征提取
sklearn.feature_extraction.text.CountVectorizer
sklearn.feature_extraction.text.TfidfVectorizer
3.3 jieba分词处理
jieba.cut()
每一个词的重要程度
词 整个文本集合的重要程度
词 对于每一个文本(样本)的重要程度
tf-idf
term frequency: 词频 当前这个词语 在样本之中出现次数 / 整个样本中所有词的次数
inverse document frequency: 逆文档指数 整个文本集合的重要程度
log(整个文本集中所有的文本数目(样本数) / 出现当前单词的样本数目)
'决策树'
文本1: idf * tf1
文本2: idf * tf2
tf = 0.05
idf = 3
机器学习 周志华 西瓜书
名字
分类
原理
白话
推理
指标
数学
怎么用
来源:CSDN
作者:leon东
链接:https://blog.csdn.net/qq_37812673/article/details/103246599