【机器学习算法】——决策树:CART

文章目录

理论

CART全称叫Classification and Regression Tree,即分类与回归树。CART假设决策树是二叉树,内部结点特征的取值只有"是"和"否",左分支是取值为"是"的分支,有分支则相反。这样的决策树等价于递归地二分每个特征。

CART分类回归树可以做分类或者回归。

  • 如果待预测结果是离散型数据,则CART生成分类决策树;
  • 如果待预测结果是连续型数据,则CART生成回归决策树。
    CART分类树使用==基尼指数(gini)==作为节点划分依据。
    CART决策树的生成就是递归地构建二叉决策树的过程 ,对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树
    简而言之:选取Gini指数最小的分支属性作为根节点的分支属性!!!
    学习视频:【【五分钟机器学习】可视化的决策过程:决策树 Decision Tree】

sklearn 库实现

  1. 安装库文件,用于生成二叉树的图:
    pip install graphviz

  2. 下载graphviz安装包进行本地安装:参考学习

  3. 重启pycharm。

  4. 写代码:

    决策树需要从`from sklearn import tree'导入

python 复制代码
clf = tree.DecisionTreeClassifier(criterion='gini', max_depth=3)#cart模型
# 使用特征数据和标签数据训练决策树模型
result = clf.fit(X, Y)

这两行是构建CART模型的关键代码,分裂标准是'gini'指数,可以改变树的不同深度。

完整代码

python 复制代码
import numpy as np  # 导入numpy库
import random  # 导入random库
from sklearn import tree  # 从sklearn库中导入决策树模块
from sklearn.linear_model import LinearRegression
from graphviz import Source  # 从graphviz库中导入Source类

#1. 准备数据集
np.random.seed(42)  # 设置numpy的随机数生成器的种子
X = np.random.randint(10, size=(100, 4))  # 生成一个100行4列的随机整数数组(>=10),作为特征数据
Y = np.random.randint(2, size=100)  # 生成一个包含100个元素的随机整数数组(>=2),作为标签数据
a = np.column_stack((Y, X))  # 将标签和特征数据垂直堆叠
print(a.size)
print(a)

#2. 模型训练
# 创建决策树分类器,使用基尼系数作为分裂准则,最大深度为3
clf = tree.DecisionTreeClassifier(criterion='gini', max_depth=3)#cart模型
# 使用特征数据和标签数据训练决策树模型
result = clf.fit(X, Y)

# 3. 可视化
# 将训练好的决策树模型导出为Graphviz格式的源代码,并创建Source对象
# result1 = tree.export_graphviz(result, out_file=None)
# graph = Source(result1)
graph = Source(tree.export_graphviz(result,out_file=None))
# 设置生成的图像格式为PNG
graph.format = 'png'
# 将Source对象渲染为PNG图像,并自动打开查看
graph.render('cart_tree', view=True)
相关推荐
大胆飞猪2 小时前
递归、剪枝、回溯算法---全排列、子集问题(力扣.46,78)
算法·leetcode·剪枝
Kisorge4 小时前
【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇)
stm32·嵌入式硬件·算法
铭哥的编程日记6 小时前
深入浅出蓝桥杯:算法基础概念与实战应用(二)基础算法(下)
算法·职场和发展·蓝桥杯
Swift社区6 小时前
LeetCode 421 - 数组中两个数的最大异或值
算法·leetcode·职场和发展
cici158746 小时前
基于高光谱成像和偏最小二乘法(PLS)的苹果糖度检测MATLAB实现
算法·matlab·最小二乘法
StarPrayers.7 小时前
自蒸馏学习方法
人工智能·算法·学习方法
大锦终7 小时前
【动规】背包问题
c++·算法·动态规划
智者知已应修善业8 小时前
【c语言蓝桥杯计算卡片题】2023-2-12
c语言·c++·经验分享·笔记·算法·蓝桥杯
hansang_IR8 小时前
【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]
c++·算法·最小生成树
Croa-vo8 小时前
PayPal OA 全流程复盘|题型体验 + 成绩反馈 + 通关经验
数据结构·经验分享·算法·面试·职场和发展