[学习笔记] [机器学习] 6. [下]决策树算法(熵Entropy、信息增益(率)、基尼值(指数)、CART剪枝、特征工程特征提取、回归决策树)

news2024/10/6 16:27:43

7. 回归决策树

学习目标:

  • 知道回归决策树的实现原理

前面已经讲到,关于数据类型,我们主要可以把其分为两类,①连续型数据和②离散型数据。

在面对不同数据时,决策树也可以分为两大类型:

  1. 分类决策树:主要用于处理离散型数据
  2. 回归决策树:主要用于处理连续型数据

连续性数据主要用于回归;离散型数据主要用于分类

7.1 原理概述

不管是回归决策树还是分类决策树,都会存在两个核心问题:

  1. 如何选择划分结点?
  2. 如何决定叶节点的输出值?

一个回归树对应着输入空间(即特征空间)的一个划分结点以及在划分单元上的输出值。在分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。

假如我们有 n n n 个特征,每个特征有 s i ( i ∈ ( 1 , n ) ) s_i(i \in (1, n)) si(i(1,n)) 个取值,那我们遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征 j j j 的取值 s s s,使得损失函数最小,这样就得到了一个划分点。描述该过程的公式如下:

min ⁡ j s [ min ⁡ c 1   L ( y i , c i ) + min ⁡ c 2   L ( y i , c 2 ) ] \underset{js}{\min}[\underset{c_1}{\min}\ \mathcal{L}(y_i, c_i) + \underset{c_2} {\min} \ \mathcal{L}(y_i, c_2)] jsmin[c1min L(yi,ci)+c2min L(yi,c2)]

其中:

  • n n n 表示特征的数量
  • s i s_i si 表示第 i i i 个特征的取值数量
  • j j j s s s 分别表示最佳划分点的特征和取值
  • c 1 c_1 c1 c 2 c_2 c2 分别表示划分后两个区域内固定的输出值。
  • L \mathcal{L} L 表示损失函数

假设将输入空间划分为 M M M 个单元: R 1 , R 2 , . . . , R m R_1, R_2, ..., R_m R1,R2,...,Rm,那么每个区域的输出值就是 c m = a v g ( y i ∣ x i ∈ R m ) c_m = \mathrm{avg}(y_i|x_i \in R_m) cm=avg(yixiRm),也就是该区域内所有点 y y y 值的平均数。

其中:

  • M M M 表示输入空间被划分成的单元数
  • R 1 , R 2 , . . . , R m R_1, R_2, ..., R_m R1,R2,...,Rm 表示每个单元
  • c m c_m cm 表示每个区域的输出值,它等于该区域内所有点 y y y 值的平均数
  • a v g ( y i ∣ x i ∈ R m ) \mathrm{avg}(y_i|x_i \in R_m) avg(yixiRm) 表示在 x i x_i xi 属于区域 R m R_m Rm 的条件下,所有 y i y_i yi 值的平均数。

Q1:“单元”是什么?
A1:在决策树中,单元(也称为区域)是指输入空间被划分成的子区域。决策树通过不断地选择最佳划分点来将输入空间划分成若干个单元,每个单元内的数据点具有相似的特征。每个单元都有一个固定的输出值,用来预测该区域内数据点的目标值。

Q2:划分节点就是结点吗?划分节点可以是叶子结点吗?
A2:划分节点是指决策树中的非叶子节点,它用来将输入空间划分成若干个子区域。每个划分节点都有一个划分条件,用来决定数据点属于哪个子区域。划分节点不是叶子节点,叶子节点是指决策树中没有子节点的节点,它表示一个单元,用来预测该区域内数据点的目标值。

Q3:单元=叶子结点,划分点非叶子结点的结点,对吗?
A3:是的。在决策树中,每个单元都对应着一个叶子节点,每个叶子节点都表示一个单元。划分节点是非叶子节点,它用来将输入空间划分成若干个子区域。


