线性模型的基本形式
线性模型是一种简单而广泛使用的机器学习模型。线性模型的基本形式是:对输入特征向量x的各个维度进行线性组合,通常还会加上一个常数偏移项,也被称为截距项。一般可以表示为:
f ( x ) = w T x + b f(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + b f(x)=wTx+b
其中,w是权重向量,b是偏置项,x是输入特征向量。
线性回归
线性回归是线性模型中的一种,它的目标是找到最佳的线性组合,使得模型的预测值和真实值的均方误差最小。其公式形式与上面的基本线性模型一样,不过线性回归通常用于处理连续值的预测问题,比如房价预测、股票价格预测等。
线性回归的学习算法主要有最小二乘法、梯度下降法等。其中,最小二乘法可以直接得到解析解,但是当特征数量较大时,计算量比较大。而梯度下降法虽然需要多次迭代,但每次迭代的计算量较小,适合处理大规模数据。
这里提到了一些概念名词:
均方误差:
均方误差(Mean Squared Error,MSE)是一种常用的预测模型性能度量方式,用于评估模型预测结果的误差大小。均方误差是指预测值与真实值差值的平方的平均值,它反映了预测误差的大小。书本上的说它的几何定义对应的是欧几里得的"欧氏距离",也就是预测值与目标值的"欧式距离"(误差),公式为:
MSE
=
1
n
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
\text{MSE} = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2
MSE=n1i=1∑n(yi−y^i)2
对数几率回归
对数几率回归虽然名字中有“回归”,但它实际上是一种分类算法,常用于二分类问题。对数几率回归的思想是将线性模型的输出通过一个逻辑函数(sigmoid函数)转化到(0,1)之间,表示为正类的概率。
对数几率回归表示的公式是:
p
(
y
=
1
∣
x
)
=
1
1
+
e
−
(
w
T
x
+
b
)
p(y=1|\mathbf{x}) = \frac{1}{1 + e^{-(\mathbf{w}^T \mathbf{x} + b)}}
p(y=1∣x)=1+e−(wTx+b)1
其中x是输入的特征向量,w是权重向量,b是偏执项,通过这个公式,我们可以通过这个公式将任何线性回归预测的值映射到(0,1)之间,使它可以解释为概率。我们把w^Tx+b设为Z,就有了下面的概率分布函数
也可以这么理解:对数几率回归就是将线性回归映射到对数上去,如下图
线性判别分析LDA
线性判别分析的主要目标是将数据从原始的高维空间转换到一个较低的维度,同时尽可能地保持类别间的区别性。这是通过找到一个线性组合的方法完成的,这个线性组合可以最大化类间的距离并最小化类内的距离。
具体来说,LDA进行了如下操作:
- 计算每一类数据的平均值。
- 计算每一类数据与其平均值之间的差异,以及不同类别的平均值之间的差异。
- 寻找一个线性组合,它可以最大化类间差异(即使不同类别的数据尽可能远离彼此),同时最小化类内差异(即使同一类别的数据尽可能接近彼此)。
LDA的目标函数可以定义为:
J
(
w
)
=
w
T
S
B
w
w
T
S
W
w
J(w) = \frac{w^T S_B w}{w^T S_W w}
J(w)=wTSWwwTSBw
其中,
w
w
w 是我们要找的投影方向,
S
B
S_B
SB 和
S
W
S_W
SW 分别为类间散度矩阵和类内散度矩阵。
S
B
S_B
SB 对应类间散度,它表示不同类别的数据之间的距离。
S
B
S_B
SB 越大,说明类别之间的差异越大。
S
W
S_W
SW 对应类内散度,它表示同一类别的数据之间的距离。
S
W
S_W
SW 越小,说明同一类别内的数据越接近。
它们被定义为:
S
B
=
∑
k
(
m
k
−
m
)
(
m
k
−
m
)
T
S_B = \sum_k (m_k - m)(m_k - m)^T
SB=k∑(mk−m)(mk−m)T
S
W
=
∑
k
∑
x
∈
X
k
(
x
−
m
k
)
(
x
−
m
k
)
T
S_W = \sum_k \sum_{x \in X_k} (x - m_k)(x - m_k)^T
SW=k∑x∈Xk∑(x−mk)(x−mk)T
其中,
m
k
m_k
mk 是第
k
k
k 类数据的均值,
m
m
m 是所有数据的总均值,
X
k
X_k
Xk 表示第
k
k
k 类的所有数据。
在这个目标函数中,我们希望找到一个投影方向 w w w ,使得 J ( w ) J(w) J(w) 最大。也就是说,我们希望找到一个方向,使得投影后的数据,类别之间的差异(类间散度)最大,同一类别内的数据之间的差异(类内散度)最小。这样的方向更有利于我们对投影后的数据进行分类。
所以,这个目标函数的实际意义是寻找一个最优的投影方向,使得投影后的数据有最好的分类效果。
想要找到最优投影方向,找到J(w)最大的w,可以通过求解以下优化问题:
max
w
w
T
S
B
w
w
T
S
W
w
\max_w \frac{w^T S_B w}{w^T S_W w}
wmaxwTSWwwTSBw
该问题可以通过拉格朗日乘数法和求导得到解析解。设置拉格朗日函数
L
(
w
,
λ
)
=
w
T
S
B
w
−
λ
(
w
T
S
W
w
−
1
)
L(w, \lambda) = w^T S_B w - \lambda(w^T S_W w - 1)
L(w,λ)=wTSBw−λ(wTSWw−1),求其关于w的导数并令其为0,得到:
S
W
−
1
S
B
w
=
λ
w
S_W^{-1} S_B w = \lambda w
SW−1SBw=λw
这是一个广义特征值问题,其解即为 S W − 1 S B S_W^{-1} S_B SW−1SB 的最大的 d d d 个特征值对应的特征向量, d d d 为类别数减一。
一个例子
假设我们有一个二维的数据集,包含两个类别(类别A和类别B),并且我们想将这个二维的数据降到一维。
我们先给出一些虚拟的数据:
类别A: [ [2, 2], [2, 3], [3, 2], [3, 3] ]
类别B: [ [8, 8], [8, 9], [9, 8], [9, 9] ]
在这个例子中,我们的目标是找到一个投影方向,使得投影后的数据类间距离最大化,类内距离最小化。
首先,我们需要计算每一类数据的平均值,例如对于类别A,平均值 m_A = [(2+2+3+3)/4, (2+3+2+3)/4] = [2.5, 2.5],类别B同理可以计算出其平均值 m_B = [8.5, 8.5]。
m
A
=
1
n
A
∑
x
∈
X
A
x
=
[
1
4
(
2
+
2
+
3
+
3
)
,
1
4
(
2
+
3
+
2
+
3
)
]
=
[
2.5
,
2.5
]
m_A = \frac{1}{n_A} \sum_{x \in X_A} x = \left[ \frac{1}{4}(2+2+3+3), \frac{1}{4}(2+3+2+3) \right] = [2.5, 2.5]
mA=nA1x∈XA∑x=[41(2+2+3+3),41(2+3+2+3)]=[2.5,2.5]
m
B
=
1
n
B
∑
x
∈
X
B
x
=
[
1
4
(
8
+
8
+
9
+
9
)
,
1
4
(
8
+
9
+
8
+
9
)
]
=
[
8.5
,
8.5
]
m_B = \frac{1}{n_B} \sum_{x \in X_B} x = \left[ \frac{1}{4}(8+8+9+9), \frac{1}{4}(8+9+8+9) \right] = [8.5, 8.5]
mB=nB1x∈XB∑x=[41(8+8+9+9),41(8+9+8+9)]=[8.5,8.5]
然后,我们可以计算总的平均值 m = (m_A + m_B) / 2 = [5.5, 5.5]。
m
=
1
n
∑
x
∈
X
x
=
1
2
(
m
A
+
m
B
)
=
[
5.5
,
5.5
]
m = \frac{1}{n} \sum_{x \in X} x = \frac{1}{2} (m_A + m_B) = [5.5, 5.5]
m=n1x∈X∑x=21(mA+mB)=[5.5,5.5]
接着,计算类内散度矩阵 S W S_W SW 和类间散度矩阵 S B S_B SB:
首先我们需要计算类别 A 的内部散度矩阵 S W A S_{WA} SWA 和类别 B 的内部散度矩阵 S W B S_{WB} SWB。然后我们可以计算类间散度矩阵 S W S_{W} SW 和类内散度矩阵 S B S_{B} SB。
对于类别 A:
假设每一个样本点在向量空间中的位置为
x
i
=
[
x
i
1
,
x
i
2
]
x_i = [x_{i1}, x_{i2}]
xi=[xi1,xi2],类别 A 的均值向量为
m
A
=
[
2.5
,
2.5
]
m_A = [2.5, 2.5]
mA=[2.5,2.5],我们可以计算
S
W
A
S_{WA}
SWA 如下:
S
W
A
=
∑
i
=
1
n
A
(
x
i
−
m
A
)
(
x
i
−
m
A
)
T
S_{WA} = \sum_{i=1}^{n_A} (x_i - m_A)(x_i - m_A)^T
SWA=i=1∑nA(xi−mA)(xi−mA)T
对于类别 B:
类别 B 的均值向量为
m
B
=
[
8.5
,
8.5
]
m_B = [8.5, 8.5]
mB=[8.5,8.5],我们可以计算
S
W
B
S_{WB}
SWB 如下:
S W B = ∑ i = 1 n B ( x i − m B ) ( x i − m B ) T S_{WB} = \sum_{i=1}^{n_B} (x_i - m_B)(x_i - m_B)^T SWB=i=1∑nB(xi−mB)(xi−mB)T
计算总的类内散度矩阵
S
W
S_W
SW:
S
W
=
S
W
A
+
S
W
B
S_{W} = S_{WA} + S_{WB}
SW=SWA+SWB
计算类间散度矩阵
S
B
S_B
SB的过程为:
对于类别A,其类间散度矩阵
S
B
A
S_{BA}
SBA 可以计算为:
S
B
A
=
n
A
⋅
(
m
A
−
m
)
⋅
(
m
A
−
m
)
T
S_{BA} = n_A \cdot (m_A - m) \cdot (m_A - m)^T
SBA=nA⋅(mA−m)⋅(mA−m)T
这里,
n
A
n_A
nA 是类别 A 的样本数量,
m
A
m_A
mA 是类别 A 的均值向量也就是[2.5,2.5],
m
m
m 是总的均值向量也就是[5.5,5.5]。把具体的数值带入进去得到:
S
B
A
=
4
⋅
(
[
2.5
,
2.5
]
−
[
5.5
,
5.5
]
)
⋅
(
[
2.5
,
2.5
]
−
[
5.5
,
5.5
]
)
T
S_{BA} = 4 \cdot ([2.5, 2.5] - [5.5, 5.5]) \cdot ([2.5, 2.5] - [5.5, 5.5])^T
SBA=4⋅([2.5,2.5]−[5.5,5.5])⋅([2.5,2.5]−[5.5,5.5])T
同样,对于类别B,其类间散度矩阵
S
B
B
S_{BB}
SBB 可以计算为:
S
B
B
=
n
B
⋅
(
m
B
−
m
)
⋅
(
m
B
−
m
)
T
S_{BB} = n_B \cdot (m_B - m) \cdot (m_B - m)^T
SBB=nB⋅(mB−m)⋅(mB−m)T
这里,
n
B
n_B
nB 是类别 B 的样本数量,
m
B
m_B
mB 是类别 B 的均值向量,
m
m
m 是总的均值向量。把具体的数值带入进去得到:
S
B
B
=
4
⋅
(
[
8.5
,
8.5
]
−
[
5.5
,
5.5
]
)
⋅
(
[
8.5
,
8.5
]
−
[
5.5
,
5.5
]
)
T
S_{BB} = 4 \cdot ([8.5, 8.5] - [5.5, 5.5]) \cdot ([8.5, 8.5] - [5.5, 5.5])^T
SBB=4⋅([8.5,8.5]−[5.5,5.5])⋅([8.5,8.5]−[5.5,5.5])T
最后,总的类间散度矩阵
S
B
S_B
SB 可以通过两个类别的类间散度矩阵相加得到:
S
B
=
S
B
A
+
S
B
B
S_B = S_{BA} + S_{BB}
SB=SBA+SBB
现在我们构建一个拉格朗日函数 L ( w , λ ) = w T S B w − λ ( w T S W w − 1 ) L(w, \lambda) = w^T S_B w - \lambda(w^T S_W w - 1) L(w,λ)=wTSBw−λ(wTSWw−1),其中 λ \lambda λ是拉格朗日乘子。然后对 L ( w , λ ) L(w, \lambda) L(w,λ) 关于 w w w 求导,并令其为零,得到:
∂ L ∂ w = 2 S B w − 2 λ S W w = 0 \frac{\partial L}{\partial w} = 2S_B w - 2\lambda S_W w = 0 ∂w∂L=2SBw−2λSWw=0
整理得到广义特征值问题:
S W − 1 S B w = λ w S_W^{-1} S_B w = \lambda w SW−1SBw=λw
首先,我们需要计算
S
W
−
1
S
B
S_W^{-1}S_B
SW−1SB:
S
W
−
1
S
B
=
[
0.25
0
0
0.25
]
[
72
72
72
72
]
=
[
18
18
18
18
]
\begin{align*} S_W^{-1}S_B = \begin{bmatrix} 0.25 & 0 \\ 0 & 0.25 \end{bmatrix} \begin{bmatrix} 72 & 72 \\ 72 & 72 \end{bmatrix} = \begin{bmatrix} 18 & 18 \\ 18 & 18 \end{bmatrix} \end{align*}
SW−1SB=[0.25000.25][72727272]=[18181818]
接下来,我们需要找到满足 [ 18 18 18 18 ] w = λ w \begin{bmatrix} 18 & 18 \\ 18 & 18 \end{bmatrix} w = \lambda w [18181818]w=λw 的 λ \lambda λ 和 w w w。这是一个特征值和特征向量问题,它的解会是我们要找的投影方向。计算可得该矩阵的特征值为 λ = 0 , 36 \lambda = 0, 36 λ=0,36,对应的特征向量为 w 1 = [ 1 , − 1 ] T , w 2 = [ 1 , 1 ] T w_1 = [1, -1]^T, w_2 = [1, 1]^T w1=[1,−1]T,w2=[1,1]T。我们选择较大的特征值所对应的特征向量作为投影方向,即 w = [ 1 , 1 ] T w = [1, 1]^T w=[1,1]T。
多分类学习
多分类问题可以通过将其分解为一系列的二分类问题来解决,这是经典的处理多分类的策略,主要有两种方法:一对一(One-vs-One),一对其余(One-vs-Rest)和多对多(Many-vs-Many),其中一对一和一对其余可以理解为多对多的一类特例。 下面将一一讲解这几种常见方法
一对一(One-vs-One)
这种策略对于C个类别的数据集,会生成C(C-1)/2个分类器,每一个分类器是在一个类别和另一个类别之间做决策。对于新的输入样本,所有的分类器会进行预测,那个类别获得最多的"票数"就是最后的预测结果。
-
优点:每个分类器只需要在一个小的训练集上进行训练,这个训练集是原始训练集的一个子集,只包含两个类别的数据。
-
缺点:需要训练和存储C(C-1)/2个分类器,这在类别数量C非常大时是一个问题。同时,由于每个分类器仅仅在两个类别的数据上训练,可能会导致模型的偏差。
一对其余(One-vs-Rest)
这种策略对于C个类别的数据集,会生成C个分类器。对于每一个分类器,一个类别被选择为正类,剩下的所有类别被选择为一个负类。对于新的输入样本,所有的分类器会进行预测,得分最高的类别将被选择为最后的预测结果。
-
优点:需要训练和存储的分类器数量减少到C个。
-
缺点:每个分类器需要在整个训练集上进行训练,这个训练集包含了所有类别的数据。另外,由于负类包含了多个类别的数据,可能会导致数据的不平衡
看到这可能有人会有疑问,这个C个类别到底是什么呢?是C个样本?C个特征?
这里的C个类别指的是C类不同的样本,换言之,您有C个不同的标签或输出类别,每个样本都会被标记为这C个类别中的一个
- 就比如说在手写数字识别问题中,我们可能有10个类别(数字0到9),但我们可能有成千上万个样本(即手写数字图像),每个样本可能有上百个特征(例如,每个像素可以被视为一个特征)。
- 在一些文本分类问题中,我们可能有数十个类别(例如,新闻文章可以被分为“政治”,“体育”,“娱乐”等类别),但可能有数千个样本和数千个或更多的特征(例如,每个单词或短语都可以被视为一个特征)。
多对多(Many-vs-Many)
MvM是每次将若干个类作为正类,其余类作为反类,这里采用一种名为"纠错输出码(ECOC)"编码方法来实现这个逻辑。
ECOC
对于ECOC方法,每一个类别都会被分配一个唯一的二进制编码。这些编码组成了一个编码矩阵,每一行对应一个类别,每一列对应一个二分类问题。每个分类器负责解决一个二分类问题,根据编码决定哪些类别被划分为正类(通常编码为1),哪些被划分为负类(通常编码为0)。
ECOC划分的过程:
而ECOC的实现则可以采用编码矩阵来完成:
解决类别不平衡问题
类别不平衡问题是指在分类问题中,不同类别的样本数量差异很大的情况。例如,对于一个二分类问题,可能存在99%的样本属于类别A,只有1%的样本属于类别B。这会导致大多数分类器倾向于将样本预测为类别A,而忽视类别B,从而导致分类性能下降。
在书中,作者提到了可以使用再缩放的方式来解决这个问题。
再缩放是一种直观的处理类别不平衡问题的方法。具体来说,它通过修改分类决策函数的阈值或者改变类别的先验概率,来调整对不同类别的分类倾向。
阈值移动是再缩放的一种常见方法。在二分类问题中,我们通常设定阈值为0.5,即当某样本属于正类的概率大于0.5时,我们将其分类为正类。然而,对于类别不平衡的问题,这样的阈值可能会导致分类器过于倾向于多数类。通过移动阈值,例如设定阈值为0.1,我们可以使分类器更倾向于少数类,从而改善分类性能。
以上就是<<机器学习>>第三章这本书的总结内容