当前位置:   article > 正文

决策树算法介绍:原理与案例实现

决策树算法

 

目录

一、决策树算法描述

二、决策树算法的类型

三、决策树算法的优缺点

四、决策树算法的原理

五、案例:使用决策树进行分类

六、案例:泰坦尼克号乘客生存预测


        决策树(Decision Tree)算法是一种常见的机器学习算法,主要用于分类和回归任务。它是一种树形结构,其中每个内部节点代表一个特征,每个分支代表一个特征值,每个叶节点代表一个类别标签。决策树算法的目标是根据特征对数据进行划分,使得每个子节点的数据尽可能属于同一类别。在分类问题中,决策树通过一系列规则来将数据集划分为不同的类别。这些规则是通过评估各种特征来确定的,目的是找到最能够区分数据集的特征。

一、决策树算法描述:

  1. 选择最优特征:从当前数据集的所有特征中,选择一个最优特征作为节点的划分标准。最优特征的选择依据通常是信息增益、信息增益率或基尼指数等指标。
  2. 划分数据集:根据最优特征的值将数据集划分为多个子集。每个子集包含该特征相同取值的数据样本。
  3. 递归建树:对每个子集递归地执行1和2步骤,直到满足停止条件(如数据集纯度足够高、达到最大深度等)。
  4. 剪枝:为了避免过拟合,需要对决策树进行剪枝。剪枝策略有预剪枝和后剪枝两种。预剪枝通过提前停止树的增长来防止过拟合;后剪枝则是在树构建完成后,通过删除不必要的节点来简化模型。

二、决策树算法的类型:

  1. ID3(Iterative Dichotomiser 3):使用信息增益作为特征选择标准。ID3算法只能处理离散型特征。
  2. C4.5:对ID3算法的改进,使用信息增益率作为特征选择标准,能够处理连续和缺失值。
  3. CART(Classification And Regression Tree):使用基尼指数作为特征选择标准,既可以用于分类任务,也可以用于回归任务。

三、决策树算法的优缺点:

1、优点

  • 易于理解和解释。
  • 可以处理包含数值型和类别型的数据。
  • 可以处理具有缺失值的数据。
  • 可以处理非线性和复杂的关系。

2、缺点

  • 容易过拟合,特别是在没有剪枝的情况下。
  • 对于不同类别的数据集,可能会产生不平衡的树结构。
  • 对于连续特征,决策树可能会产生大量的分割点,导致计算量大。

        决策树算法是一种简单而有效的机器学习算法,广泛应用于各种分类和回归问题。通过选择合适的特征和剪枝策略,可以提高决策树的泛化能力和性能。

四、决策树算法的原理

        决策树的工作原理是从根节点开始,对数据集进行划分,每个内部节点代表一个特征,每个分支代表一个特征的取值,每个叶节点代表一个类别标签。决策树通过递归地划分数据集,直到满足停止条件(如数据集纯度足够高、达到最大深度等)。

在构建决策树时,需要解决两个主要问题:

  1. 特征选择:从当前数据集的所有特征中,选择一个最优特征作为节点的划分标准。
  2. 决策树构造:根据最优特征的值将数据集划分为多个子集,并对每个子集递归地执行特征选择和划分,直到满足停止条件。

五、案例:使用决策树进行分类

        假设有一个数据集,包含天气、温度、湿度等信息,目标是判断是否去打篮球。我们可以使用决策树算法进行分类。

  1. 数据集

    天气

    温度

    湿度

    是否打篮球

    晴朗

    阴天

    下雨

    晴朗

    阴天

    下雨

    晴朗

  2. 构建决策树

    • 根据信息增益或其他指标,选择最优特征。假设我们选择“天气”作为第一个划分特征。
    • 根据天气的不同,将数据集划分为三个子集。
    • 对每个子集递归地执行上述步骤,直到满足停止条件。
    • 决策树图形表示如下:                                                                                                             在这个决策树中,我们从根节点“天气”开始,根据“天气”的不同取值,将数据集划分为三个子集。对于“晴朗”和“下雨”,进一步根据“湿度”或“温度”进行划分。对于“阴天”,由于所有样本都是“是”,所以不需要进一步划分。
    1. 是否打篮球
    2. |
    3. 天气
    4. |--- 晴朗 (3)
    5. | |--- 湿度
    6. | | |--- 高 (1): 否
    7. | | |--- 低 (2): 是
    8. |--- 阴天 (2): 是
    9. |--- 下雨 (2)
    10. |--- 温度
    11. | |--- 温 (1): 否
    12. | |--- 低 (1): 否
  3. 预测过程

                现在,我们可以使用这个决策树来预测一个新的数据样本是否去打篮球。例如,假设

        我们有以下新的数据样本:

  • 天气:晴朗
  • 温度:高
  • 湿度:低