举例:如下图,假如我们想要对楼内居民的年龄进行回归,将楼划分为 3 个区域 R 1 , R 2 , R 3 R_1, R_2, R_3 R1,R2,R3(红线)。那么 R 1 R_1 R1 的输出就是第一列四个居民年龄的平均值, R 2 R_2 R2 的输出就是第二列四个居民年龄的平均值, R 3 R_3 R3 的输出就是第三、四列八个居民年龄的平均值。

在这里插入图片描述

7.2 算法描述

输入:训练数据集 D D D
输出:回归树 f ( x ) f(x) f(x)

在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

、选择最优切分特征 j j j 与切分点 s s s,求解

min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \underset{j, s}{\min}\left[ \underset{c_1}{\min} \sum_{x_i \in R_1(j, s)} (y_i - c_1)^2 + \underset{c_2}{\min} \sum_{x_i \in R_2(j, s)}(y_i - c_2)^2 \right] j,smin c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2

遍历特征 j j j,对固定的切分特征 j j j 扫描切分点 s s s,选择使得上式达到最小值的对 ( j , s ) (j, s) (j,s)

、用选定的对 ( j , s ) (j, s) (j,s) 划分区域并决定相应的输出值:

R 1 ( j , s ) = x ∣ x ( j ) ≤ s R_1(j, s) = x|x^{(j)} \le s R1(j,s)=xx(j)s

R 2 ( j , s ) = x ∣ x ( j ) > s R_2(j, s) = x|x^{(j)} >s R2(j,s)=xx(j)>s

c ^ m = 1 N ∑ x 1 ∈ R m ( j , s ) y i   其中 x ∈ R m , m = 1 , 2 \hat{c}_m = \frac{1}{N}\sum_{x_1 \in R_m(j, s)} y_i \ \ 其中x \in R_m, m = 1, 2 c^m=N1x1Rm(j,s)yi  其中xRm,m=1,2

、继续对两个子区域调用步骤,直至满足停止条件。

、将输入空间划分为 M M M 个区域 R 1 , R 2 , . . . , R M R_1, R_2, ..., R_M R1,R2,...,RM,生成决策树:

f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x) = \sum_{m = 1}^M \hat{c}_mI(x\in R_m) f(x)=m=1Mc^mI(xRm)

其中:

  • D D D 表示训练数据集
  • f ( x ) f(x) f(x) 表示回归树
  • j j j s s s 分别表示最优切分特征和切分点
  • R 1 ( j , s ) R_1(j, s) R1(j,s) R 2 ( j , s ) R_2(j, s) R2(j,s) 分别表示根据最优切分特征和切分点划分出的两个子区域
  • c 1 c_1 c1 c 2 c_2 c2 分别表示两个子区域内的输出值
  • c ^ m \hat{c}_m c^m 表示第 m m m 个区域内的输出值,它等于该区域内所有点 y y y 值的平均数
  • M M M 表示输入空间被划分成的区域数
  • R 1 , R 2 , . . . , R M R_1, R_2, ..., R_M R1,R2,...,RM 表示每个区域。

7.3 简单实例

为了易于理解,接下来通过一个简单实例加深对回归决策树的理解。训练数据见下表,我们的目标是得到一棵最小二乘回归树。

x x x(特征值)12345678910
y y y(目标值)5.565.75.916.46.87.058.98.799.05

7.3.1 实例计算过程

