决策树分类器(保姆级教学) 定义+特性+原理及公式+鸢尾花分类经典问题示例(完整Python代码带详细注释、保姆级分部代码解释及结果说明、决策树可视化及解释)

news2024/11/24 10:51:11

文章目录

    • 引言
    • 定义
    • 特性
    • 基本原理和公式理解
      • 信息增益(ID3算法)
        • 熵的定义
        • 条件熵
        • 信息增益的计算
      • 基尼不纯度(CART算法)
        • 基尼不纯度的定义
        • 基尼不纯度的计算例子
    • 实现步骤
    • 解决鸢尾花分类问题(机器学习入门中的经典案例+Python代码实现+保姆级详细分析)
      • 鸢尾花分类问题概述
      • Python完整代码(带详细注释)
      • Python代码分步详细解释
        • 第1部分:导入库
        • 第2部分:设置pandas显示选项
        • 第3部分:加载并准备数据
        • 第4部分:划分训练集和测试集
        • 第5部分:创建和训练决策树模型
        • 第6部分:评估模型
        • 第7部分:可视化决策树
      • 代码运行结果和结果说明
        • 运行结果
        • 第一部分是训练集数据
        • 第二部分是测试集数据
        • 第三部分是模型的准确率
        • 第四部分是混淆矩阵
        • 第五部分是模型分类报告
        • 第六部分是代码输出的决策树可视化
          • 根节点(最顶部的节点)
          • 左分支(True分支)
          • 右分支(False分支)
    • 应用案例
      • 1. 银行贷款审批系统
      • 2. 医疗诊断
      • 3. 客户关系管理(CRM)
      • 4. 金融欺诈检测
      • 5. 产品质量控制
    • 优化和挑战
      • 存在的问题
      • 解决方案
    • 结论


引言

决策树分类器是机器学习中一种直观且广泛使用的模型,它模仿了人类做决策的过程,通过一系列规则对数据进行分类。这种模型特别适合于解释性强的场景,因为它的决策过程清晰,容易理解。

定义

决策树是一种监督学习算法,主要用于分类和回归任务。它通过构造一个树形结构来模拟决策过程。每个内部节点代表一个属性上的测试,每个分支代表测试的一个结果,每个叶节点代表一个类别。

特性

  • 可解释性强:决策树的结构清晰,每一个决策节点都具有明确的逻辑,这使得模型的决策过程易于理解和解释。
  • 不需要很多数据预处理:决策树通常不需要进行归一化或标准化,因为它们是基于规则的而不是基于距离的模型。
  • 可以处理非线性数据:决策树能够很好地处理具有复杂数据边界的问题,适用于各种数据类型和结构。
  • 能处理分类和数值数据:决策树能够同时处理数值型和分类数据,使得模型可以应用于更广泛的数据集。
  • 鲁棒性:决策树对异常值不太敏感,这使得它在面对真实世界数据时表现更为稳定。
  • 易于实施并行处理:决策树的独立分支结构使其易于在多处理器系统中实现并行计算。
  • 可以生成可视化的决策过程:决策树可以转换为直观的树状图,使得非专业人士也能理解模型的决策路径。

基本原理和公式理解

决策树的构建基于将实例集划分为尽可能相似的子集的思想,这种划分通过递归地选择最优属性并对该属性应用“分割测试”来实现。常用的分割标准包括信息增益(基于熵)和基尼不纯度。

信息增益(ID3算法)

信息增益是用来选择构造决策树的最佳分裂属性的一种方法。它基于信息论中的熵概念,熵是度量数据集不确定性的方法。

熵的定义

熵(Entropy)是数据集的不纯度的度量,定义为:
E n t r o p y ( S ) = − ∑ i = 1 n p i log ⁡ 2 p i Entropy(S) = -\sum_{i=1}^n p_i \log_2 p_i Entropy(S)=i=1npilog2pi
其中:

  • S S S 是当前数据集,
  • n n n 是类别的总数,
  • p i p_i pi 是属于第 i i i 个类别的元素的概率。
条件熵

条件熵(Conditional Entropy)则是在知道某个属性 A A A的情况下,数据集 S S S的熵:
E n t r o p y ( S ∣ A ) = ∑ j = 1 m P ( j ∣ A ) × E n t r o p y ( S j ) Entropy(S|A) = \sum_{j=1}^m P(j|A) \times Entropy(S_j) Entropy(SA)=j=1mP(jA)×Entropy(Sj)
其中:

  • m m m 是属性 A A A的不同值的个数,
  • P ( j ∣ A ) P(j|A) P(jA) 是数据集中属性 A A A等于第 j j j个值的概率,
  • S j S_j Sj 是在属性 A A A的第 j j j个值下的子集。
信息增益的计算

