机器学习-基于决策树的分类与预测

本文深入探讨了决策树的基本原理,包括其结构、优缺点、学习步骤,以及特征选择与剪枝策略。实战部分展示了如何用Python进行决策树建模与预测,通过对企鹅数据集的分析,解释了模型的应用过程。
摘要由CSDN通过智能技术生成

一、原理

1.决策树(decision tree):本质上是一种通过一系列规则对数据进行分类的分类模型,采用树行(如二叉树…)结构,使用层层推理(基于if-then-else的监督学习算法)来来实现最终的分类。其基本结构由以下元素构成:
在这里插入图片描述

2.优缺点
主要优点:具有很好的解释性,模型可以生成可以理解的规则。可以发现特征的重要程度。模型的计算复杂度较低。
主要缺点:模型容易过拟合,需要采用减枝技术处理。不能很好利用连续型特征。预测能力有限,无法达到其他强监督模型效果。方差较高,数据分布的轻微改变很容易造成树结构完全不同。

3.决策树学习的步骤:特征选择➡决策树生成➡决策剪枝
特征选择:特征选择决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。

决策树生成:选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。

决策树剪枝:剪枝的主要目的是对抗过拟合,通过主动去掉部分分支来降低过拟合的风险。

4.决策树构建的伪代码
在这里插入图片描述

决策树的构建过程是一个递归过程。函数存在三种返回状态:(1)当前节点包含的样本全部属于同一类别,无需继续划分;(2)当前属性集为空或者所有样本在某个属性上的取值相同,无法继续划分;(3)当前节点包含的样本集合为空,无法划分。
其中,划分选择sklearn提供了两种:信息增益和基尼(gini)指数。
信息熵(entropy)是一种衡量数据混乱程度的指标,信息熵越小,则数据的“纯度”越高。一般信息增益越大,则意味着使用某一个特征来进行划分的效果越好。信息熵相比基尼系数,对不纯度更加敏感,对不纯度的惩罚更强,但信息熵对于高维数据或者噪音很多的数据容易过拟合
信息增益=父节点的信息熵-子节点的信息熵
基尼指数∈(0,1),反映了从数据集D中随机抽取两个的类别标记不一致的概率。基尼指数的计算不涉及对数,因此比信息熵的计算相对快一些。
在实际应用中,信息熵和基尼系数的效果基本相同。

二、实战

2.1 demo实践

2.1.1源码

##  基础函数库
import numpy as np

## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns

## 导入决策树模型函数
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

##Demo演示LogisticRegression分类

## 构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 1, 0, 1, 0, 1])

## 调用决策树模型
tree_clf = DecisionTreeClassifier()

## 用决策树模型拟合构造的数据集
tree_clf = tree_clf.fit(x_fearures, y_label)

## 可视化构造的数据样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()

## 本段代码实际效果为本地生成PDF可视化文档,在体验过程中可以不运行,可能无法正常展示结果;
## 代码生成的可视化结果会截图展示实际效果
#!pip install graphviz
import graphviz
feature_name =['特征1','特征2']
dot_data = tree.export_graphviz(tree_clf
                                # , feature_names=feature_name
                                ,out_file=None)#将生成的决策树导出为dot格式,画图专用
graph = graphviz.Source(dot_data)
# graph.render("pengunis")
# 'pengunis.pdf'

## 创建新样本
x_fearures_new1 = np.array([[0, -1]])<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值