、选择最优的切分特征 j j j 与最优切分点 s s s

  • 确定第一个问题:选择最优切分特征
    • 在本数据集中,只有一个特征,因此最优切分特征自然是 x x x
  • 确定第二个问题:我们考虑 9 个切分点 [ 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5 , 9.5 ] [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5] [1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
    • 损失函数定义为平方损失函数 L ( y , f ( x ) ) = [ f ( x ) − y ] 2 \mathcal{L}(y, f(x)) = [f(x) - y]^2 L(y,f(x))=[f(x)y]2,其中 f ( x ) f(x) f(x) 为预测值, y y y 为真实值(目标值)
    • 将上述 9 个切分点依此代入下面的公式,其中 c m = a v g ( y i ∣ x i ∈ R m ) c_m = \mathrm{avg}(y_i | x_i \in R_m) cm=avg(yixiRm)

a. 计算子区域输出值:

当切分点 s = 1.5 s=1.5 s=1.5 时,数据被分为两个子区域: R 1 R_1 R1 R 2 R_2 R2 R 1 R_1 R1 包括特征值为 1 1 1 的数据点,而 R 2 R_2 R2 包括特征值为 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 2,3,4,5,6,7,8,9,10 2,3,4,5,6,7,8,9,10 的数据点。

c 1 c_1 c1 c 2 c_2 c2 分别是这两个子区域的输出值。它们的计算方法是将各自子区域内的目标值相加,然后除以数据点的数量。因此,这两个区域的输出值分别为:

  • c 1 = 5.56 c_1 = 5.56 c1=5.56
  • c 2 = 5.7 + 5.91 + 6.4 + 6.8 + 7.05 + 8.9 + 8.7 + 9 + 9.05 9 = 7.50 c_2= \frac{5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05}{9} = 7.50 c2=95.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05=7.50

当切分点 s = 2.5 s=2.5 s=2.5 时,数据被分为两个子区域: R 1 R_1 R1 R 2 R_2 R2 R 1 R_1 R1 包括特征值为 1 , 2 1,2 1,2 的数据点,而 R 2 R_2 R2 包括特征值为 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 3,4,5,6,7,8,9,10 3,4,5,6,7,8,9,10 的数据点。

c 1 c_1 c1 c 2 c_2 c2 分别是这两个子区域的输出值。它们的计算方法是将各自子区域内的目标值相加,然后除以数据点的数量。因此,这两个区域的输出值分别为:

  • c 1 = 5.56 + 5.7 2 = 5.63 c_1 = \frac{5.56 + 5.7}{2} = 5.63 c1=25.56+5.7=5.63

  • c 2 = 5.91 + 6.4 + 6.8 + 7.05 + 8.9 + 8.7 + 9 + 9.05 8 = 7.73 c_2 = \frac{5.91+6.4+6.8+7.05+8.9+8.7+9+9.05}{8} = 7.73 c2=85.91+6.4+6.8+7.05+8.9+8.7+9+9.05=7.73

同理,我们可以得到其他各切分点的子区域输出值,如下表所示:

s s s1.52.53.54.55.56.57.58.59.5
c 1 c1 c15.565.635.725.896.076.246.626.887.11
c 2 c2 c27.57.737.998.258.548.918.929.039.05

b. 计算损失函数值,找到最优切分点:

c 1 c_1 c1, c 2 c_2 c2 的值代入到平方损失函数 L ( y , f ( x ) ) = [ f ( x ) − y ] 2 \mathcal{L}(y, f(x)) = [f(x) - y]^2 L(y,f(x))=[f(x)y]2,其中 f ( x ) f(x) f(x) 为预测值, y y y 为真实值(目标值)

当s=1.5时:总损失为:

L = ∑ x i ∈ R 1 [ f ( x i ) − y i ] 2 + ∑ x i ∈ R 2 [ f ( x i ) − y i ] 2 = [ 5.56 − 5.56 ] 2 + [ 7.50 − 5.7 ] 2 + [ 7.50 − 5.91 ] 2 + . . . + [ 7.50 − 9.05 ] 2 = 0 + ( 1.8 ) 2 + ( 1.59 ) 2 + . . . + ( − 1.55 ) 2 = 15.72 \begin{aligned} \mathcal{L} &= \sum_{x_i \in R_1} [f(x_i) - y_i]^2 + \sum_{x_i \in R_2} [f(x_i) - y_i]^2 \\ &= [5.56 - 5.56]^2 + [7.50 - 5.7]^2 + [7.50 - 5.91]^2 + ... + [7.50 - 9.05]^2 \\ &= 0 + (1.8)^2 + (1.59)^2 + ... + (-1.55)^2 & = 15.72 \end{aligned} L=xiR1[f(xi)yi]2+xiR2[f(xi)yi]2=[5.565.56]2+[7.505.7]2+[7.505.91]2+...+[7.509.05]2=0+(1.8)2+(1.59)2+...+(1.55)2=15.72

当切分点 s = 2.5 s=2.5 s=2.5 时,总损失为:

L = ∑ x i ∈ R 1 [ f ( x i ) − y i ] 2 + ∑ x i ∈ R 2 [ f ( x i ) − y i ] 2 = [ 5.63 − 5.56 ] 2 + [ 5.63 − 5.7 ] 2 + [ 7.73 − 5.91 ] 2 + . . . + [ 7.73 − 9.05 ] 2 = ( 0.07 ) 2 + ( − 0.07 ) 2 + ( 1.82 ) 2 + . . . + ( − 1.32 ) 2 \begin{aligned} \mathcal{L} &= \sum_{x_i \in R_1} [f(x_i) - y_i]^2 + \sum_{x_i \in R_2} [f(x_i) - y_i]^2 \\ &= [5.63 - 5.56]^2 + [5.63 - 5.7]^2 + [7.73 - 5.91]^2 + ... + [7.73 - 9.05]^2 \\ &= (0.07)^2 + (-0.07)^2 + (1.82)^2 + ... + (-1.32)^2 \end{aligned} L=xiR1[f(xi)yi]2+xiR2[f(xi)yi]2=[5.635.56]2+[5.635.7]2+[7.735.91]2+...+[7.739.05]2=(0.07)2+(0.07)2+(1.82)2+...+(1.32)2

同理,计算得到其他各切分点的损失函数值,可获得下表:

s s s1.52.53.54.55.56.57.58.59.5
m ( s ) m(s) m(s)15.7212.078.365.783.911.938.0111.7315.74

显然取 s = 6.5 s=6.5 s=6.5 时, m ( s ) m(s) m(s) 最小。因此第一个划分变量 [ j = x , s = 6.5 ] [j=x,s=6.5] [j=x,s=6.5]


Q:为什么要用 m ( s ) m(s) m(s),不应该是 L ( y , f ( x ) ) \mathcal{L}(y, f(x)) L(y,f(x))吗?
A m ( s ) m(s) m(s) L \mathcal{L} L 都表示损失函数。在回归决策树中,损失函数用于衡量划分后的子区域内预测值与真实值之间的差异。不同的文献或资料可能会使用不同的符号来表示损失函数,但它们的意义是相同的。

m ( s ) m(s) m(s) 用于表示在切分点 s s s 处的损失函数值。因此,当计算不同切分点处的损失函数值时,使用 m ( s ) m(s) m(s) L \mathcal{L} L 都是可以的。


、用选定的 ( j , s ) (j, s) (j,s) 划分区域,并决定输出值:

  • 两个区域分别是: R 1 = 1 , 2 , 3 , 4 , 5 , 6 R_1={1,2,3,4,5,6} R1=1,2,3,4,5,6 R 2 = 7 , 8 , 9 , 10 R_2={7,8,9,10} R2=7,8,9,10
  • 输出值 c m = a v g ( y i ∣ x i ∈ R m ) c_m = \mathrm{avg}(y_i|x_i\in R_m) cm=avg(yixiRm) c 1 = 6.24 c_1 =6.24 c1=6.24 c 2 = 8.91 c_2 = 8.91 c2=8.91

、调用步骤一、二,继续划分:

R 1 R_1 R1 继续进行划分:

x x x(特征值)123456
y y y(目标值)5.565.75.916.46.87.05

取切分点 [ 1.5 , 2.5 , 3.5 , 4.5 , 5.5 ] [1.5,2.5,3.5,4.5,5.5] [1.5,2.5,3.5,4.5,5.5],则各区域的输出值 c c c 如下表:

s s s1.52.53.54.55.5
c 1 c1 c15.565.635.725.896.07
c 2 c2 c26.376.546.756.937.02

计算损失函数值 m ( s ) m(s) m(s)

s s s1.52.53.54.55.5
m ( s ) m(s) m(s)1.30870.7540.27710.43681.0644

s = 3.5 s=3.5 s=3.5 时, m ( s ) m(s) m(s) 最小。

循环…

回归决策树的划分终止条件通常有以下几种:

  1. 子区域中的数据点数量小于预先设定的阈值。
  2. 子区域中的数据点目标值的方差小于预先设定的阈值。
  3. 树的深度达到预先设定的最大深度。

当满足上述任意一个条件时,划分过程将终止。这些条件可以根据具体问题进行调整,以获得最佳的模型性能。

、生成回归树

假设在生成 3 个区域之后停止划分,那么最终生成的回归树形式如下:

T = { 5.72 x ≤ 3.5 6.75 3.5 ≤ x ≤ 6.5 8.91 6.5 < x T = \begin{cases} 5.72 & x \le 3.5 \\ 6.75 & 3.5 \le x \le 6.5 \\ 8.91 & 6.5 < x \end{cases} T= 5.726.758.91x3.53.5x6.56.5<x

这棵回归树的结构如下:

          [j=x,s=6.5]
          /         \
  [j=x,s=3.5]       R_2
   /       \
 R_{11}   R_{12}

其中, R 11 R_{11} R11 R 12 R_{12} R12 R 2 R_2 R2 都是叶子节点。

这棵回归树有三个叶子节点,分别对应三个子区域 R 11 R_{11} R11 R 12 R_{12} R12 R 2 R_2 R2。根节点的划分变量为 [ j = x , s = 6.5 ] [j=x,s=6.5] [j=x,s=6.5],它将数据分为两个子区域: R 1 R_1 R1 R 2 R_2 R2。根节点的左子节点对应子区域 R 1 R_1 R1,它的划分变量为 [ j = x , s = 3.5 ] [j=x,s=3.5] [j=x,s=3.5],将子区域 R 1 R_1 R1 再次分为两个子区域: R 11 R_{11} R11 R 12 R_{12} R12。根节点的左子节点的左右子节点分别对应子区域 R 11 R_{11} R11 R 12 R_{12} R12,它们都是叶子节点。根节点的右子节点对应子区域 R 2 R_2 R2,它也是一个叶子节点。

其中:

  • j j j s s s 分别表示切分特征和切分点
  • j = x j=x j=x 表示切分特征为 x x x,而 s = 6.5 s=6.5 s=6.5 表示切分点为 6.5 6.5 6.5
    • 当切分变量为 [ j = x , s = 6.5 ] [j=x,s=6.5] [j=x,s=6.5] 时,数据将根据特征 x x x 的值被分为两个子区域: R 1 R_1 R1 R 2 R_2 R2。子区域 R 1 R_1 R1 包括特征值小于等于 6.5 6.5 6.5 的数据点,而子区域 R 2 R_2 R2 包括特征值大于 6.5 6.5 6.5 的数据点。
    • 因此,当切分变量为 [ j = x , s = 6.5 ] [j=x,s=6.5] [j=x,s=6.5] 时,数据将根据特征 x x x 的值被分为两个子区域。

小结

  • 输入:训练数据集 D D D
  • 输出:回归树 f ( x ) f(x) f(x)
  • 流程:在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
    1. 选择最优切分特征 j j j 与切分点 s s s,求解 min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \underset{j, s}{\min}\left[ \underset{c_1}{\min} \sum_{x_i \in R_1(j, s)} (y_i - c_1)^2 + \underset{c_2}{\min} \sum_{x_i \in R_2(j, s)}(y_i - c_2)^2 \right] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2] —— 遍历特征 j j j,对固定的切分特征 j j j 扫描切分点 s s s,选择使得上式达到最小值的对 ( j , s ) (j, s) (j,s)
    2. 用选定的对 ( j , s ) (j, s) (j,s) 划分区域并决定相应的输出值:
      R 1 ( j , s ) = x ∣ x ( j ) ≤ s R_1(j, s) = x|x^{(j)} \le s R1(j,s)=xx(j)s

R 2 ( j , s ) = x ∣ x ( j ) > s R_2(j, s) = x|x^{(j)} >s R2(j,s)=xx(j)>s

c ^ m = 1 N ∑ x 1 ∈ R m ( j , s ) y i   其中 x ∈ R m , m = 1 , 2 \hat{c}_m = \frac{1}{N}\sum_{x_1 \in R_m(j, s)} y_i \ \ 其中x \in R_m, m = 1, 2 c^m=N1x1Rm(j,s)yi  其中xRm,m=1,2
3. 继续对两个子区域调用步骤一和二,直至满足停止条件。
4. 将输入空间划分为 M M M 个区域 R 1 , R 2 , … , R M R_1, R_2 , …, R_M R1,R2,,RM,生成决策树 f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x) = \sum_{m = 1}^M \hat{c}_mI(x\in R_m) f(x)=m=1Mc^mI(xRm)