信息增益(Information Gain)是原始数据集熵与条件熵之差:
G a i n ( S , A ) = E n t r o p y ( S ) − E n t r o p y ( S ∣ A ) Gain(S, A) = Entropy(S) - Entropy(S|A) Gain(S,A)=Entropy(S)Entropy(SA)
信息增益越大,意味着使用属性 A A A来分割数据集 S S S可以得到更“纯”的子集。

基尼不纯度(CART算法)

基尼不纯度(Gini Impurity)是CART算法中用于构造决策树的标准,它是衡量数据集中随机选取的两个元素属于不同类别的概率。

基尼不纯度的定义

G i n i ( S ) = 1 − ∑ i = 1 n p i 2 Gini(S) = 1 - \sum_{i=1}^n p_i^2 Gini(S)=1i=1npi2
其中:

  • S S S 是当前数据集,
  • n n n 是类别的总数,
  • p i p_i pi 是属于第 i i i 个类别的元素的概率。

基尼不纯度越小,数据集的纯度越高。

基尼不纯度的计算例子

假设一个数据集 S S S有两类元素,各占50%:
G i n i ( S ) = 1 − ( 0. 5 2 + 0. 5 2 ) = 0.5 Gini(S) = 1 - (0.5^2 + 0.5^2) = 0.5 Gini(S)=1(0.52+0.52)=0.5
如果一个类别占了100%,基尼不纯度为0,表示完全纯净:
G i n i ( S ) = 1 − ( 1 2 + 0 2 ) = 0 Gini(S) = 1 - (1^2 + 0^2) = 0 Gini(S)=1(12+02)=0

通过以上这些计算,我们可以更好地理解决策树在每个分割点如何选择属性,以尽可能减少数据集的不确定性或不纯度。这样的过程不断递归进行,直到满足树的构建的某个终止条件,例如树的最大深度或节点的最小样本数等。这就是决策树基本原理的核心。

实现步骤

  1. 数据准备:收集数据并进行预处理。
  2. 选择最佳属性:使用信息增益或基尼不纯度等标准选择最佳分裂属性。
  3. 树构建:递归构建决策树直到满足某个停止条件(如深度、节点最小样本数等)。
  4. 剪枝处理:通过剪枝避免过拟合,提高模型的泛化能力。
  5. 模型使用:利用构建好的决策树模型进行预测。

解决鸢尾花分类问题(机器学习入门中的经典案例+Python代码实现+保姆级详细分析)

鸢尾花分类问题概述

实现用决策树解决鸢尾花的分类问题。实验数据为150组鸢尾花的数据样本,其中前四列为花萼长度,花萼宽度,花瓣长度,花瓣宽度等4个用于识别鸢尾花的属性,最后一列为鸢尾花的类别。即通过判定花萼长度,花萼宽度,花瓣长度,花瓣宽度的尺寸大小来识别鸢尾花的类别。其中100组数据为训练集,50组数据为测试集。

Python完整代码(带详细注释)

# 导入必要的库
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# 设置pandas的显示选项,使得可以显示更多的行和列,方便查看完整的数据集
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 包含数据集特征的二维数组
y = iris.target  # 包含数据集标签的一维数组

# 创建一个DataFrame,以便更清晰地展示数据集内容。DataFrame是pandas中的二维表格型数据结构。
data = pd.DataFrame(X, columns=iris.feature_names)
data['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)  # 添加类别列

# 将数据集分为训练集和测试集。这里33%的数据用作测试集,随机状态42保证了结果的可复现性。
X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data['species'], test_size=0.33, random_state=42)

# 创建两个DataFrame来展示训练集和测试集。这有助于查看模型是在哪些数据上训练的,以及将在哪些数据上进行测试。
train_data = X_train.copy()
train_data['species'] = y_train
test_data = X_test.copy()
test_data['species'] = y_test

# 重置索引,使得数据从1开始编号,这样更符合人们的直觉。
train_data.reset_index(drop=True, inplace=True)
test_data.reset_index(drop=True, inplace=True)
train_data.index += 1
test_data.index += 1

# 打印训练集和测试集的数据
print("训练集数据:")
print(train_data)
print("\n测试集数据:")
print(test_data)

# 创建决策树分类器实例,随机状态42同样用来保证可复现性。
dt_classifier = DecisionTreeClassifier(random_state=42)

# 在训练集上训练决策树模型
dt_classifier.fit(X_train, y_train)

# 在测试集上使用训练好的模型进行预测,并计算准确率
y_pred = dt_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"\n模型的准确率为:{accuracy:.2f}")

# 计算并打印混淆矩阵和分类报告,提供模型性能的更详细视图
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred, output_dict=True)

# 使用pandas格式化并打印混淆矩阵和分类报告
conf_df = pd.DataFrame(conf_matrix, index=iris.target_names, columns=iris.target_names)
report_df = pd.DataFrame(class_report).transpose()

print("混淆矩阵:")
print(conf_df)
print("\n模型分类报告:")
print(report_df)

