【笔记】决策树的基本思想及简单操作

决策树

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成树来求出现值的期望大于等于零的概率,是一种用来评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法,由于这种决策分支画成图形很像一棵树的枝干,故称决策树

在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系

决策树在生活中并不少见,很多时候会不自觉的使用这种思路来对事情进行判断,比如招聘的时候,会通过不断地条件筛选下去,不断地判断,然后得到结果

可以通过具体实现来体现一下决策树的思想

(在notebook中)

加载好需要使用的包,使用鸢尾花数据集,由于需要可视化,所以只保留其中的数据的两个维度,将样本数据可视化出来

  import numpy as np
  import matplotlib.pyplot as plt
  from sklearn import datasets

  iris = datasets.load_iris()
  X = iris.data[:,2:]
  y = iris.target

  plt.scatter(X[y==0,0],X[y==0,1])
  plt.scatter(X[y==1,0],X[y==1,1])
  plt.scatter(X[y==2,0],X[y==2,1])

图像如下

使用sklearn中的DecisionTree来进行一下分类,调用DecisionTreeClassifier类,创建对象,传参,设置为最高深度为2,使用熵,然后进行模型训练fit

  from sklearn.tree import DecisionTreeClassifier

  tree_clf = DecisionTreeClassifier(max_depth=2,criterion="entropy")
  tree_clf.fit(X,y)

使用绘制函数,并进行图像的绘制

from matplotlib.colors import ListedColormap
def plot_decision_boundary(model, axis):

    x0,x1 = np.meshgrid(  
        np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),
        np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1)
    )
    X_new = np.c_[x0.ravel(),x1.ravel()]
    
    y_predict = model.predict(X_new)
    zz = y_predict.reshape(x0.shape)
    
    custom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])

    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)

  plot_decision_boundary(tree_clf,axis=[0.5,7.5,0,3])
  plt.scatter(X[y==0,0],X[y==0,1])
  plt.scatter(X[y==1,0],X[y==1,1])
  plt.scatter(X[y==2,0],X[y==2,1])

图像如下

上面就是决策树得到的决策边界

通过这个图像来分析一下这个决策树的情况,这里的每一个特征都是数字特征,每一个特征都是一个实数,那么就可以看出来,在横轴小于大约2.4的时候,可以直接分为红色类别,在横轴大于大约2.4的时候,在纵轴小于约1.8的时候,可以分为黄色类别,大于约1.8的时候,分为蓝色类别

可以发现一些决策树的特征,像是决策树是一种非参数学习的算法,而且其很容易就可以解决分类问题,天然的就可以解决多分类问题,同时也可以解决回归问题,而且可以发现,决策树算法的可解释性是很好的

决策树的构建的关键问题就是每个节点在哪个维度做划分以及某个维度在哪个值上做划分,解决了这两个问题,就能很好的明白决策树的使用

posted @ 2021-01-28 20:45  DbWong_0918  阅读(670)  评论(0编辑  收藏  举报