7.4 回归决策树和线性回归对比

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.tree import DecisionTreeRegressor 
from sklearn.linear_model import LinearRegression
from pylab import mpl
# 设置中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False


# 1. ⽣成数据 
x = np.array(list(range(1, 11))).reshape(-1, 1)  # 使其变为列向量
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05]) 

# 2. 训练模型 
model_1 = DecisionTreeRegressor(max_depth=1)  # 决策树模型
model_2 = DecisionTreeRegressor(max_depth=3)  # 决策树模型
model_3 = LinearRegression()  # 线性回归模型
model_1.fit(x, y) 
model_2.fit(x, y) 
model_3.fit(x, y) 

# 3. 模型预测 
X_test = np.arange(0.0, 10.0, 0.01).reshape(-1, 1)  # ⽣成1000个数,⽤于预测模型 
predict_1 = model_1.predict(X_test) 
predict_2 = model_2.predict(X_test) 
predict_3 = model_3.predict(X_test) 

# 4. 结果可视化 
plt.figure(dpi=300) 
plt.scatter(x, y, label="原始数据(目标值)") 
plt.plot(X_test, predict_1, label="回归决策树: max_depth=1") 
plt.plot(X_test, predict_2, label="回归决策树: max_depth=3") 
plt.plot(X_test, predict_3, label="线性回归") 