# 可视化决策树,以更直观地了解模型是如何进行决策的
plt.figure(figsize=(11,6))  # 设置图形大小
plot_tree(dt_classifier, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)  # 绘制决策树
plt.title("Visualization of the trained Decision Tree")  # 设置图表标题
plt.show()  # 显示图形

Python代码分步详细解释

第1部分:导入库
# 导入数据分析、处理库
import pandas as pd

# 导入机器学习相关库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 导入数据可视化库
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

解释

  • pandas 是一个强大的数据处理库,能够支持数据分析工作。
  • sklearn.datasets 包含了许多数据集,load_iris 是加载鸢尾花数据集的函数。
  • train_test_split 用于将数据随机分为训练集和测试集。
  • DecisionTreeClassifier 是一个决策树分类器。
  • accuracy_scoreclassification_report 用于计算模型性能。
  • plot_treematplotlib.pyplot 用于数据可视化。
第2部分:设置pandas显示选项
# 设置pandas在控制台的显示配置,使得大型数据集也可以被完整显示而不是缩略显示
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)

解释
这部分代码用于配置pandas的显示选项,以确保在控制台中可以完整显示大型DataFrame而不是默认的只显示头尾部分的数据。

第3部分:加载并准备数据
# 从sklearn的datasets模块加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 数据集中的特征变量
y = iris.target  # 数据集中的目标变量(我们要预测的标签)

# 将特征和目标变量合并成一个DataFrame,以便更方便地查看和分析数据
data = pd.DataFrame(X, columns=iris.feature_names)
data['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)

解释
这部分代码加载了内置的鸢尾花数据集,并且将其特征和标签合并到了一个pandas DataFrame中,为了方便数据分析和观察。

第4部分:划分训练集和测试集
# 将数据集分为训练集和测试集,这是机器学习模型开发的常规步骤
X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data['species'], test_size=0.33, random_state=42)

解释
这里使用train_test_split将数据集分割为训练集和测试集。test_size=0.33表示33%的数据用作测试集,random_state=42是随机种子,用于确保每次分割的结果都是一致的。

第5部分:创建和训练决策树模型
# 初始化决策树分类器
dt_classifier = DecisionTreeClassifier(random_state=42)

# 在训练集上训练决策树模型
dt_classifier.fit(X_train, y_train)

解释
在这部分,创建了一个DecisionTreeClassifier实例,并使用训练集对其进行训练,random_state参数确保模型可以重现。

第6部分:评估模型
# 使用测试集对训练好的决策树进行评估
y_pred = dt_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

# 输出模型准确度
print(f"\n模型的准确率为:{accuracy:.2f}")

# 计算混淆矩阵和分类报告
conf_matrix = confusion_matrix(y_test, y_pred)
class_report =

 classification_report(y_test, y_pred, output_dict=True)

# 使用pandas格式化输出
conf_df = pd.DataFrame(conf_matrix, index=iris.target_names, columns=iris.target_names)
report_df = pd.DataFrame(class_report).transpose()

解释
在模型评估部分,使用测试集数据来预测模型的性能。计算准确度以及生成混淆矩阵和分类报告,这些都是评估分类模型常用的指标。

