一文彻底搞懂机器学习 - 决策树(Decision Tree) 原创

发布于 2024-12-16 14:13
浏览
0收藏

一文彻底搞懂机器学习 - 决策树(Decision Tree)-AI.x社区

决策树(Decision Tree)是一种基础且直观的分类与回归技术,它借鉴了人类的决策过程。该技术通过逐步拆分数据集,并根据特征选择建立规则,从而实现对数据的分类和预测。以下是对决策树的深入解析,内容涵盖其训练与可视化方法、类概率的估计,以及CART(分类与回归树)训练算法等关键方面。

一文彻底搞懂机器学习 - 决策树(Decision Tree)-AI.x社区


Decision Tree

一、训练和可视化

决策树(Decision Tree)是什么?决策树是一种用于分类和回归任务的监督学习算法。它通过一个树状结构,将输入的数据(特征)映射到输出(类别或数值)。

在决策树中,每个内部节点表示一个特征上的判断条件每个分支代表一个判断条件的输出,而每个叶子节点则代表一个类别(对于分类任务)或一个具体的数值(对于回归任务)

一文彻底搞懂机器学习 - 决策树(Decision Tree)-AI.x社区

如何训练和可视化决策树?使用scikit-learn库的DecisionTreeClassifier训练决策树模型,并利用plot_tree函数结合matplotlib库实现决策树的可视化。

  1. 训练决策树:通过DecisionTreeClassifier类创建一个决策树分类器实例,并使用fit方法将训练数据(特征集X_train和目标标签y_train)输入到模型中,从而训练出决策树。
  2. 可视化决策树:利用plot_tree函数,将训练好的决策树模型(clf)进行可视化。这个函数接受多个参数,如是否填充节点颜色(filled=True)、特征名称(feature_names=iris.feature_names)、类别名称(class_names=iris.target_names)以及节点形状(rounded=True)等,以生成一个直观易懂的决策树图形。最后,通过matplotlib库的show方法显示这个图形。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt


# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)


# 训练模型
clf.fit(X_train, y_train)


# 可视化决策树
plt.figure(figsize=(20,10))  # 设置图形大小
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show()  # 显示图形

二、估计类概率

决策树如何获取样本属于每个类别的预测概率?决策树通过训练过程形成叶子节点,并记录每个叶子节点中的类别分布。在预测时,根据样本到达的叶子节点来计算它属于每个类别的预测概率。

在Python中,使用scikit-learn库可以很方便地实现决策树,并获取样本属于每个类别的预测概率。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier


# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)


# 训练模型
clf.fit(X_train, y_train)


# 获取测试集中样本的类概率
probabilities = clf.predict_proba(X_test)


# 打印前5个样本的类概率
for i in range(5):
    print(f"Sample {i+1} class probabilities: {probabilities[i]}")


# 注意:probabilities[i] 是一个数组,包含了样本i属于每个类别的概率。
# 例如,如果probabilities[0] = [0.1, 0.7, 0.2],则表示第一个样本属于类别0的概率为0.1,属于类别1的概率为0.7,属于类别2的概率为0.2。

三、SVM回归

CART训练算法是什么?CART(Classification and Regression Trees)训练算法是一种用于分类和回归任务的决策树学习技术。CART算法采用贪心策略递归地划分数据集,以构建一棵二叉决策树。

它既可以用于分类任务,也可以用于回归任务。在分类任务中,CART算法通常使用基尼指数(Gini Index)作为划分标准;在回归任务中,则使用均方误差(MSE)作为划分标准。

CART训练算法用于分类任务?使用Iris数据集训练一个最大深度为3的CART决策树分类器,并通过plot_tree函数结合matplotlib库可视化了训练好的决策树。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt


# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


# 初始化并训练CART分类器
clf = DecisionTreeClassifier(criterinotallow='gini', max_depth=3, random_state=42)
clf.fit(X_train, y_train)


# 使用plot_tree函数可视化决策树
plt.figure(figsize=(20,10))  # 设置图形大小
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show()

CART训练算法用于回归任务?使用Iris数据集(除去目标变量作为特征),通过划分训练集和测试集,初始化并训练了一个最大深度为3的CART回归器,然后可视化了回归树,并最后评估了模型的均方误差(MSE)性能。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor, plot_tree
import matplotlib.pyplot as plt


# 加载Iris数据集
iris = load_iris()
X = iris.data[:, :-1]  # 使用除了最后一个特征之外的所有特征作为预测变量
y = iris.data[:, -1]   # 使用最后一个特征(花瓣长度)作为目标变量


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


# 初始化并训练CART回归器
regressor = DecisionTreeRegressor(criterinotallow='squared_error', max_depth=3, random_state=42)
regressor.fit(X_train, y_train)


# 使用plot_tree函数可视化回归树
plt.figure(figsize=(20, 10))  # 设置图形大小
plot_tree(regressor, filled=True, feature_names=iris.feature_names[:-1],  # 排除目标变量作为特征名
          rounded=True, impurity=False)  # impurity为False因为回归树不使用不纯度
plt.show()


# 评估模型
# 由于这是回归任务,我们可以使用均方误差(MSE)等指标来评估模型的性能。
from sklearn.metrics import mean_squared_error
y_pred = regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")



本文转载自公众号架构师带你玩转AI 作者:AllenTang

原文链接:​​https://mp.weixin.qq.com/s/wHRBtf5cchshn9GKvu_NLw​

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