plt.xlabel("数据") 
plt.ylabel("预测值") 
plt.title("线性回归与回归决策树效果对比")
plt.grid(alpha=0.5)

plt.legend() 
plt.show()

结果:

在这里插入图片描述

8. 决策树总结

8.1 优点

  1. 易于理解和解释
    • 决策树的结构可以可视化,非专家也能很容易理解。
  2. 数据准备简单
    • 决策树不需要对数据进行复杂的预处理,例如归一化或去除缺失值。
  3. 能够同时处理数值型和分类数据
  4. 不受数据缩放的影响
  5. 计算成本相对较低

这些优点使得决策树在许多领域都得到了广泛应用。

8.2 缺点

  1. 容易过拟合。决策树模型可能会产生过于复杂的模型,导致泛化能力较差。
    • 可以通过剪枝、设置叶节点所需的最小样本数或设置树的最大深度来避免过拟合。
  2. 不稳定性。微小的数据变化可能会导致生成完全不同的树。
    • 这个问题可以通过决策树集成来缓解。
  3. 对连续性字段预测困难
  4. 当类别太多时,错误率可能会增加较快

这些缺点需要在使用决策树时予以注意。

8.3 改进的方法

针对决策树的缺点,有一些改进方法可以使用。例如:

  1. 避免过拟合
    • 可以通过剪枝、设置叶节点所需的最小样本数或设置树的最大深度来避免过拟合。
    • 剪枝包括预剪枝和后剪枝。
      • 前者通过对连续型变量设置阈值,来控制树的深度,或者控制节点的个数,在节点开始划分之前就进行操作,进而防止过拟合现象。
      • 后者是自底向上对非叶节点进行考察,如果这个内部节点换成叶节点能提升决策树的泛化能力,那就把它换掉。
  2. 使用决策树集成
    • 可以通过集成多个决策树来提高模型的稳定性和准确性。
      • 例如,随机森林算法就是基于决策树的集成学习算法,它通过构建多棵决策树并结合它们的预测结果来提高模型的准确性和稳定性。
  3. 对连续性字段进行离散化处理
    • 可以将连续性字段离散化为分类变量,以便决策树能够更好地处理。
  4. 对类别不平衡的数据进行重采样
    • 可以对类别不平衡的数据进行重采样,以减少错误率。

