首页 > 其他分享 >决策树

决策树

时间:2023-05-31 21:33:17浏览次数:58  
标签:clf score names test 节点 决策树

决策树

​ 决策树是一种机器学习的方法。决策树的生成算法有ID3(信息增益), C4.5(信息增益率)和CART(Gini系数)等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。
​ 构造树的基本想法是随着树深度的增加,节点的熵迅速地降低。熵降低地速度越快越好,这样我们有望得到一颗高度最矮地决策树。

熵和Gini系数

描述样本纯度,熵和Gini系数越大,表示样本纯度越小,即样本中每一类出现的概率越小。

\[熵 = -\sum_{i=1}^{n}{P_i\ln(P_i)} \]

\[Gini系数 = 1 - \sum_{k=1}^{K}{P_i^2} \]

信息增益

熵值的变化。希望构建决策树的过程中,信息增益越大越好。但如果在确定一个根节点之后,有很多子样本,每个子样本非常纯,那么就会出现熵约等于1的情况,但这种情况不是我们希望看到的,所以此方法需要改进。

剪枝

预剪枝:在构建决策树的过程时,提前停止

后剪枝:决策树构建好后,然后才开始裁剪

评价函数

评价决策树结构的好坏,类似于损失函数。其中Nt为当前叶子节点样本个数,H(t)则表示当前叶子节点的熵值或Gini值。

\[C(T) = \sum_{t \epsilon leaf}{N_tH(t)} \]

叶子节点个数太多,也会影响决策树结构好坏,加入了剪枝以后,评价函数变为:

\[C_\alpha(T) = C(T) + \alpha|T_{leaf}| \]

决策树Python实现

from sklearn import tree
from sklearn.datasets import load_iris
from sklearn import model_selection
import matplotlib.pyplot as plt
import graphviz

# 加载鸢尾花数据集,X为数据集,y为标签
dataSet = load_iris()
X = dataSet.data
y = dataSet.target
# 特证名称
feature_names = dataSet.feature_names
# 类名
target_names = dataSet.target_names
# 划分数据集
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, y)

# 实例化模型对象
# 1.criterion这个参数正是用来决定不纯度的计算方法的
# 输入"entropy",使用信息熵;输入“gini”,使用基尼系数
# 对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往会更好
# 2.random_state用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表示的更加明显
# 3.splitter也是用来控制决策树中的随机选项的
# 输入“best”,决策树在分支时虽然随机,但是还是会优先选择更加重要的特征进行分支;
# 输入"random",决策树会在分支时更加随机,树会因为含有更多的不必信息而更深更大,可能会导致过拟合问题
# 4.剪枝操作
# (1)max_depth:限制树的最大深度,超过设定深度的树枝全部剪掉
# (2)min_samples_leaf:一个节点在分支后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分支就不会发生
# (3)min_samples_split:一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分支,否则分支就不会发生
# (4)max_features:限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,和max_depth相似
# (5)min_impurity_decreases:限制信息增益的大小,信息增益小于设定数值的分枝不会发生。
clf = tree.DecisionTreeClassifier(criterion='entropy')

# 通过模型接口训练模型
clf = clf.fit(X_train, Y_train)

# 模型预测
predict_y = clf.predict(X_test)
print("对测试集样本的预测结果:\n", predict_y)
predict_y1 = clf.predict_proba(X_test)
print("预测样本为某个标签的概率:\n", predict_y1)
# 通过测试集对模型评分(0-1)
Test_score = clf.score(X_test, Y_test)
print("模型在测试集上进行评分:\n", Test_score)

# 使用grapviz绘制决策树
clf_dot = tree.export_graphviz(clf,
                               out_file=None,
                               feature_names=feature_names,
                               class_names=target_names,
                               filled=True,
                               rounded=True)
graph = graphviz.Source(clf_dot,
                        filename="iris_decisionTree",
                        format="png")
graph.view()
print("\n特征重要程度为:")
info = [*zip(feature_names, clf.feature_importances_)]
for cell in info:
    print(cell)

# 确认最优的剪枝参数,横坐标是超参数,纵坐标是模型度量,这里是Test_score
test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(max_depth=i + 1
                                      , criterion="entropy"
                                      , random_state=30
                                      , splitter="random"
                                      )
    clf = clf.fit(X_train, Y_train)
    score = clf.score(X_test, Y_test)
    test.append(score)
plt.plot(range(1, 11), test, color="red", label="max_depth")
plt.legend()
plt.show()

基于鸢尾花数据集的决策树形状

image

参考链接

机器学习第二阶段:机器学习经典算法(2)——决策树与随机森林

决策树算法python实现

标签:clf,score,names,test,节点,决策树
From: https://www.cnblogs.com/ggyt/p/17447391.html

相关文章

  • 第六课 决策树
          决策树(DecisionTree)是为数不多存活下来的机器学习算法之一,因其良好的性能和可解释性,被广泛应用于生产和生活当中。1、决策树初体验      图1是一个女方是否决定相亲的决策树示例,通过年龄、长相、收入、职业四个维度进行决策判断,媒人同时介绍了两个男方,男......
  • 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、
    全文链接:http://tecdat.cn/?p=27384最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出。在本文中,数据包含有关葡萄牙“VinhoVerde”葡萄酒的信息介绍该数据集(查看文末了解数据获取方式)有1599个观测值和12个变量,分别是固定酸度、挥发性酸度、柠檬酸、残糖、......
  • DT决策树回归预测MATLAB代码 代码注释清楚。 可以读取本地EXC
    DT决策树回归预测MATLAB代码代码注释清楚。可以读取本地EXCEL数据。很方便,初学者容易上手。温馨提示:联系请考虑是否需要,程序代码商品,一经售出,概不退换。ID:3924664891810500......
  • 决策树
    决策树基础概念计算实战代码importmatplotlib.pyplotaspltfrommathimportlogimportoperatorfrommatplotlibimportfont_managerfont=font_manager.FontProperties(fname=r"c:\windows\fonts\SimHei.ttf")defcreateDataSet():#dataSet=[['......
  • R语言决策树、随机森林、逻辑回归临床决策分析NIPPV疗效和交叉验证
    全文链接:http://tecdat.cn/?p=32295原文出处:拓端数据部落公众号临床决策(clinical decision making)是医务人员在临床实践过程中,根据国内外医学科研的最新进展,不断提出新方案,与传统方案进行比较后,取其最优者付诸实施,从而提高疾病诊治水平的过程。在临床医疗实践中,许多事件......
  • 机器学习算法 随机森林学习 之决策树
    随机森林是基于集体智慧的一个机器学习算法,也是目前最好的机器学习算法之一。随机森林实际是一堆决策树的组合(正如其名,树多了就是森林了)。在用于分类一个新变量时,相关的检测数据提交给构建好的每个分类树。每个树给出一个分类结果,最终选择被最多的分类树支持的分类结果。回归则是不......
  • 决策树算法总结
    决策树(DecisionTree)决策树是一种树形结构,以信息熵为度量构造一棵熵值下降最快的树,它每个内部节点表示在某个特征上的分割使得分割前后熵值下降最快,到叶子结点处的熵值为零,此时每个叶结点中的样本都被归为同一类(训练时叶结点中数据的真实类别未必为同一类)。决策树算法递归的选择......
  • m基于ID3决策树算法的能量管理系统matlab仿真
    1.算法描述       ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。    ......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据集我......
  • 基于决策树算法的病例类型诊断matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成......