第7部分:可视化决策树
# 可视化训练好的决策树,帮助我们理解模型是如何做出预测的
plt.figure(figsize=(11,6))
plot_tree(dt_classifier, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.title("Visualization of the trained Decision Tree")
plt.show()

解释
最后,使用plot_tree函数绘制并展示了训练好的决策树,以便我们可以直观地看到模型是如何根据特征进行决策的。参数filled=True使得不同的类别在可视化中有不同的颜色,而feature_namesclass_names为图形提供了清晰的标签。

代码运行结果和结果说明

运行结果
训练集数据:
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     species
1                  5.7               2.9                4.2               1.3  versicolor
2                  7.6               3.0                6.6               2.1   virginica
3                  5.6               3.0                4.5               1.5  versicolor
4                  5.1               3.5                1.4               0.2      setosa
5                  7.7               2.8                6.7               2.0   virginica
6                  5.8               2.7                4.1               1.0  versicolor
7                  5.2               3.4                1.4               0.2      setosa
8                  5.0               3.5                1.3               0.3      setosa
9                  5.1               3.8                1.9               0.4      setosa
10                 5.0               2.0                3.5               1.0  versicolor
11                 6.3               2.7                4.9               1.8   virginica
12                 4.8               3.4                1.9               0.2      setosa
13                 5.0               3.0                1.6               0.2      setosa
14                 5.1               3.3                1.7               0.5      setosa
15                 5.6               2.7                4.2               1.3  versicolor
16                 5.1               3.4                1.5               0.2      setosa
17                 5.7               3.0                4.2               1.2  versicolor
18                 7.7               3.8                6.7               2.2   virginica
19                 4.6               3.2                1.4               0.2      setosa
20                 6.2               2.9                4.3               1.3  versicolor
21                 5.7               2.5                5.0               2.0   virginica
22                 5.5               4.2                1.4               0.2      setosa
23                 6.0               3.0                4.8               1.8   virginica
24                 5.8               2.7                5.1               1.9   virginica
25                 6.0               2.2                4.0               1.0  versicolor
26                 5.4               3.0                4.5               1.5  versicolor
27                 6.2               3.4                5.4               2.3   virginica
28                 5.5               2.3                4.0               1.3  versicolor
29                 5.4               3.9                1.7               0.4      setosa
30                 5.0               2.3                3.3               1.0  versicolor
31                 6.4               2.7                5.3               1.9   virginica
32                 5.0               3.3                1.4               0.2      setosa
33                 5.0               3.2                1.2               0.2      setosa
34                 5.5               2.4                3.8               1.1  versicolor
35                 6.7               3.0                5.0               1.7  versicolor
36                 4.9               3.1                1.5               0.2      setosa
37                 5.8               2.8                5.1               2.4   virginica
38                 5.0               3.4                1.5               0.2      setosa
39                 5.0               3.5                1.6               0.6      setosa
40                 5.9               3.2                4.8               1.8  versicolor
41                 5.1               2.5                3.0               1.1  versicolor
42                 6.9               3.2                5.7               2.3   virginica
43                 6.0               2.7                5.1               1.6  versicolor
44                 6.1               2.6                5.6               1.4   virginica
45                 7.7               3.0                6.1               2.3   virginica
46                 5.5               2.5                4.0               1.3  versicolor
47                 4.4               2.9                1.4               0.2      setosa
48                 4.3               3.0                1.1               0.1      setosa
49                 6.0               2.2                5.0               1.5   virginica
50                 7.2               3.2                6.0               1.8   virginica
51                 4.6               3.1                1.5               0.2      setosa
52                 5.1               3.5                1.4               0.3      setosa
53                 4.4               3.0                1.3               0.2      setosa
54                 6.3               2.5                4.9               1.5  versicolor
55                 6.3               3.4                5.6               2.4   virginica
56                 4.6               3.4                1.4               0.3      setosa
57                 6.8               3.0                5.5               2.1   virginica
58                 6.3               3.3                6.0               2.5   virginica
59                 4.7               3.2                1.3               0.2      setosa
60                 6.1               2.9                4.7               1.4  versicolor
61                 6.5               2.8                4.6               1.5  versicolor
62                 6.2               2.8                4.8               1.8   virginica
63                 7.0               3.2                4.7               1.4  versicolor
64                 6.4               3.2                5.3               2.3   virginica
65                 5.1               3.8                1.6               0.2      setosa
66                 6.9               3.1                5.4               2.1   virginica
67                 5.9               3.0                4.2               1.5  versicolor
68                 6.5               3.0                5.2               2.0   virginica
69                 5.7               2.6                3.5               1.0  versicolor
70                 5.2               2.7                3.9               1.4  versicolor
71                 6.1               3.0                4.6               1.4  versicolor
72                 4.5               2.3                1.3               0.3      setosa
73                 6.6               2.9                4.6               1.3  versicolor
74                 5.5               2.6                4.4               1.2  versicolor
75                 5.3               3.7                1.5               0.2      setosa
76                 5.6               3.0                4.1               1.3  versicolor
77                 7.3               2.9                6.3               1.8   virginica
78                 6.7               3.3                5.7               2.1   virginica
79                 5.1               3.7                1.5               0.4      setosa
80                 4.9               2.4                3.3               1.0  versicolor
81                 6.7               3.3                5.7               2.5   virginica
82                 7.2               3.0                5.8               1.6   virginica
83                 4.9               3.6                1.4               0.1      setosa
84                 6.7               3.1                5.6               2.4   virginica
85                 4.9               3.0                1.4               0.2      setosa
86                 6.9               3.1                4.9               1.5  versicolor
87                 7.4               2.8                6.1               1.9   virginica
88                 6.3               2.9                5.6               1.8   virginica
89                 5.7               2.8                4.1               1.3  versicolor
90                 6.5               3.0                5.5               1.8   virginica
91                 6.3               2.3                4.4               1.3  versicolor
92                 6.4               2.9                4.3               1.3  versicolor
93                 5.6               2.8                4.9               2.0   virginica
94                 5.9               3.0                5.1               1.8   virginica
95                 5.4               3.4                1.7               0.2      setosa
96                 6.1               2.8                4.0               1.3  versicolor
97                 4.9               2.5                4.5               1.7   virginica
98                 5.8               4.0                1.2               0.2      setosa
99                 5.8               2.6                4.0               1.2  versicolor
100                7.1               3.0                5.9               2.1   virginica

测试集数据:
    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     species
1                 6.1               2.8                4.7               1.2  versicolor
2                 5.7               3.8                1.7               0.3      setosa
3                 7.7               2.6                6.9               2.3   virginica
4                 6.0               2.9                4.5               1.5  versicolor
5                 6.8               2.8                4.8               1.4  versicolor
6                 5.4               3.4                1.5               0.4      setosa
7                 5.6               2.9                3.6               1.3  versicolor
8                 6.9               3.1                5.1               2.3   virginica
9                 6.2               2.2                4.5               1.5  versicolor
10                5.8               2.7                3.9               1.2  versicolor
11                6.5               3.2                5.1               2.0   virginica
12                4.8               3.0                1.4               0.1      setosa
13                5.5               3.5                1.3               0.2      setosa
14                4.9               3.1                1.5               0.1      setosa
15                5.1               3.8                1.5               0.3      setosa
16                6.3               3.3                4.7               1.6  versicolor
17                6.5               3.0                5.8               2.2   virginica
18                5.6               2.5                3.9               1.1  versicolor
19                5.7               2.8                4.5               1.3  versicolor
20                6.4               2.8                5.6               2.2   virginica
21                4.7               3.2                1.6               0.2      setosa
22                6.1               3.0                4.9               1.8   virginica
23                5.0               3.4                1.6               0.4      setosa
24                6.4               2.8                5.6               2.1   virginica
25                7.9               3.8                6.4               2.0   virginica
26                6.7               3.0                5.2               2.3   virginica
27                6.7               2.5                5.8               1.8   virginica
28                6.8               3.2                5.9               2.3   virginica
29                4.8               3.0                1.4               0.3      setosa
30                4.8               3.1                1.6               0.2      setosa
31                4.6               3.6                1.0               0.2      setosa
32                5.7               4.4                1.5               0.4      setosa
33                6.7               3.1                4.4               1.4  versicolor
34                4.8               3.4                1.6               0.2      setosa
35                4.4               3.2                1.3               0.2      setosa
36                6.3               2.5                5.0               1.9   virginica
37                6.4               3.2                4.5               1.5  versicolor
38                5.2               3.5                1.5               0.2      setosa
39                5.0               3.6                1.4               0.2      setosa
40                5.2               4.1                1.5               0.1      setosa
41                5.8               2.7                5.1               1.9   virginica
42                6.0               3.4                4.5               1.6  versicolor
43                6.7               3.1                4.7               1.5  versicolor
44                5.4               3.9                1.3               0.4      setosa
45                5.4               3.7                1.5               0.2      setosa
46                5.5               2.4                3.7               1.0  versicolor
47                6.3               2.8                5.1               1.5   virginica
48                6.4               3.1                5.5               1.8   virginica
49                6.6               3.0                4.4               1.4  versicolor
50                7.2               3.6                6.1               2.5   virginica

模型的准确率为:0.98
混淆矩阵:
            setosa  versicolor  virginica
setosa          19           0          0
versicolor       0          15          0
virginica        0           1         15

模型分类报告:
              precision    recall  f1-score  support
setosa         1.000000  1.000000  1.000000    19.00
versicolor     0.937500  1.000000  0.967742    15.00
virginica      1.000000  0.937500  0.967742    16.00
accuracy       0.980000  0.980000  0.980000     0.98
macro avg      0.979167  0.979167  0.978495    50.00
weighted avg   0.981250  0.980000  0.980000    50.00

在这里插入图片描述

以下是代码运行结果的详细说明

第一部分是训练集数据

这是模型训练使用的数据。每行表示一个鸢尾花的样本,其中包括四个特征:萼片长度和宽度,花瓣长度和宽度,以及样本的实际类别(种类)。例如:

  • 第1行:一个花瓣长度为4.2厘米,花瓣宽度为1.3厘米的versicolor鸢尾花样本。
  • 第4行:一个萼片长度为5.1厘米,萼片宽度为3.5厘米的setosa鸢尾花样本。

这些数据被用来训练决策树模型,使其能够学习如何根据这些特征来区分不同种类的鸢尾花。

第二部分是测试集数据

这是用来评估模型性能的数据。它没有参与模型的训练,用来模拟模型在现实世界中遇到全新数据的情况。测试集数据的格式和训练集相同,但数据点是分开的,以确保评估的有效性。

第三部分是模型的准确率

准确率为0.98,意味着模型在测试集上的预测与实际标签高度一致,模型对测试集的50个样本中正确分类了49个。

第四部分是混淆矩阵

混淆矩阵提供了模型性能的一个详细视图,展示了模型预测结果与真实标签的对比情况。在这个案例中,矩阵如下解释:

  • setosa:正确分类了所有19个setosa样本。
  • versicolor:正确分类了所有15个versicolor样本。
  • virginica:正确分类了15个virginica样本,但有1个virginica样本被错误地分类为versicolor
第五部分是模型分类报告

模型分类报告为每个类别提供了以下指标:

  • Precision(精确率):对于每个类别,它是模型正确预测该类别的样本数占模型预测为该类别的总样本数的比例。例如,virginica的精确率是1.0,因为所有预测为virginica的都是正确的。
  • Recall(召回率):对于每个类别,它是模型正确预测该类别的样本数占实际为该类别的样本总数的比例。例如,virginica的召回率是0.9375,因为有1个virginica被错误分类,所以没有达到1.0。
  • F1-score(F1分数):精确率和召回率的调和平均值,是一个综合指标。对于versicolorvirginica来说,虽然它们的精确率和召回率不完全相同,但F1分数都是0.967742。
  • Support(支持度):每个类别实际的样本数。

accuracy 行展示了整体的准确率,而macro avgweighted avg 行提供了不同平均方式下的模型性能指标,分别未考虑和考虑了每个类别的支持度。在这个案例中,由于模型表现相当好,所有指标都非常接近1.0。

第六部分是代码输出的决策树可视化

在这里插入图片描述该图是鸢尾花的分类决策树的可视化。决策树通过一系列的问题(决策节点)来对数据进行分类。为了帮助理解,解释顶部的一部分,下面依次类推。我们从顶部的根节点开始,根据答案移动到下一个节点,直到到达叶节点,叶节点为我们提供了模型的最终预测。

根节点(最顶部的节点)
  • 判断条件petal length (cm) <= 2.45

    • 这是树的第一个判断条件,意味着基于花瓣长度的度量,我们将数据分为两部分。如果一个鸢尾花的花瓣长度小于或等于2.45厘米,它将沿着左边的路径移动;如果大于2.45厘米,将沿着右边的路径移动。
  • Gini不纯度gini = 0.666

    • Gini不纯度是一个衡量一个节点不纯度的指标。完全纯净(即节点内所有实例都属于同一个类别)的节点的Gini指数为0。此值0.666意味着节点中存在多个类别的实例。
  • 样本数量samples = 100

    • 到达这个节点的总样本数为100。
  • 类别分布value = [31, 35, 34]

    • 这显示了每个类别在这100个样本中的分布情况,对应于Setosa, Versicolor, 和 Virginica。
  • 主导类别class = versicolor

    • 在这个节点中,Versicolor的数量(35)是三个类别中最多的,所以这个节点被标记为Versicolor。
左分支(True分支)
  • 当满足根节点的条件(花瓣长度小于或等于2.45厘米)时,我们来到左边的节点。
  • 在这个例子中,左边是一个叶节点(没有进一步的分支),表示分类的最终决策点。
  • Gini不纯度gini = 0.0,意味着这个节点是完全纯净的,所有的样本都属于同一个类别。
  • 样本数量samples = 31,这些都是Setosa类的样本。
  • 类别分布value = [31, 0, 0],只有Setosa类。
  • 因此,所有到达这个节点的鸢尾花都被分类为Setosa。
右分支(False分支)
  • 当不满足根节点条件时,数据向右分支移动,遇到了新的判断条件。
  • 例如,右上角的节点使用了条件 petal width (cm) <= 1.75 来进一步分割数据。
  • 这一系列的决策节点继续向下,直到到达叶节点。

整个树通过这种方式分割数据集,直到达到叶节点。每个叶节点根据经过路径上的条件集合给出最终预测。每个节点的决策条件都是为了尽可能地纯化到达该节点的样本,即尝试使通过该节点的所有样本尽可能属于同一个类别。

应用案例

决策树分类器在多个行业中有着广泛的应用,尤其在以下领域的实际案例中表现出其强大的功能和灵活性:

1. 银行贷款审批系统

在银行贷款审批系统中,决策树用于分析申请者的年龄、收入、信用历史、负债情况等信息,快速决定贷款的批准与否。它帮助银行降低风险,加快审批流程,同时提高透明度。

2. 医疗诊断

决策树在医疗领域中用于基于症状和测试结果预测疾病,如心脏病或糖尿病。这种方法快速为医生提供辅助诊断,有助于制定治疗方案。

3. 客户关系管理(CRM)

在营销领域,决策树分析客户的购买历史和人口统计数据,预测他们对产品的兴趣,使营销策略更加个性化和精准。

4. 金融欺诈检测

决策树帮助金融机构分析交易模式和账户活动,早期识别并警告潜在的欺诈行为,防止经济损失。

5. 产品质量控制

在制造业,决策树通过分析生产线数据预测产品是否会达到质量标准,帮助提高产品合格率并减少废品。

以上这些应用展示了决策树在不同领域内提供决策支持、风险管理和预测分析的能力,它们的实施有助于提升操作效率和决策质量。

优化和挑战

存在的问题

  1. 过拟合

    • 决策树模型特别容易在复杂的数据集中学习到噪声,尤其是当树的结构变得过于复杂时,它可能捕捉到训练数据中的异常点和随机噪声。
    • 过拟合导致模型在新数据上的泛化能力差。
  2. 稳定性低

    • 决策树对于训练数据中的小变化非常敏感。例如,轻微的数据扰动或数据排序的改变可能导致生成一个完全不同的树结构。
    • 这种高度的敏感性使得模型难以应对实际应用中可能遇到的数据变动。

解决方案

  1. 剪枝

    • 预剪枝(Pre-pruning):在决策树完全生成之前停止其生长。可以通过设置决策树的最大深度、节点最小样本数阈值或一个节点中数据的最小信息增益来实现。
    • 后剪枝(Post-pruning):先从训练数据集生成一个完整的决策树,然后删除那些提供最小信息增益的节点。这种方式通常比预剪枝更能有效地提高测试数据的准确率。
  2. 集成方法

    • 随机森林:通过构建多个决策树,并让它们对样本进行独立的分类,然后通过投票等方式决定最终的分类结果。这种方法能有效增加模型的鲁棒性,减少过拟合。
    • 梯度提升树(Gradient Boosting Trees):这是一种将多个弱决策树模型组合成强模型的技术。通过迭代地训练决策树来最小化前一个树的损失,逐步提升模型的性能。
    • Bagging(Bootstrap Aggregating):通过对原始数据集进行多次随机抽样构建子集,然后用这些子集训练多个决策树。最后,通过对这些树的输出进行平均或多数投票来提高整体性能。
  3. 增加数据的鲁棒性

    • 通过数据扩增(如添加噪声、旋转、缩放等方法)来增加模型对于输入数据小波动的容忍度。
    • 使用交叉验证来评估模型的稳定性和泛化能力,确保模型不仅在训练集上表现良好,也能在未见过的数据上保持一致的表现。

结论

决策树分类器因其简洁的逻辑和高度的可解释性而被广泛应用于各种实际问题中。尽管存在过拟合等问题,通过适当的技术如剪枝和集成学习,可以有效地提升其性能和稳定性。决策树作为数据挖掘的入门工具,依然值得在实践中大量使用和研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传感器融合 | 适用于自动驾驶场景的激光雷达传感器融合项目_将激光雷达的高分辨率成像+测量物体速度的能力相结合

项目应用场景 面向自动驾驶场景的激光雷达传感器融合&#xff0c;将激光雷达的高分辨率成像测量物体速度的能力相结合&#xff0c;项目是一个从多个传感器获取数据并将其组合起来的过程&#xff0c;可以更加好地进行环境感知。项目支持 ubuntu、mac 和 windows 平台。 项目效果…

在系统中设定延迟任务和定时任务

useradd easylee //设置名为easylee的新用户 passwd easylee //更改密码为easylee&#xff0c;输入两次即可 将root和easylee加入白名单&#xff0c;使系统中只有root用户和easylee用户可以执行延迟任务的设置。 建立任务并给权限 定时任务

vue 实现实时搜索文档关键字并高亮显示

最近接到的一个新需求&#xff1a;实时搜索文档关键字并高亮显示&#xff0c;听起来好难的样子&#xff0c;仔细分析起来其实也蛮简单的。 实现思路 通过 input 实现关键字的输入&#xff0c;监听关键字的变化&#xff0c;用正则表达式来匹配关键字&#xff0c;然后给关键字添…

视觉信息保真度VIF算法详细介绍

来源 算法核心思想来源该篇论文A VISUAL INFORMATION FIDELITY APPROACH TO VIDEO QUALITY ASSESSMENT;是2005年的一篇高引用文章; 是一种全参考的视频图像评价算法;在奈飞开源的视频质量评价工具vmaf中将其作为一个判断维度,具体关于vmaf介绍可以参考视频质量评价工具vmaf…

一文学会时序约束

主时钟约束命令/生成时钟约束命令IO输入输出延迟约束命令及效果最大最小延迟命令及作用多周期路径怎么约束什么情况设置伪路径时钟组设置的三个选项 如果不了解时序分析可以先看下下面这篇文章&#xff1a; 数字IC/FPGA——时序分析 目录 1.时钟约束&#xff08;1&#xff09;…

SRIO系列-仿真测试

一、前言 前两篇已经讲述了SRIO协议的概况&#xff0c;以及xilinx SRIO IP核的使用方式&#xff0c;已经在搭建工程的过程中时钟和复位的注意事项。 二、设计框图 整个框图也是按照之前的工程进行搭建&#xff0c;首先时SRIO_Channel&#xff0c;由SRIO IP核和时钟、复位模块…

【C++题解】1607. 两位数运算

问题&#xff1a;1607. 两位数运算 类型&#xff1a;基本运算、拆位求解 题目描述&#xff1a; 小丽在编程课上学会了拆位运算&#xff0c;她已经可以拆出一个两位整数的十位和个位了&#xff0c;她想知道这个整数的十位 / 个位的结果是多少&#xff0c;请编程帮她实现&#…

异地网络如何在线共享文件夹?

信息的传输和共享变得异常便利。而对于拥有异地办公或分布式团队的公司或组织来说&#xff0c;跨地域的文件共享变得尤为重要。在这个背景下&#xff0c;“异地网络在线共享文件夹”应运而生。 异地网络在线共享文件夹的意义 对于异地办公的团队来说&#xff0c;共享文件夹是一…

《Super Simple Skybox》天空盒 -- 创造绝美天空的神奇工具!限时免费!

《Super Simple Skybox》天空盒 -- 创造绝美天空的神奇工具&#xff01;限时免费&#xff01; 前言内容介绍资源特色动态&#xff0c;美丽的天空在几秒钟内即插即用 功能列表领取兑换码 前言 ^^在这个充满创意与想象的世界里&#xff0c;Unity 免费资源犹如一颗璀璨的明珠&…

信息系统项目管理师0055:优化和持续改进(4信息系统管理—4.1管理方法—4.1.5优化和持续改进)

点击查看专栏目录 文章目录 4.1.5优化和持续改进1.定义阶段2.度量阶段3.分析阶段4.改进/设计阶段5.控制/验证阶段4.1.5优化和持续改进 优化和持续改进是信息系统管理活动中的一个环节,良好的优化和持续改进管理活动能够有效保障信息系统的性能和可用性等,延长整体系统的有效使…

redis的数据结构报错

文章目录 redis的数据结构报错Redis使用LocalDateTime报错问题 redis的数据结构报错 Redis使用LocalDateTime报错问题 SpringBoot整合Redis时&#xff0c;使用LocalDate以下报错 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: C…

统一SQL-支持cast函数

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库&#xff1a;Oracle 目标数据库&#xff1a;Postgresql&#xff0c;TDSQL-MySQL&#xff0c;达梦8&#xff0c;LightDB-Oracle 操作目标 在Oracle中&#xff0c;cast函数允许将一种…

CSS:filter(滤镜)属性

用途 可以用于img标签&#xff0c;div标签等 图像&#xff0c;背景&#xff0c;边框的调整 常用属性 1. 灰度 grayscale()&#xff0c;默认是0&#xff0c;100%就是黑白 2. blux 给图像设置高斯模糊的程度&#xff0c;radius值设定高斯模糊的程序&#xff0c;表示像素点…

android studio gradle 下载不下来的问题

有时候由于网络问题&#xff0c;会发现 android-studio 或 idea 下载不懂 gradle&#xff0c;可以修改 gradle-wrapper.properties 配置文件中的 distributionUrl 选项来解决这个问题。 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-5.1.1-all.zip 这个选…

遥感图像分割 | 基于一种类似UNet的Transformer算法实现遥感城市场景图像的语义分割_适用于卫星图像+航空图像+无人机图像

项目应用场景 面向遥感城市场景图像语义分割场景&#xff0c;项目采用类似 UNet 的 Transformer 深度学习算法来实现&#xff0c;项目适用于卫星图像、航空图像、无人机图像等。 项目效果 项目细节 > 具体参见项目 README.md (1) 安装依赖 conda create -n airs python3.8…

常用的7个免费ChatGPT网站

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

OpenCV从入门到精通实战(六)——多目标追踪

基于原生的追踪 使用OpenCV库实现基于视频的对象追踪。通过以下步骤和Python代码&#xff0c;您将能够选择不同的追踪器&#xff0c;并对视频中的对象进行实时追踪。 步骤 1: 导入必要的库 首先&#xff0c;我们需要导入一些必要的Python库&#xff0c;包括argparse、time、…

Debian12 中重新安装MSSQL 并指定服务器、数据库、数据表字段的字符排序规则和默认语言等参数

在 Linux 上配置 SQL Server 设置 - SQL Server | Microsoft Learn 零、查看sql server 服务器支持的字符排序规则 SELECT Name from sys.fn_helpcollations() where name Like Chinese% go------ Chinese_PRC_CI_AI Chinese_PRC_CI_AI_WS Chinese_PRC_CI_AI_KS Chinese_PRC_…

读所罗门的密码笔记21_读后总结与感想兼导读

1. 基本信息 所罗门的密码&#xff1a;AI时代的价值、权力与信任 Solomons Code 奥拉夫格罗思 马克尼兹伯格 著 中信出版社,2022年5月出版 1.1. 读薄率 书籍总字数257千字&#xff0c;笔记总字数37780字。 读薄率37780257000≈14.7% 1.2. 读厚方向 千脑智能 脑机穿越 …

政安晨:【Keras机器学习示例演绎】(一)—— 利用类 U-Net 架构进行图像分割

目录 下载数据 准备输入图像的路径和目标分割掩码 一幅输入图像和相应的分割掩码是什么样子的&#xff1f; 准备数据集&#xff0c;以加载和矢量化成批数据 准备 U-Net Xception 风格模型 预留验证分割 训练模型 可视化预测 政安晨的个人主页&#xff1a;政安晨 欢迎 &…