这些方法可以帮助改进决策树模型,提高其准确性和稳定性。

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

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

相关文章

第三篇:强化学习发展历史

你好&#xff0c;我是zhenguo&#xff08;郭震&#xff09; 这是强化学习第三篇&#xff0c;我们回顾一下它的发展历史&#xff1a;强化学习发展历史 强化学习作为一门研究领域&#xff0c;经历了多年的发展和演进。以下是强化学习的主要发展历史里程碑&#xff1a; 1950年代-1…

前沿重器[33] | 试了试简单的prompt

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

容器简单介绍

目录 一、容器简介​编辑 二、容器和虚拟化技术差异 三、容器基本概念 四、容器技术对企业优势 五、容器的工具 一、容器简介 docker只是容器工具&#xff0c;真正容器技术是LXC &#xff08;linux container&#xff09; 二、容器和虚拟化技术差异 虚拟机模式&#xff…

微服务开发系列 第二篇:Nacos

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

【腾讯云 Finops Crane 集训营】云架构成本大,浪费支出太高?何不试试Crane

一、前言 近年来&#xff0c;很多公司随着业务的发展都开始采用云原生的架构方式来部署服务系统&#xff0c;以便满足系统的弹性需求。但随着业务的进一步增长&#xff0c;k8s的节点数不断的增加&#xff0c;每个月消耗的费用也随之增加&#xff0c;导致了资源的利用率并不平均…

