• 机器学习——决策树/随机森林


    0、前言:

    • 决策树可以做分类也可以做回归,决策树容易过拟合
    • 决策树算法的基本原理是依据信息学熵的概念设计的(Logistic回归和贝叶斯是基于概率论),熵最早起源于物理学,在信息学当中表示不确定性的度量,熵值越大表示不确定性越大。
    • ID3算法就是一种通过熵的变化,构造决策树的算法,其基本公式如下:
      在这里插入图片描述
    • ID3算法举例:
      在这里插入图片描述
      1、计算信息熵:在target中,总共有10个结果,其中yes有7个,no有3个,通过信息熵计算公式,得到如下结果:
      在这里插入图片描述
      2、计算样本熵:
      对于特征1:s有3个对应比例为0.3(这3个s对应的target中yes有1个,no有2个),m有4个对应比例为0.4(这4个m对应的target中yes有3个,no有1个),l有3个对应比例为0.3(这3个l对应的target中yes有3个,no有0个),则特征1通过样本熵的计算公式如下:
      在这里插入图片描述
      其余两个特征计算样本熵的方法和特征一一致。
      3、计算信息增益:通过公式(info(D) - info_D_L)计算出所有样本的信息增益,然后比较他们的信息增益,选最大的作为第一个决策树节点,然后根据节点划分子节点,如果子节点信息确定则设置为叶子节点,如果子节点存在不同选择,就要重新通过上面的步骤选择新的子节点。上面计算结果中特征2的信息增益最大,因此得到如下决策树,然后继续对target和特征1和特征3重复上面步骤,选择第二个节点。
      在这里插入图片描述
    • ID4.5:改进了ID3算法中不重复特征(例如序号列)熵增益过大的缺点,方法就是给每个ID3算法得到的结果除以对应特征的“信息熵”,因此就需要给每个特征通过“信息熵”公式再计算一次它对应的信息熵。(info(D) - info_D_L)/E(A)
    • CART算法(gini):改进了ID3算法中需要大量对数运算导致运算速度较慢的缺点,用基尼代替了熵的概念,核心公式如下,相当于用下面的核心公式替代了求信息熵的公式,其余计算过程和ID3算法一致。也是先求target,然后再求其余特征。
      在这里插入图片描述
      对数计算和平方计算对比情况如下:
      在这里插入图片描述
      计算过程:
      首先求target:
      在这里插入图片描述
      再求特征1(特征2、特征3类似)
      在这里插入图片描述
      最后求信息增益(特征2、特征3类似):gini_D - gini_D_L

    1、决策树算法参数说明:

    在这里插入图片描述

    2、决策树算法的应用:

    • 1、鸢尾花分类任务(不同参数值分类结果)
      在这里插入图片描述
    • 2、sin函数回归任务:
    # 导包
    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    from sklearn.tree import DecisionTreeRegressor
    
    # 产生数据
    x = np.linspace(1,5,100)
    y = np.sin(x)
    # 绘图
    plt.figure(figsize=(10,5))
    plt.scatter(x,y,c='r')
    # 添加噪点
    y[::5]+=np.random.randn(20)*0.1 # 一维数组的加法
    # 绘图
    plt.figure(figsize=(10,5))
    plt.scatter(x,y,c='r')
    # 转化输入数据维度
    x = x.reshape(-1,1)
    x.shape
    # 预测
    Dt = DecisionTreeRegressor(max_depth=7)
    Dt.fit(x,y)
    Dt.score(x,y)
    # 生成测试数据预测
    x_p = np.linspace(3.5,5,100)
    x_p = x_p.reshape(-1,1)
    x_p.shape
    # 预测绘图
    pre_y = Dt.predict(x)
    plt.scatter(x,y,c='r')
    plt.scatter(x_p,pre_y,c='b')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述


    3、随机森林算法:

    • 原理:随机森林是决策树的升级版本,随机说的是每个树都是随机生成的,每个数都不相同。在构建随机森林时,会从训练数据中有放回的随机选取一部分样本,同样也会随机选取数据样本的部分特征进行训练。每棵树使用的样本和特征都不相同,训练结果也各不相同。
    • 使用随机森林的原因:训练最初我们并不知道哪些是异常样本,也不知道哪些特征对结果影响较大,随机的过程就能降低这两个问题的影响,随机森林的输出结果由投票决定,大部分决策树的结果就决定了最终结果。
    • 优点:可以同时训练,不容易过拟合,能处理特征较多的高维数据,不知道使用什么方法时,先试试随机森林。因为随机森林属于多模型组合学习,这些模型之间都是独立学习预测的。
    • 导入随机森林分类库:from sklearn.ensemble import RandomForestClassifier
    • 重要参数:
      n_estimators:决策树的数量,默认是100个

    4、总结:

    • 不论是决策树还是随机森林都有一个属性:feature_importances_,通过这个属性就可以在模型训练结束之后看到每个特征的重要性。其他属性可以通过训练好的模型后面加“.”代码的自动补全就会显示。
    • 决策树当中的一些重要参数:
      在这里插入图片描述
      在这里插入图片描述

  • 相关阅读:
    本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?
    SRT参数说明
    CSDN编程竞赛·第六期-赛后感受
    2.5 Go语言中的切片(Slice)
    springboot+高校失物招领系统 毕业设计-附源码121441
    新能源汽车产量创历史新高,七个月顶一年,江苏“爆炸式”发展?
    Oracle,可保留在快速恢复区(FRA)的文件类型
    springboot整合logback
    传输层 TCP 拥塞控制(3):快速重传与快速恢复
    si446使用记录(一):基本资料获取
  • 原文地址:https://blog.csdn.net/sz1125218970/article/details/132895137