修正了部分文档中的笔误

This commit is contained in:
jackfrued 2025-02-13 17:17:57 +08:00
parent d06eb65060
commit a60f599d95
5 changed files with 91 additions and 68 deletions

View File

@ -7,7 +7,7 @@ k 最近邻算法kNN是一种用于分类和回归的非参数统计方法
我们可以用距离distance来衡量特征空间中两个实例之间的相似度常用的距离度量包括闵氏距离、马氏距离、余弦距离、编辑距离等。闵氏距离全称闵可夫斯基距离Minkowski Distance对于两个 $\small{n}$ 维向量 $\small{\mathbf{x}=(x_{1}, x_{2}, \cdots, x_{n})}$ 和 $\small{\mathbf{y}=(y_{1}, y_{2}, \cdots, y_{n})}$ ,它们之间的距离可以定义为:
$$
d(\mathbf{x}, \mathbf{y}) = (\sum_{i=1}^{n}{|x_{i} - y_{i}|}^{p})^{\frac{1}{p}}
d(\mathbf{x}, \mathbf{y}) = (\sum_{i=1}^{n}{\vert x_{i} - y_{i} \rvert}^{p})^{\frac{1}{p}}
$$
其中, $\small{p \ge 1}$ ,虽然 $\small{p \lt 1}$ 可以计算,但不再严格满足距离的定义,通常不被视为真正的距离。
@ -15,7 +15,7 @@ $$
当 $\small{p = 1}$ 时,闵氏距离退化为**曼哈顿距离**,即:
$$
d(\mathbf{x}, \mathbf{y}) = \sum_{i=1}^{n}|x_{i} - y_{i}|
d(\mathbf{x}, \mathbf{y}) = \sum_{i=1}^{n} \lvert x_{i} - y_{i} \rvert
$$
当 $\small{p = 2}$ 时,闵氏距离退化为**欧几里得距离**,即:
@ -27,7 +27,7 @@ $$
当 $\small{p \to \infty}$ 时,闵氏距离成为**切比雪夫距离**,即:
$$
d(\mathbf{x}, \mathbf{y}) = \underset{i}{max}(|x_{i} - y_{i}|)
d(\mathbf{x}, \mathbf{y}) = \underset{i}{max}(\lvert x_{i} - y_{i} \rvert)
$$
其他的距离度量方式我们等用到的时候再为大家介绍。在使用k 最近邻算法做分类时,我们的数据集通常都是数值型数据,此时直接使用欧几里得距离是一个不错的选择。

View File

