zoukankan      html  css  js  c++  java
  • 机器学习算法(六):基于决策树的分类预测

    一、决策树的介绍

    决策树是一种常见的分类模型,在金融分控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先看男方是否有房产,如果有房产再看是否有车产,如果有车产再看是否有稳定工作……最后得出是否要深入了解的判断。

    决策树的主要优点:

    1. 具有很好的解释性,模型可以生成可以理解的规则。
    2. 可以发现特征的重要程度。
    3. 模型的计算复杂度较低。

    决策树的主要缺点:

    1. 模型容易过拟合,需要采用减枝技术处理。
    2. 不能很好利用连续型特征
    3. 预测能力有限,无法达到其他强监督模型效果。
    4. 方差较高,数据分布的轻微改变很容易造成树结构完全不同。
    二、代码流程

    Part1 Demo实践

    • Step1:库函数导入
    • Step2:模型训练
    • Step3:数据和模型可视化
    • Step4:模型预测

    Part2 基于企鹅(penguins)数据集的决策树分类实践 

    • Step1:库函数导入
    • Step2:数据读取/载入
    • Step3:数据信息简单查看
    • Step4:可视化描述
    • Step5:利用 决策树模型 在二分类上 进行训练和预测
    • Step6:利用 决策树模型 在三分类(多分类)上 进行训练和预测

    2.1Demo实践

    Step1: 库函数导入

    ##  基础函数库
    import numpy as np 
    
    ## 导入画图库
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    ## 导入决策树模型函数
    from sklearn.tree import DecisionTreeClassifier
    from sklearn import tree

    Step2: 训练模型

    ##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)

    Step3: 数据和模型可视化(需要用到graphviz可视化库)

    ## 可视化构造的数据样本点
    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
    dot_data = tree.export_graphviz(tree_clf, out_file=None)
    graph = graphviz.Source(dot_data)
    graph.render("pengunis")
    ## 'pengunis.pdf'  目前环境问题,还不能展示

     Step4:模型预测

    ## 创建新样本
    x_fearures_new1 = np.array([[0, -1]])
    x_fearures_new2 = np.array([[2, 1]])
    ## 在训练集和测试集上分布利用训练好的模型进行预测
    y_label_new1_predict = tree_clf.predict(x_fearures_new1)
    y_label_new2_predict = tree_clf.predict(x_fearures_new2)
    print('The New point 1 predict class:
    ',y_label_new1_predict)
    print('The New point 2 predict class:
    ',y_label_new2_predict)
    # The New point 1 predict class:
     # [1]
    # The New point 2 predict class:
     # [0]

     全部代码如下(已折叠):

    # -*- coding: utf-8 -*-
    """
    Created on Tue Aug 11 10:12:48 2020
    
    @author: Admin
    """
    
    #Step1: 库函数导入
    ##  基础函数库
    import numpy as np 
    
    ## 导入画图库
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    ## 导入决策树模型函数
    from sklearn.tree import DecisionTreeClassifier
    from sklearn import tree
    
    
    #Step2: 训练模型
    ##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)
    
    
    #Step3: 数据和模型可视化(需要用到graphviz可视化库)
    ## 可视化构造的数据样本点
    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
    dot_data = tree.export_graphviz(tree_clf, out_file=None)
    graph = graphviz.Source(dot_data)
    graph.render("pengunis")
    ## 'pengunis.pdf'
    
    
    #Step4:模型预测
    ## 创建新样本
    x_fearures_new1 = np.array([[0, -1]])
    x_fearures_new2 = np.array([[2, 1]])
    ## 在训练集和测试集上分布利用训练好的模型进行预测
    y_label_new1_predict = tree_clf.predict(x_fearures_new1)
    y_label_new2_predict = tree_clf.predict(x_fearures_new2)
    print('The New point 1 predict class:
    ',y_label_new1_predict)
    print('The New point 2 predict class:
    ',y_label_new2_predict)
    # The New point 1 predict class:
     # [1]
    # The New point 2 predict class:
     # [0]
    View Code

    2.2基于企鹅(penguins)数据集的决策树分类实践 

    在实践的最开始,我们首先需要导入一些基础的函数库包括:numpy (Python进行科学计算的基础软件包),pandas(pandas是一种快速,强大,灵活且易于使用的开源数据分析和处理工具),matplotlib和seaborn绘图。

    Step1:函数库导入

    ##  基础函数库
    import numpy as np 
    import pandas as pd
    
    ## 绘图函数库
    import matplotlib.pyplot as plt
    import seaborn as sns

    本次我们选择企鹅数据(palmerpenguins)进行方法的尝试训练,该数据集一共包含8个变量,其中7个特征变量,1个目标分类变量。共有150个样本,目标变量为 企鹅的类别 其都属于企鹅类的三个亚属,分别是(Adélie, Chinstrap and Gentoo)。包含的三种种企鹅的七个特征,分别是所在岛屿,嘴巴长度,嘴巴深度,脚蹼长度,身体体积,性别以及年龄。

    Step2:数据读取/载入

  • 相关阅读:
    测试
    python制作
    Mysql 用法
    Day006 Java面向对象编程
    Day005 Java数组详解
    Day004 Java方法详解
    Day003 Java流程控制
    Day002 Java基础语法
    Day001 MrakDown语法 Dos命令
    4. 谈谈你对ArrayList和LinkedList 的理解
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13474123.html
Copyright © 2011-2022 走看看