Python自动化办公对每个子文件夹的Excel表加个表头(Excel同名)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 玉容寂寞泪阑干&#xff0c;梨花一枝春带雨。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python粉丝【彩】问了一个Python自动化办公处理的问题&…

python整合合并两个excel文件,保留各自excel文件的样式,包含字体大小和字体颜色等格式

一、实现目标 现有两个excel文件data1.xlsx和data2.xlsx,要求将这两个excel文件合并为一个excel文件,同时保留这两个excel文件各自带有的样式,包括字体、颜色等格式需要保留。 data1.xlsx: …

装饰者设计模式解读

问题引进 星巴克咖啡订单项目&#xff08;咖啡馆&#xff09;&#xff1a; 1) 咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料&#xff1a;Milk、Soy(豆浆)、Chocolate 3) 要求在扩展新的咖啡种类时&#x…

Redis主从集群搭建及其原理

Redis主从集群搭建及其原理 1.Redis主从1.1.搭建主从架构1.2.准备实例和配置1.3.启动1.4.开启主从关系1.5.测试 2.主从数据同步原理2.1.全量同步2.2.增量同步2.3.repl_backlog原理 3.主从同步优化4.小结 1.Redis主从 1.1.搭建主从架构 单节点Redis的并发能力是有上限的&#…

车辆合格证怎么转为结构化excel数据?