我们将这个样本的特征值带入决策树:

  1. 从根节点开始,样本的“天气”是“晴朗”,所以沿着“晴朗”的分支向下。
  2. 接下来,看“湿度”的取值,样本的“湿度”是“低”,所以沿着“低”的分支向下。
  3. 到达一个叶节点,叶节点的标签是“是”,这意味着根据决策树的预测,这个样本应该去打篮球。

        通过这种方式,决策树可以用来对新的数据样本进行分类预测。在实际应用中,决策树的构建过程通常由机器学习库自动完成,只需要提供数据集和相应的参数即可。

六、案例:泰坦尼克号乘客生存预测

        将使用Python的scikit-learn库来实现一个决策树模型,用于预测泰坦尼克号乘客的生存情况。首先,我们需要准备数据集,然后使用决策树分类器进行训练和预测。

  1. 数据准备:我们需要一个包含泰坦尼克号乘客信息的DataFrame,其中至少包含以下特征:年龄、性别、舱位等级等。

  2. 数据预处理:将非数值型特征(如性别、舱位等级)转换为数值型特征,处理缺失值。

  3. 构建决策树模型:使用scikit-learn的DecisionTreeClassifier类来创建一个决策树模型,并使用训练数据对其进行训练。

  4. 模型评估:使用测试数据评估模型的准确性。

下面就是使用泰坦尼克号乘客生存预测的代码示例:

  1. import pandas as pd
  2. from sklearn.model_selection import train_test_split
  3. from sklearn.tree import DecisionTreeClassifier
  4. from sklearn.metrics import accuracy_score
  5. from sklearn.preprocessing import LabelEncoder
  6. # 加载数据集
  7. data = pd.read_csv('titanic.csv')
  8. # 数据预处理
  9. # 处理缺失值
  10. data['Age'].fillna(data['Age'].median(), inplace=True)
  11. data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)
  12. # 将非数值型特征转换为数值型
  13. label_encoder = LabelEncoder()
  14. data['Sex'] = label_encoder.fit_transform(data['Sex'])
  15. data['Embarked'] = label_encoder.fit_transform(data['Embarked'])
  16. # 特征和标签
  17. features = data[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
  18. target = data['Survived']
  19. # 划分训练集和测试集
  20. X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
  21. # 创建决策树模型
  22. decision_tree = DecisionTreeClassifier()
  23. # 训练模型
  24. decision_tree.fit(X_train, y_train)
  25. # 预测
  26. predictions = decision_tree.predict(X_test)
  27. # 评估模型
  28. accuracy = accuracy_score(y_test, predictions)
  29. print(f'Accuracy: {accuracy:.2f}')

        在这个例子中,首先加载数据集,然后进行数据预处理,包括填充缺失值和转换非数值型特征。接着,使用train_test_split函数将数据集划分为训练集和测试集。创建DecisionTreeClassifier模型后,使用训练集对其进行训练,并在测试集上进行预测。最后,使用accuracy_score函数评估模型的准确性。

        决策树的创建和训练是通过以下几行代码实现的:

  1. # 创建决策树模型
  2. decision_tree = DecisionTreeClassifier()
  3. # 训练模型
  4. decision_tree.fit(X_train, y_train)

        这里,DecisionTreeClassifier 是 scikit-learn 库中用于创建决策树分类器的类。通过实例化这个类,创建了一个决策树模型。然后,使用 fit 方法对模型进行训练,这个方法接收特征矩阵 X_train 和目标变量 y_train 作为参数。

        然而,这个示例没有直接展示决策树的结构。为了可视化决策树,可以使用 Graphviz 库,它是 scikit-learn 的 export_graphviz 函数的一个依赖。首先,需要安装 Graphviz 和 pydotplus 库:

pip install graphviz pydotplus

        然后,在 Python 代码中,可以使用以下代码来导出和可视化决策树:

  1. from sklearn.tree import export_graphviz
  2. import pydotplus
  3. # 导出决策树到dot文件
  4. dot_data = export_graphviz(decision_tree, out_file=None,
  5. feature_names=features.columns,
  6. class_names=['Survived', 'Not Survived'], filled=True, rounded=True)
  7. # 使用pydotplus将dot文件转换为png图片
  8. graph = pydotplus.graph_from_dot_data(dot_data)
  9. # 保存图片
  10. graph.write_png('titanic_decision_tree.png')
  11. # 显示图片
  12. from IPython.display import Image
  13. Image(filename='titanic_decision_tree.png')

        这段代码的功能是将决策树导出为一个 PNG 图片文件,并在 Jupyter Notebook 中显示出来。如果不是在 Jupyter Notebook 中工作,可以通过打开 titanic_decision_tree.png 文件来查看决策树的可视化结果。

        需要注意的是,export_graphviz 函数需要一个安装了 Graphviz 的环境。如果在本地环境中没有安装 Graphviz,可能需要在一个支持 Graphviz 的在线环境(如 Google Colab)中运行上述代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1014521
推荐阅读
相关标签
  

闽ICP备14008679号