@ -27,15 +27,15 @@ $$
很显然,知道的信息越多,随机变量(数据集)的不确定性就越小。这些信息,可以是直接针对我们想了解的随机事件的信息,也可以是和我们关心的随机事件相关的其他事件的信息。在数学上可以严格的证明这些相关的信息也能够降低或消除不确定性,为此我们定义**条件熵**,它表示在给定特征 $\small{A}$ 的条件下,数据集 $\small{D}$ 的不确定性。条件熵的公式如下所示:
$$
H(D|A) = \sum_{v \in A}\frac{|D_{v}|}{|D|}H(D_{v})
H(D \vert A) = \sum_{v \in A}\frac{\lvert D_{v} \rvert}{\lvert D \rvert}H(D_{v})
$$
上面的公式中,我们让 $\small{v}$ 取得特征 $\small{A}$ 所有可能的取值,其中 $\small{D_{v}}$ 代表特征 $\small{A}$ 取值为 $\small{v}$ 的样本子集, $\small{\frac{|D_{v}|}{|D|}}$ 代表权重,即特征取值为 $\small{v}$ 的样本比例。可以证明 $\small{H(D) \ge H(D|A)}$ ,也就是说多了特征 $\small{A}$ 的信息之后,数据集 $\small{D}$ 的不确定性下降了。当然,还要注意等号成立的情况,也就是说增加了特征 $\small{A}$ 的信息,但是 $\small{D}$ 的不确定没有下降,也就是说我们获取的信息与要研究的内容没有关系。
上面的公式中,我们让 $\small{v}$ 取得特征 $\small{A}$ 所有可能的取值,其中 $\small{D_{v}}$ 代表特征 $\small{A}$ 取值为 $\small{v}$ 的样本子集, $\small{\frac{\lvert D_{v} \rvert}{\lvert D \rvert}}$ 代表权重,即特征取值为 $\small{v}$ 的样本比例。可以证明 $\small{H(D) \ge H(D \vert A)}$ ,也就是说多了特征 $\small{A}$ 的信息之后,数据集 $\small{D}$ 的不确定性下降了。当然,还要注意等号成立的情况,也就是说增加了特征 $\small{A}$ 的信息,但是 $\small{D}$ 的不确定没有下降,也就是说我们获取的信息与要研究的内容没有关系。
有了上面的铺垫,接下来我们就可以给出**信息增益**的定义,它是在得到特征 $\small{A}$ 的信息后,数据集 $\small{D}$ 的不确定性减少的程度。换句话说,信息增益是一种描述数据集确定性增加的量,特征的信息增益越大,特征的分类能力就越强,在给定该特征后数据集的确定性就越大。信息增益可以通过下面的数学公式直观的描述:
$$
g(D, A) = E(D) - E(D|A)
g(D, A) = E(D) - E(D \vert A)
$$
计算信息熵和信息增益的函数如下所示:
@ -104,7 +104,7 @@ $$
R(D, A) = \frac{g(D, A)}{E_{A}(D)}
$$
其中, $\small{E_{A}(D) = -\sum_{i=1}^{n}{\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|}}}$ $\small{n}$ 表示特征 $\small{A}$ 的取值个数,简单的说 $\small{E_{A}(D)}$ 就是特征 $\small{A}$ 的信息熵,而信息增益比就是特征 $\small{A}$ 的信息增益和特征 $\small{A}$ 的信息熵的比值。我们用下面的函数来计算信息增益比,调用该函数可以输出四个特征对应的信息增益比。
其中, $\small{E_{A}(D) = -\sum_{i=1}^{n}{\frac{\lvert D_{i} \rvert}{\lvert D \rvert}log_{2}\frac{\lvert D_{i} \rvert}{\lvert D \rvert}}}$ $\small{n}$ 表示特征 $\small{A}$ 的取值个数,简单的说 $\small{E_{A}(D)}$ 就是特征 $\small{A}$ 的信息熵,而信息增益比就是特征 $\small{A}$ 的信息增益和特征 $\small{A}$ 的信息熵的比值。我们用下面的函数来计算信息增益比,调用该函数可以输出四个特征对应的信息增益比。
```python
def info_gain_ratio(x, y):
@ -163,7 +163,7 @@ $$
可以看出,随着数据集纯度越来越高,基尼指数的值越来越小。如果数据集 $\small{D}$ 根据特征 $\small{A}$ 划分为 $\small{k}$ 个部分,那么在给定特征 $\small{A}$ 的前提条件下,数据集的基尼指数可以定义为:
$$
G(D, A) = \sum_{i=1}^{k}\frac{|D_{i}|}{|D|}G(D_{i})
G(D, A) = \sum_{i=1}^{k}\frac{\lvert D_{i} \rvert}{\lvert D \rvert}G(D_{i})
$$
根据上面的公式,我们可以设计出如下所示的计算基尼指数的函数,大家可以对照上面的公式看看是否能够理解下面的代码,或者通过调用下面的函数看看鸢尾花数据集的哪个特征可以对原始数据集或者训练集做出最好的划分。经典决策树算法中的 CART 算法就是基于基尼指数进行特征选择的。

View File

@ -7,19 +7,19 @@
贝叶斯定理是概率论中的一个重要定理,它描述了如何从主观经验或已知事实出发,通过收集到的样本数据(证据)来更新对事件发生概率的认知(信念)。贝叶斯定理的数学表达式为:
$$
P(A|B) = \frac{P(B|A)}{P(B)} \cdot P(A)
P(A \vert B) = \frac{P(B \vert A)}{P(B)} \cdot P(A)
$$
其中, $\small{P(A)}$ 是事件 $\small{A}$ 发生的**先验概率**,我们可以理解为已知事实或主观经验(**主观概率** $\small{P(B|A)}$ 是在事件 $\small{A}$ 发生的条件下事件 $\small{B}$ 发生的 条件概率,通常也称之为**似然性**likelihood $\small{P(B)}$ 是事件 $\small{B}$ 发生的(全)概率,这两个概率可以通过我们收集到的样本数据(证据)获得; $\small{P(A|B)}$ 是在事件 $\small{B}$ 发生的条件下事件 $\small{A}$ 发生的条件概率,即收集到样本数据后对事件 $\small{A}$ 发生概率的重新认知,称之为**后验概率**。贝叶斯定理告诉我们一个重要的事实:可以从已知的事实或主观经验出发,通过收集到的证据来更新我们对某个事件发生概率的认知,简单的说就是**可以通过已知的事实和收集的证据来推断出未知的真相**。
其中, $\small{P(A)}$ 是事件 $\small{A}$ 发生的**先验概率**,我们可以理解为已知事实或主观经验(**主观概率** $\small{P(B \vert A)}$ 是在事件 $\small{A}$ 发生的条件下事件 $\small{B}$ 发生的 条件概率,通常也称之为**似然性**likelihood $\small{P(B)}$ 是事件 $\small{B}$ 发生的(全)概率,这两个概率可以通过我们收集到的样本数据(证据)获得; $\small{P(A \vert B)}$ 是在事件 $\small{B}$ 发生的条件下事件 $\small{A}$ 发生的条件概率,即收集到样本数据后对事件 $\small{A}$ 发生概率的重新认知,称之为**后验概率**。贝叶斯定理告诉我们一个重要的事实:可以从已知的事实或主观经验出发,通过收集到的证据来更新我们对某个事件发生概率的认知,简单的说就是**可以通过已知的事实和收集的证据来推断出未知的真相**。
回到上面李女士购买飞机延误险的例子假设本次航班是从成都双流国际机场飞往北京首都国际机场执飞的航空公司是四川航空起飞地天气为雨天小雨温度为8°C东北风2级降落地天气为晴天温度4°C西北风2级。为了更简单的让大家理解贝叶斯定理我们对这里的条件稍作简化只保留天气中的降水信息暂不考虑温度和风速等其他因素对应到上面的贝叶斯定理有
$$
P(延误|起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航) = \\
\frac{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航|延误)}{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航)} \cdot P(延误)
P(延误 \vert 起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航) = \\
\frac{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航 \vert 延误)}{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航)} \cdot P(延误)
$$
上面公式等号左边就是李女士想知道的当前航班延误的概率,等号右边的部分其实就是历史数据和当前信息,计算这个概率的关键在于计算出似然性,即 $\small{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航|延误)}$ 到底是多少,那么这个条件概率又该如何计算呢?
上面公式等号左边就是李女士想知道的当前航班延误的概率,等号右边的部分其实就是历史数据和当前信息,计算这个概率的关键在于计算出似然性,即 $\small{P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航 \vert 延误)}$ 到底是多少,那么这个条件概率又该如何计算呢?
### 朴素贝叶斯
@ -28,14 +28,14 @@ $$
假设我们有一个特征集合 $\small{X = \{x_1, x_2, \ldots, x_n\}}$ 和一个类别 $\small{C}$ ,朴素贝叶斯算法假设:
$$
P(X|C) = P(x_1|C) \cdot P(x_2|C) \cdot \ldots \cdot P(x_n|C)
P(X \vert C) = P(x_1 \vert C) \cdot P(x_2 \vert C) \cdot \ldots \cdot P(x_n \vert C)
$$
这个假设大大简化了计算复杂性,使得我们可以只计算每个特征在给定类别下的概率,而不需要考虑特征之间的相互作用,对应到上面购买飞机延误险的例子,我们可以用下面的方式来计算似然性:
$$
P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航|延误) = \\
P(起飞机场=双流|延误) \times P(到达机场=首都|延误) \times P(起飞天气=小雨|延误) \times P(降落天气=晴天|延误) \times P(执飞航司=川航|延误)
P(起飞机场=双流,到达机场=首都,起飞天气=小雨,降落天气=晴天,执飞航司=川航 \vert 延误) = \\
P(起飞机场=双流 \vert 延误) \times P(到达机场=首都 \vert 延误) \times P(起飞天气=小雨 \vert 延误) \times P(降落天气=晴天 \vert 延误) \times P(执飞航司=川航 \vert 延误)
$$
### 算法原理
@ -55,7 +55,7 @@ $$
2. **计算条件概率**
$$
P(x_{j}|C_{i}) = \frac{n_{i,j}}{n_{i}}
P(x_{j} \vert C_{i}) = \frac{n_{i,j}}{n_{i}}
$$
其中, $\small{n_{i,j}}$ 是在类别 $\small{C_{i}}$ 中,特征 $\small{x_{j}}$ 出现的次数。
@ -65,13 +65,13 @@ $$
在预测阶段,给定一个待分类样本 $\small{X}$ ,朴素贝叶斯算法通过以下步骤来计算其属于每个类别的后验概率:
$$
P(C_{i}|X) = \frac{P(X|C_{i})}{P(X)} \cdot P(C_{i})
P(C_{i} \vert X) = \frac{P(X \vert C_{i})}{P(X)} \cdot P(C_{i})
$$
上面的公式中, $\small{P(X)}$ 对应到每个类别都是一个常量,可以忽略掉它,再结合独立性假设有:
$$
P(C_{i}|X) \propto P(C_{i}) \cdot P(x_1|C_{i}) \cdot P(x_2|C_{i}) \cdot \ldots \cdot P(x_n|C_{i})
P(C_{i} \vert X) \propto P(C_{i}) \cdot P(x_1 \vert C_{i}) \cdot P(x_2 \vert C_{i}) \cdot \ldots \cdot P(x_n \vert C_{i})
$$
这样,我们可以选择具有最高后验概率的类别作为预测结果。

View File

@ -33,13 +33,13 @@ $$
首先随机选择 $\small{K}$ 个点作为初始质心 $\small{\mu_{1}, \mu_{2}, \cdots, \mu_{K}}$ ,对于每个数据点 $\small{x_{j}}$ ,计算到每个质心的距离,选择距离最近的质心,即:
$$
C_{i} = \lbrace {x_{j} \ | \ {\lVert x_{j} - \mu_{i} \rVert}^{2} \le {\lVert x_{j} - \mu_{k} \rVert}^{2} \ \text{for all} \ k \ne i} \rbrace
C_{i} = \lbrace {x_{j} \ \vert \ {\lVert x_{j} - \mu_{i} \rVert}^{2} \le {\lVert x_{j} - \mu_{k} \rVert}^{2} \ \text{for all} \ k \ne i} \rbrace
$$
更新质心为簇中所有点的均值,即:
$$
\mu_{i} = \frac{1}{|C_{i}|}\sum_{x \in C_{i}} x
\mu_{i} = \frac{1}{\lvert C_{i} \rvert}\sum_{x \in C_{i}} x
$$
重复上面两个动作,直到质心不再变化或变化小于某个阈值,这就确保了算法的收敛性。

View File

@ -27,43 +27,56 @@ AdaBoostAdaptive Boosting由 Yoav Freund 和 Robert Schapire 于 1996 年
AdaBoost 算法的训练过程是逐步迭代的,关键步骤如下:
1. **初始化样本权重**:给每个训练样本分配一个相等的初始权重。对于 $\small{N}$ 个样本,初始权重为:
$$
w_{i}^{(1)} = \frac{1}{N}, \ i = 1, 2, \cdots, N
$$
这里,$\small{w_{i}^{(1)}}$ 表示第 $\small{i}$ 个样本的权重,初始时权重相等。
$$
w_{i}^{(1)} = \frac{1}{N}, \ i = 1, 2, \cdots, N
$$
这里,$\small{w_{i}^{(1)}}$ 表示第 $\small{i}$ 个样本的权重,初始时权重相等。
2. **训练弱学习器**在每一轮迭代中AdaBoost 会根据当前样本的权重训练一个弱分类器(例如决策树桩,即深度为 1 的决策树)。弱分类器的目标是最小化加权误差。对于第 $\small{t}$ 轮训练得到的分类器模型(弱学习器) $\small{h_t}$,计算其加权误差:
$$
\varepsilon_{t} = \sum_{i=1}^{N} w_{i}^{(t)} \cdot I(y_{i} \neq h_{t}(x_{i}))
$$
其中, $\small{y_{i}}$ 是第 $\small{i}$ 个样本的真实标签,$\small{h_{t}(x_{i})}$ 是第 $\small{t}$ 轮模型 $\small{h_{t}}$ 对第 $\small{i}$ 个样本 $\small{x_{i}}$ 给出的预测结果(取值为 1 或 -1$\small{I(y_{i} \neq h_{t}(x_{i}))}$ 是指示函数,当样本 $\small{x_{i}}$ 被错误分类时函数取值为 1否则函数取值为 0。
$$
\varepsilon_{t} = \sum_{i=1}^{N} w_{i}^{(t)} \cdot I(y_{i} \neq h_{t}(x_{i}))
$$
其中, $\small{y_{i}}$ 是第 $\small{i}$ 个样本的真实标签,$\small{h_{t}(x_{i})}$ 是第 $\small{t}$ 轮模型 $\small{h_{t}}$ 对第 $\small{i}$ 个样本 $\small{x_{i}}$ 给出的预测结果(取值为 1 或 -1$\small{I(y_{i} \neq h_{t}(x_{i}))}$ 是指示函数,当样本 $\small{x_{i}}$ 被错误分类时函数取值为 1否则函数取值为 0。
3. **更新分类器权重**:计算第 $\small{t}$ 轮分类器模型的权重 $\small{\alpha_{t}}$,并用它来更新每个样本的权重。分类器权重 $\small{\alpha_{t}}$ 的计算公式为:
$$
\alpha_{t} = \frac{1}{2} ln \left( \frac{1 - \varepsilon_{t}}{\varepsilon_{t}} \right)
$$
当分类器的误差较低时,$\small{\alpha_{t}}$ 的值较大,说明该分类器的权重较大。
$$
\alpha_{t} = \frac{1}{2} ln \left( \frac{1 - \varepsilon_{t}}{\varepsilon_{t}} \right)
$$
当分类器的误差较低时,$\small{\alpha_{t}}$ 的值较大,说明该分类器的权重较大。
4. **更新样本权重**:根据当前分类器的表现,更新样本的权重。误分类样本的权重会增加,正确分类样本的权重会减少。样本权重的更新公式为:
$$
w_{i}^{(t + 1)} = w_{i}^{(t)} \cdot e^{-\alpha_{t} y_{i} h_{t}(x_{i})}
$$
$$
w_{i}^{(t + 1)} = w_{i}^{(t)} \cdot e^{-\alpha_{t} y_{i} h_{t}(x_{i})}
$$
5. **归一化权重**:对所有样本的权重进行归一化,使得所有样本的权重和为 1。
6. **最终分类器**AdaBoost 的最终分类器是所有弱学习器的加权组合,预测时通过加权投票来决定最终类别:
$$
H(x) = \text{sign} \left( \sum_{t=1}^{T} \alpha_{t} h_{t}(x) \right)
$$
其中,$\small{\text{sign}}$ 是符号函数,其定义如下所示:
$$
\text{sign}(z) = \begin{cases} +1 \ (z \ge 0) \\ -1 \ (z \lt 0) \end{cases}
$$
例如,有 3 个弱学习器 $\small{h_{1}(x)}$、$\small{h_{2}(x)}$、$\small{h_{3}(x)}$,它们的输出分别是`+1`、`-1`和`+1`,对应的权重是 $\small{\alpha_{1} = 0.5}$、$\small{\alpha_{2} = 0.3}$、$\small{\alpha_{3} = 0.2}$,那么加权和为:
$$
\sum_{t=1}^{3} \alpha_{t} h_{t}(x) = 0.5 \times 1 + 0.3 \times -1 + 0.2 \times 1 = 0.4
$$
由于加权和`0.4`为正,符号函数会输出`+1`,表示最终预测类别为正类。
$$
H(x) = \text{sign} \left( \sum_{t=1}^{T} \alpha_{t} h_{t}(x) \right)
$$
其中,$\small{\text{sign}}$ 是符号函数,其定义如下所示:
$$
\text{sign}(z) = \begin{cases} +1 \ (z \ge 0) \\ -1 \ (z \lt 0) \end{cases}
$$
例如,有 3 个弱学习器 $\small{h_{1}(x)}$、$\small{h_{2}(x)}$、$\small{h_{3}(x)}$,它们的输出分别是`+1`、`-1`和`+1`,对应的权重是 $\small{\alpha_{1} = 0.5}$、$\small{\alpha_{2} = 0.3}$、$\small{\alpha_{3} = 0.2}$,那么加权和为:
$$
\sum_{t=1}^{3} \alpha_{t} h_{t}(x) = 0.5 \times 1 + 0.3 \times -1 + 0.2 \times 1 = 0.4
$$
由于加权和`0.4`为正,符号函数会输出`+1`,表示最终预测类别为正类。
我们还是以鸢尾花数据集为例,应用 AdaBoost 集成学习算法来构建分类模型,完整的代码如下所示。
@ -124,37 +137,47 @@ GBDTGradient Boosting Decision Trees也是一种强大的集成学习算
GBDT 使用梯度下降的方式来最小化损失函数。对于回归任务损失函数通常是均方误差MSE对于分类任务常用的损失函数是对数损失Log Loss。下面我们以二分类任务为例为大家讲解算法的原理。
1. 损失函数。在分类任务中,通常使用对数似然损失函数,对于二分类问题,损失函数如下所示:
$$
L(y, F(x)) = -y\log(p(x)) - (1 - y)\log(1 - p(x))
$$
其中,$\small{y}$ 是实际标签($\small{y \in \lbrace 0, 1 \rbrace}$,表示类别 0 或 1$\small{p(x)}$ 是模型预测的样本 $\small{x}$ 属于类别 1 的概率。由于 GBDT 是基于梯度提升算法的,因此在每一轮的更新中,我们将通过梯度下降法来优化这个损失函数。
2. 梯度计算。为了使用梯度提升,我们需要计算损失函数关于当前模型预测的梯度。令当前模型的输出为 $\small{F(x)}$,即预测函数。根据对数损失函数,$\small{p(x)}$ 是通过模型输出 $\small{F(x)}$ 转换得到的概率,通常使用 Sigmoid 函数,有:
$$
p(x) = \frac{1}{1 + e^{-F(x)}}
$$
计算损失函数对 $\small{F(x)}$ 的梯度时,我们得到:
$$
\frac{\partial{L(y, F(x))}}{\partial{F(x)}} = p(x) - y
$$
即梯度为 $\small{p(x) - y}$,这个值告诉我们当前模型的预测 $\small{F(x)}$ 与真实标签 $\small{y}$ 之间的差距。
$$
L(y, F(x)) = -y\log(p(x)) - (1 - y)\log(1 - p(x))
$$
其中, $\small{y}$ 是实际标签( $\small{y \in \lbrace 0, 1 \rbrace}$ ,表示类别 0 或 1 $\small{p(x)}$ 是模型预测的样本 $\small{x}$ 属于类别 1 的概率。由于 GBDT 是基于梯度提升算法的,因此在每一轮的更新中,我们将通过梯度下降法来优化这个损失函数。
2. 梯度计算。为了使用梯度提升,我们需要计算损失函数关于当前模型预测的梯度。令当前模型的输出为 $\small{F(x)}$,即预测函数。根据对数损失函数, $\small{p(x)}$ 是通过模型输出 $\small{F(x)}$ 转换得到的概率,通常使用 Sigmoid 函数,有:
$$
p(x) = \frac{1}{1 + e^{-F(x)}}
$$
计算损失函数对 $\small{F(x)}$ 的梯度时,我们得到:
$$
\frac{\partial{L(y, F(x))}}{\partial{F(x)}} = p(x) - y
$$
即梯度为 $\small{p(x) - y}$ ,这个值告诉我们当前模型的预测 $\small{F(x)}$ 与真实标签 $\small{y}$ 之间的差距。
3. 模型更新。每一轮的更新都包括两步:
- 计算残差:在每一轮迭代中,我们计算当前模型的残差,即 $\small{\delta_i = p(x_i) - y_i}$,表示每个样本的误差。
- 拟合残差:使用新的基学习器(通常是决策树)来拟合这些残差。在分类任务中,我们训练的决策树并不是拟合真实标签,而是拟合残差,即拟合当前模型的预测误差。
更新规则为:
$$
F_{m + 1}(x) = F_{m}(x) + \eta h_{m}(x)
$$
其中,$\small{F_{m}(x)}$ 是第 $\small{m}$ 轮模型的输出;$\small{h_{m}(x)}$ 是第 $\small{m}$ 轮训练出的弱学习器(通常是决策树),它预测当前模型的残差;$\small{\eta}$ 是学习率,控制每棵树的贡献大小。通过这样逐步拟合残差,最终生成的模型 $\small{F(x)}$ 就是一个由多棵决策树组成的强学习器。
更新规则为:
$$
F_{m + 1}(x) = F_{m}(x) + \eta h_{m}(x)
$$
其中, $\small{F_{m}(x)}$ 是第 $\small{m}$ 轮模型的输出; $\small{h_{m}(x)}$ 是第 $\small{m}$ 轮训练出的弱学习器(通常是决策树),它预测当前模型的残差; $\small{\eta}$ 是学习率,控制每棵树的贡献大小。通过这样逐步拟合残差,最终生成的模型 $\small{F(x)}$ 就是一个由多棵决策树组成的强学习器。
对于多分类任务,我们需要将损失函数和梯度计算做相应的扩展。常用的多分类损失函数是多项式对数损失,对于每个类别 $\small{k}$ ,损失函数可以表示为:
对于多分类任务,我们需要将损失函数和梯度计算做相应的扩展。常用的多分类损失函数是多项式对数损失,对于每个类别 $\small{k}$,损失函数可以表示为:
$$
L(y, F(x)) = -\sum_{k=1}^{K} y_{k} \log(p_{k}(x))
$$
其中,$\small{K}$ 是类别总数,$\small{y_{k}}$ 是目标类别 $\small{k}$ 的指示函数,$\small{p_k(x)}$ 是样本 $\small{x}$ 属于类别 $\small{k}$ 的预测概率。
其中, $\small{K}$ 是类别总数, $\small{y_{k}}$ 是目标类别 $\small{k}$ 的指示函数, $\small{p_k(x)}$ 是样本 $\small{x}$ 属于类别 $\small{k}$ 的预测概率。
我们还是以鸢尾花数据集为例,应用 AdaBoost 集成学习算法来构建分类模型,完整的代码如下所示。