一、为何要将车辆合格证转为结构化excel&#xff1f; 车辆合格证是在车辆制造完成后&#xff0c;经过各项检测合格的证明。对于车辆行业来说&#xff0c;车辆合格证是一种重要的合规证明&#xff0c;在车辆的生产制造、售后服务、质量管理等各个环节中都有着重要的作用。同时&…

【架构】常见技术点--监控告警

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 服务监控 2. 全链路监控 2.1 服务拨测 2.2 节点探测 2.3 告警过滤 2.4 告警去重 …

内网 monorepo 配置指南(PNPM、YARN、Rush.js)

此处的内网是指没办法连接互联网进行依赖下载的环境&#xff0c;本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发&#xff0c;无法从互联网同步依赖&#xff0c;就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好&#xff0c;从互联网机器将…

音视频技术开发周刊 | 294

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 五问「ChatGPT医学影像」&#xff1a;新一代的 AI 能否成为放射科医生的一把利器&#xff1f; 在医学等专业性较强的领域内&#xff0c;ChatGPT的表现还不够好&#xff0c…

Linux 防火墙 SNAT DNAT

SNAT原理与应用 SNAT 应用环境 局域网主机共享单个公网IP地址接入Internet &#xff08;私有IP地址不能在Internet中正常路由&#xff09; SNAT原理 修改数据包的源地址 SNAT可以认为是路由器NAT中的easy ip DNAT可以认为是路由器NAT中的 nat server SNAT将 内网源地址 转化为网…

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-Diff

1. 前言 在上一篇文章介绍VNode的时候我们说了&#xff0c;VNode最大的用途就是在数据变化前后生成真实DOM对应的虚拟DOM节点&#xff0c;然后就可以对比新旧两份VNode&#xff0c;找出差异所在&#xff0c;然后更新有差异的DOM节点&#xff0c;最终达到以最少操作真实DOM更新…

FasterRCNN训练自己的数据集

2016年提出的Faster RCNN目标检测模型是深度学习现代目标检测算法的开山之作&#xff0c;也是第一个真正全流程都是神经网络的目标检测模型。 其主要步骤如下&#xff1a; 1&#xff0c;使用CNN对输入图片提取feature map. 2&#xff0c;对feature map上的每个点设计一套不同大…

Roboflow的使用

文章目录 前言一、使用labelimg标注数据集二、导入roboflow1.注册roboflow账户2.导入图片2.1 创建工作区workspace&#xff08;非必须&#xff09;2.2 创建项目 project2.3 导入 3、导出图片4、同一个数据集可以导出不同类型 前言 我自己也是一个小白不是很会&#xff0c;如果…

ASO优化之怎么做好关键词本地化覆盖

如果想要我们的应用走向国际化&#xff0c;被多个国家/地区使用&#xff0c;那么做好关键词本地化覆盖至关重要。我们可以主要针对中文和英文进行设置&#xff08;准备两套元数据&#xff09;&#xff0c;这样能够迅速增加应用商店ASO关键词覆盖数量。 那么我们要在哪里设置&a…

小白也能懂的薛斯通道抄底指标以及公式(附源码)

什么是薛斯通道&#xff1f; 上个世纪70年代&#xff0c;美国人薛斯最早发明了薛斯通道。 他本人曾是研究火箭运行的。 薛斯通道包括两组通道指标&#xff0c;分别是长期大通道指标&#xff08;100天&#xff09;和短期小通道指标&#xff08;10天&#xff09;。 股价实际上是被…

Netflix 团队解决了 Linux 内核中的 FUSE 死锁

Laf 公众号已接入了 AI 绘画工具 Midjourney&#xff0c;可以让你轻松画出很多“大师”级的作品。同时还接入了 AI 聊天机器人&#xff0c;支持 GPT、Claude 以及 Laf 专有模型&#xff0c;可通过指令来随意切换模型。欢迎前来调戏&#x1f447; <<< 左右滑动见更多 &…