掌握基本的分类模型
使用sklearn构建完整的分类项目
- 收集数据集并选择合适的特征:
- 选择度量模型性能的指标:
度量分类模型的指标和回归的指标有很大的差异,首先是因为分类问题本身的因变量是离散变量,因此像定义回归的指标那样,单单衡量预测值和因变量的相似度可能行不通。其次,在分类任务中,我们对于每个类别犯错的代价不尽相同,例如:我们将癌症患者错误预测为无癌症和无癌症患者错误预测为癌症患者,在医院和个人的代价都是不同的,前者会使得患者无法得到及时的救治而耽搁了最佳治疗时间甚至付出生命的代价,而后者只需要在后续的治疗过程中继续取证就好了,因此我们很不希望出现前者,当我们发生了前者这样的错误的时候会认为建立的模型是很差的。为了解决这些问题,我们必须将各种情况分开讨论,然后给出评价指标。
- TP:true positive。预测是正确的正样本
- FP:false positive。预测是错误的正样本
- TN:true negative。预测是正确的负样本
- FP:false positive。预测是错误的负样本
列联表如下,1代表正类,0代表负类:
(1)真正类率(True Positive Rate , TPR)【灵敏度(sensitivity)】: TPR = TP /(TP + FN) ,即正样本预测结果数/正样本实际数
(2)假负类率(False Negative Rate , FNR) : FNR = FN /(TP + FN) ,即被预测为负的正样本结果数/正样本实际数
(3)假正类率(False Positive Rate , FPR) : FPR = FP /(FP + TN) ,即被预测为正的负样本结果数/负样本实际数
(4)真负类率(True Negative Rate , TNR)【特指度(specificity)】: TNR = TN /(TN + FP) ,即负样本预测结果数/负样本实际数
度量分类模型性能的指标:
- 准确率Accuracy:分类正确的样本数占总样本数的比例,即: A C C = T P + T N F P + F N + T P + T N ACC = \frac{TP+TN}{FP+FN+TP+TN} ACC=FP+FN+TP+TNTP+TN当样本出现不均衡时ACC不能合理反馈模型的预测能力,例如测试数据集有80%的正样本,20%的负样本,假设模型预测结果全为正样本,这时准确率为80%,然而模型对负样本没有识别能力,此时高准确率不能反映模型的预测能力。
- 精度Precision:预测为正确且分类正确的样本占预测值为正确的样本的比例,即: P R E = T P T P + F P PRE = \frac{TP}{TP+FP} PRE=TP+FPTP。
- 召回率Recall:预测为正确且分类正确的样本占实际类别为正确比例,即: R E C = T P T P + F N REC = \frac{TP}{TP+FN} REC=TP+FNTP。
- F1-score:一般来说,Precision高时,Recall值往往偏低;而Precision值低时,Recall值往往偏高。当分类置信度高时,Precision偏高;分类置信度低时,Recall偏高。为了能够综合考虑这两个指标,F-measure被提出(Precision和Recall的加权调和平均),即:
F
1
=
2
P
R
E
×
R
E
C
P
R
E
+
R
E
C
F1 = 2\frac{PRE\times REC}{PRE + REC}
F1=2PRE+RECPRE×REC
F1-score适用于二分类问题,对于多分类问题,将二分类的F1-score推广,有Micro-F1和Macro-F1两种度量。 - Micro-F1: 统计各个类别的TP、FP、FN、TN,加和构成新的TP、FP、FN、TN,然后计算Micro-Precision和Micro-Recall,得到Micro-F1。具体的说,统计出来各个类别的混淆矩阵,然后把混淆矩阵“相加”起来,得到一个多类别的混淆矩阵,然后再计算F1-score 。
- Macro-F1: 统计各个类别的TP、FP、FN、TN,分别计算各自的Precision和Recall,得到各自的F1值,然后取平均值得到Macro-F1。Macro-F1平等地看待各个类别,它的值会受到稀有类别的影响;而Micro-F1则更容易受到常见类别的影响。
- ROC曲线:以false positive rate(FPR)为横轴,true positive rate(TPR)为纵轴画出来的曲线,ROC曲线越接近左上角,该分类器的性能越好。通常用AUC指标(AUC指标为ROC曲线所覆盖的区域面积)来直观的评价分类器的好坏,值越大越好。
- 选择具体的模型并进行训练:
- 逻辑回归logistic regression:
回归问题和分类问题的本质区别在于回归问题的因变量是连续性变量,分类问题的因变量是离散型变量,一个很自然的想法是能否用线性回归去处理分类问题,答案是可以但不好!先来看看线性回归处理分类问题会出现什么弊端,我们仔细来看这个线性回归的例子, d e f a u l t = β 0 + β 1 B a l a n c e + β 2 I n c o m e {default = \beta_0 + \beta_1 Balance + \beta_2 Income} default=β0+β1Balance+β2Income,只要输入Balance 和 Income 以及default的数据就能用最小二乘法估计出 β 0 , β 1 {\beta_0,\beta_1} β0,β1,设定预测的default>0.5就是违约反之不违约,感觉很完美的样子,但事实真的是这样吗?假设我们需要用某个人的债务(Balance)和收入(Income)去预测是否会信用卡违约(default):-
我们假设有一个穷人Lisa,他的Balance和Income都很小,那么有可能会导致default的值为负数,那么这个负数代表什么意义呢?显然是没有任何意义的。
-
当分类问题由二分类变为多分类时,以0.5为界限划分分类就不可用了,那么我们应该怎么找到一个界限衡量多分类呢?
为了解决以上的问题,我们来想想能不能将线性回归的结果default转化为区间[0:1]上,让default转变成一个违约的概率呢?下面我们来解决这个问题吧。
在推导逻辑回归之前,我们先来认识下一组函数,这组函数具有神奇的作用,可以将是实数轴上的数转换为[0:1]区间上的概率。
首先,我们假设我们的线性回归模型为 Y = β 0 + β 1 X {Y=\beta_0+\beta_1 X} Y=β0+β1X,那么这个函数是如何将线性回归的结果转化为概率呢?这个函数就是logistic 函数,具体的形式为 p ( X ) = e β 0 + β 1 X 1 + e β 0 + β 1 X {p(X) = \dfrac{e^{\beta_0 + \beta_1X}}{1+e^{\beta_0 + \beta_1X}}} p(X)=1+eβ0+β1Xeβ0+β1X,他的函数图像如下图:(左边是线性回归,右边是逻辑函数)
-
因此,我们假设逻辑回归模型为:
p
(
y
=
1
∣
x
)
=
1
1
+
e
−
w
T
x
p(y = 1|x) = \frac{1}{1+e^{-w^Tx}}
p(y=1∣x)=1+e−wTx1 .
下面我们来具体推导下逻辑回归模型:
假设数据Data
{
(
x
i
,
y
i
)
}
,
i
=
1
,
2
,
.
.
.
,
N
,
x
i
∈
R
p
,
y
i
∈
{
0
,
1
}
\{(x_i,y_i) \},\;\;i = 1,2,...,N,\;\;x_i \in R^p,y_i \in \{0,1 \}
{(xi,yi)},i=1,2,...,N,xi∈Rp,yi∈{0,1},设
p
1
=
p
(
y
=
1
∣
x
)
=
σ
(
w
T
)
=
1
1
+
e
−
w
T
x
p_1 = p(y=1|x) = \sigma(w^T) = \frac{1}{1+e^{-w^Tx}}
p1=p(y=1∣x)=σ(wT)=1+e−wTx1。因为y只可能取0或者1,因此假设数据服从0-1分布,也叫伯努力分布,即:当y=1时,
p
(
y
∣
x
)
=
p
1
p(y|x)=p_1
p(y∣x)=p1,当y=0时,
p
(
y
∣
x
)
=
1
−
p
1
p(y|x)=1-p_1
p(y∣x)=1−p1,可以写成
p
(
y
∣
x
)
=
p
1
y
(
1
−
p
1
)
1
−
y
p(y|x) = p_1^y(1-p_1)^{1-y}
p(y∣x)=p1y(1−p1)1−y,可以带入y=0和y=1进去验证,结果和前面的结论一模一样。
我们使用极大似然估计MLE,即:
w
^
=
a
r
g
m
a
x
w
l
o
g
P
(
Y
∣
X
)
=
a
r
g
m
a
x
x
l
o
g
∏
i
=
1
N
P
(
y
i
∣
x
i
)
=
a
r
g
m
a
x
w
∑
i
=
1
N
l
o
g
P
(
y
i
∣
x
i
)
=
a
r
g
m
a
x
w
∑
i
=
1
N
(
y
i
l
o
g
p
1
+
(
1
−
y
i
)
l
o
g
(
1
−
p
1
)
)
记
:
L
(
w
)
=
∑
i
=
1
N
(
y
i
l
o
g
p
1
+
(
1
−
y
i
)
l
o
g
(
1
−
p
1
)
)
∂
L
∂
w
k
=
∑
i
=
1
N
y
i
1
p
1
∂
p
1
∂
z
∂
z
∂
w
k
+
(
1
−
y
i
)
1
1
−
p
1
(
−
∂
p
1
∂
z
∂
z
∂
w
k
)
=
∑
i
=
1
N
y
i
1
σ
(
z
)
(
σ
(
z
i
)
−
σ
(
z
i
)
2
)
x
i
+
(
1
−
y
i
)
1
1
−
σ
(
z
i
)
[
−
(
σ
(
z
i
)
−
σ
(
z
i
)
2
)
x
i
]
=
∑
i
=
1
N
[
(
y
i
−
y
i
σ
(
z
i
)
)
x
i
+
(
1
−
y
i
)
(
−
σ
(
z
i
)
)
x
i
]
=
∑
i
=
1
N
y
i
x
i
−
σ
(
z
i
)
x
i
=
∑
i
=
1
N
(
y
i
−
σ
(
z
i
)
)
x
i
\hat{w} = argmax_w\;\;log\;P(Y|X) = argmax_x\;\;log\;\prod_{i=1}^N P(y_i|x_i) = argmax_w \sum\limits_{i=1}^{N} log\;P(y_i|x_i)\\ \;\;\; = argmax_w \sum\limits_{i=1}^{N}(y_ilog\;p_1 + (1-y_i)log(1-p_1)) \\ 记:L(w) = \sum\limits_{i=1}^{N}(y_ilog\;p_1 + (1-y_i)log(1-p_1))\\ \;\;\; \frac{\partial L}{\partial w_k} = \sum\limits_{i=1}^{N} y_i\frac{1}{p_1}\frac{\partial p_1}{\partial z}\frac{\partial z}{\partial w_k} + (1-y_i)\frac{1}{1-p_1}(-\frac{\partial p_1}{\partial z}\frac{\partial z}{\partial w_k})\\ \;\;\;=\sum\limits_{i=1}^{N}y_i\frac{1}{\sigma(z)}(\sigma(z_i)-\sigma(z_i)^2)x_i + (1-y_i)\frac{1}{1-\sigma(z_i)}[-(\sigma(z_i)-\sigma(z_i)^2)x_i]\\ \;\;\; =\sum\limits_{i=1}^{N}[(y_i-y_i\sigma(z_i))x_i + (1-y_i)(-\sigma(z_i))x_i]\\ \;\;\; = \sum\limits_{i=1}^{N}y_ix_i-\sigma(z_i)x_i = \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i
w^=argmaxwlogP(Y∣X)=argmaxxlogi=1∏NP(yi∣xi)=argmaxwi=1∑NlogP(yi∣xi)=argmaxwi=1∑N(yilogp1+(1−yi)log(1−p1))记:L(w)=i=1∑N(yilogp1+(1−yi)log(1−p1))∂wk∂L=i=1∑Nyip11∂z∂p1∂wk∂z+(1−yi)1−p11(−∂z∂p1∂wk∂z)=i=1∑Nyiσ(z)1(σ(zi)−σ(zi)2)xi+(1−yi)1−σ(zi)1[−(σ(zi)−σ(zi)2)xi]=i=1∑N[(yi−yiσ(zi))xi+(1−yi)(−σ(zi))xi]=i=1∑Nyixi−σ(zi)xi=i=1∑N(yi−σ(zi))xi
因此,
∂
L
∂
w
k
=
∑
i
=
1
N
(
y
i
−
σ
(
z
i
)
)
x
i
\frac{\partial L}{\partial w_k} = \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i
∂wk∂L=i=1∑N(yi−σ(zi))xi,由于这里涉及的函数不像线性回归一样能简单求出解析解,因此我们使用迭代的优化算法:梯度下降法,即:
w
k
(
t
+
1
)
←
w
k
(
t
)
−
η
∑
i
=
1
N
(
y
i
−
σ
(
z
i
)
)
x
i
(
k
)
,
其
中
,
x
i
(
k
)
为
第
i
个
样
本
第
k
个
特
征
w_k^{(t+1)}\leftarrow w_k^{(t)} - \eta \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i^{(k)},\;\;\;其中,x_i^{(k)}为第i个样本第k个特征
wk(t+1)←wk(t)−ηi=1∑N(yi−σ(zi))xi(k),其中,xi(k)为第i个样本第k个特征
- 基于概率的分类模型:
(1) 线性判别分析: - 基于贝叶斯公式对线性判别分析的理解:
贝叶斯定理: P ( Y = k ∣ X = x ) = π k f k ( x ) ∑ l = 1 K π l f l ( x ) {P(Y=k|X=x) = \dfrac{{\pi}_kf_k(x)}{\sum\limits_{l=1}^K{\pi}_lf_l(x)}} P(Y=k∣X=x)=l=1∑Kπlfl(x)πkfk(x)
假设观测有
K
{K}
K类,
π
k
{\pi_k}
πk为随机选择的观测来自第
k
{k}
k类的 先验概率(在事情发生之前事情发生的概率,是根据以往经验和分析得到的概率),也就是样本里面第
k
{k}
k类的样本个数除以总样本的个数:
π
k
=
n
k
n
{\pi_k = \dfrac{n_k}{n}}
πk=nnk。再来
f
k
(
x
)
=
P
(
X
=
x
∣
Y
=
k
)
{f_k(x) =P(X=x|Y=k)}
fk(x)=P(X=x∣Y=k),表示第
k
{k}
k类观测的X的密度函数,说的直白一点就是在
Y
=
k
{Y=k}
Y=k的样本里
X
=
x
{X=x}
X=x的样本个数,即
f
k
(
x
)
=
P
(
X
=
x
∣
Y
=
k
)
=
n
(
X
=
x
,
Y
=
k
)
n
(
Y
=
k
)
{f_k(x) = P(X=x|Y=k) = \dfrac{n_{(X=x,Y=k)}}{n_{(Y=k)}}}
fk(x)=P(X=x∣Y=k)=n(Y=k)n(X=x,Y=k),最后,
∑
l
=
1
K
π
l
f
l
(
x
)
=
P
(
X
=
x
)
=
n
(
X
=
x
)
n
{\sum\limits_{l=1}^K{\pi}_lf_l(x)}=P(X=x)=\dfrac{n_{(X=x)}}{n}
l=1∑Kπlfl(x)=P(X=x)=nn(X=x),也就是样本中
X
=
x
{X=x}
X=x的概率。
公式
P
(
Y
=
k
∣
X
=
x
)
=
π
k
f
k
(
x
)
∑
l
=
1
K
π
l
f
l
(
x
)
{P(Y=k|X=x) = \dfrac{{\pi}_kf_k(x)}{\sum\limits_{l=1}^K{\pi}_lf_l(x)}}
P(Y=k∣X=x)=l=1∑Kπlfl(x)πkfk(x)给出了给定样本条件下,
Y
=
k
{Y=k}
Y=k这个类别下的概率
这给分类问题提供了一条思路,那就是计算这个
P
(
Y
=
k
∣
X
=
x
)
{P(Y=k|X=x)}
P(Y=k∣X=x),而且我们的逻辑回归就是这么干的,但是在
P
(
Y
=
k
∣
X
=
x
)
=
π
k
f
k
(
x
)
∑
l
=
1
K
π
l
f
l
(
x
)
{P(Y=k|X=x) = \dfrac{{\pi}_kf_k(x)}{\sum\limits_{l=1}^K{\pi}_lf_l(x)}}
P(Y=k∣X=x)=l=1∑Kπlfl(x)πkfk(x)这个公式中,分母
∑
l
=
1
K
π
l
f
l
(
x
)
=
P
(
X
=
x
)
{{\sum\limits_{l=1}^K{\pi}_lf_l(x)} = P(X=x)}
l=1∑Kπlfl(x)=P(X=x)当样本给定的时候是一个与分类
k
{k}
k无关的常数,所以我们的问题可以简化为只需要计算分子
π
k
f
k
(
x
)
{{\pi}_kf_k(x)}
πkfk(x),进而比较哪个类别的概率最大就知道属于哪个类别了,因此我们的分类思路就出来啦,这个思路不同于逻辑回归,逻辑回归需要计算具体的
P
(
Y
=
k
∣
X
=
x
)
{P(Y=k|X=x)}
P(Y=k∣X=x)概率值,而我们现在的思路是通过贝叶斯定理计算贝叶斯定理的分子,比较分子最大的那个类别为最终类别。
在我们推导复杂算法之前,我们先推导下简单的当自变量个数只有一个的模型,即
p
=
1
{p=1}
p=1的简单模型。我们记
P
(
Y
=
k
∣
X
=
x
)
=
π
k
f
k
(
x
)
∑
l
=
1
K
π
l
f
l
(
x
)
{P(Y=k|X=x) = \dfrac{{\pi}_kf_k(x)}{\sum\limits_{l=1}^K{\pi}_lf_l(x)}}
P(Y=k∣X=x)=l=1∑Kπlfl(x)πkfk(x) 的分子为
g
k
(
x
)
=
π
k
f
k
(
x
)
{g_k(x) = {\pi}_kf_k(x)}
gk(x)=πkfk(x)。在这里,我们做个模型假设:假设
f
k
(
x
)
{f_k(x) }
fk(x)服从正态分布,即
f
k
(
x
)
∼
N
(
μ
,
σ
k
2
)
{f_k(x) \sim N(\mu,\sigma_k^2)}
fk(x)∼N(μ,σk2),而且每个
σ
k
2
=
σ
2
{\sigma_k^2 = \sigma^2}
σk2=σ2,同方差假设。因此
f
k
(
x
)
=
1
2
π
σ
k
e
−
1
2
σ
2
(
x
−
μ
k
)
2
{f_k(x) = \dfrac{1}{\sqrt{2\pi}\sigma_k}e^{-\dfrac{1}{2\sigma^2}(x-\mu_k)^2}}
fk(x)=2πσk1e−2σ21(x−μk)2,最终我们的
g
k
(
x
)
=
π
k
1
2
π
σ
k
e
−
1
2
σ
2
(
x
−
μ
k
)
2
{g_k(x) = \pi_k\dfrac{1}{\sqrt{2\pi}\sigma_k}e^{-\dfrac{1}{2\sigma^2}(x-\mu_k)^2}}
gk(x)=πk2πσk1e−2σ21(x−μk)2,终于算出来啦。这个式子不是很好计算,我们对
g
k
(
x
)
{g_k(x)}
gk(x)取个对数,令
δ
k
(
x
)
=
l
n
(
g
k
(
x
)
)
=
l
n
π
k
+
μ
σ
2
x
−
μ
2
2
σ
2
{\delta_k(x) = ln(g_k(x))=ln\pi_k+\dfrac{\mu}{\sigma^2}x-\dfrac{\mu^2}{2\sigma^2}}
δk(x)=ln(gk(x))=lnπk+σ2μx−2σ2μ2,到这里我们的模型建立模型,我们只需要把位置的
μ
k
{\mu_k}
μk与
σ
2
{\sigma^2}
σ2估计出来就好了。
μ
^
k
=
1
n
k
∑
i
:
y
i
=
k
x
i
{\hat{\mu}_k =\dfrac{1}{n_k}\sum\limits_{i:y_i=k}x_i}
μ^k=nk1i:yi=k∑xi,也就是当
y
=
k
{y=k}
y=k这一类中
x
{x}
x的平均值;
σ
^
2
=
1
n
−
K
∑
k
=
1
K
∑
i
:
y
i
=
k
(
x
i
−
μ
^
k
)
2
{\hat{\sigma}^2 =\dfrac{1}{n-K}\sum\limits_{k=1}^K\sum\limits_{i:y_i=k}(x_i-\hat{\mu}_k)^2 }
σ^2=n−K1k=1∑Ki:yi=k∑(xi−μ^k)2,说白了就是计算每一类的方差,再求平均值。总结下上面的公式就是:
{
δ
k
(
x
)
=
l
n
(
g
k
(
x
)
)
=
l
n
π
k
+
μ
σ
2
x
−
μ
2
2
σ
2
μ
^
k
=
1
n
k
∑
i
:
y
i
=
k
x
i
σ
^
2
=
1
n
−
K
∑
k
=
1
K
∑
i
:
y
i
=
k
(
x
i
−
μ
^
k
)
2
{\begin{cases}\delta_k(x) = ln(g_k(x))=ln\pi_k+\dfrac{\mu}{\sigma^2}x-\dfrac{\mu^2}{2\sigma^2}\\{\hat{\mu}_k =\dfrac{1}{n_k}\sum\limits_{i:y_i=k}x_i}\\{\hat{\sigma}^2 =\dfrac{1}{n-K}\sum\limits_{k=1}^K\sum\limits_{i:y_i=k}(x_i-\hat{\mu}_k)^2}\end{cases}}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧δk(x)=ln(gk(x))=lnπk+σ2μx−2σ2μ2μ^k=nk1i:yi=k∑xiσ^2=n−K1k=1∑Ki:yi=k∑(xi−μ^k)2
至此,我们的模型就建立完成了,我们只需要代入数据求出
δ
k
(
x
)
{\delta_k(x)}
δk(x),哪个
k
{k}
k对应的
δ
k
(
x
)
{\delta_k(x)}
δk(x)大,就是哪一类。
(下图虚线是线性判别分析的决策边界,正态曲线哪边高样本就是哪一类)
我们推到出了一个自变量的简单模型,就要泛化为多个自变量的线性判别分析了,即
p
>
1
{p>1}
p>1。其实原理一样的,只是将一元正态分布扩展为多元正态分布:
f
k
(
x
)
=
1
(
2
π
)
p
2
∣
Σ
∣
1
2
e
[
−
1
2
(
x
−
μ
k
)
T
Σ
−
1
(
x
−
μ
k
)
]
{f_k(x)=\dfrac{1}{(2\pi)^{\tfrac{p}{2}}|\Sigma|^\tfrac{1}{2}}e^{[-\tfrac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)]}}
fk(x)=(2π)2p∣Σ∣211e[−21(x−μk)TΣ−1(x−μk)]
μ
k
^
=
(
μ
k
1
,
μ
k
2
,
.
.
.
.
.
.
,
μ
k
p
)
,
Σ
^
=
1
p
−
1
∑
j
=
1
p
(
x
j
−
x
‾
)
(
x
j
−
x
‾
)
T
{\hat{\mu_k}=(\mu_{k1},\mu_{k2},......,\mu_{kp}) , \hat{\Sigma}=\dfrac{1}{p-1}\sum\limits_{j=1}^p(x_j-\overline{x})(x_j-\overline{x})^T}
μk^=(μk1,μk2,......,μkp),Σ^=p−11j=1∑p(xj−x)(xj−x)T
δ
k
(
x
)
=
l
n
(
π
k
f
k
(
x
)
)
=
l
n
(
π
k
)
−
(
p
2
l
n
(
2
π
)
+
1
2
l
n
(
∣
Σ
∣
)
)
−
1
2
(
x
−
μ
k
)
T
Σ
−
1
(
x
−
μ
k
)
=
x
T
Σ
^
μ
^
k
−
1
2
μ
^
k
T
Σ
^
−
1
μ
^
k
+
l
n
π
^
k
{\delta_k(x) = ln(\pi_kf_k(x))=ln(\pi_k)-(\dfrac{p}{2}ln(2\pi)+\dfrac{1}{2}ln(|\Sigma|))-\dfrac{1}{2}(x-\mu_k)^T\Sigma^-1(x-\mu_k)=x^T\hat{\Sigma}\hat{\mu}_k-\dfrac{1} {2}\hat{\mu}_k^T\hat{\Sigma}^{-1}\hat{\mu}_k+ln\hat{\pi}_k}
δk(x)=ln(πkfk(x))=ln(πk)−(2pln(2π)+21ln(∣Σ∣))−21(x−μk)TΣ−1(x−μk)=xTΣ^μ^k−21μ^kTΣ^−1μ^k+lnπ^k
- 降维分类的思想理解线性判别分析:
基于数据进行分类时,一个很自然的想法是:将高维的数据降维至一维,然后使用某个阈值将各个类别分开。下面用图的形式展示:
图中,数据的维度是二维的,我们的想法是把数据降维至一维,然后用阈值就能分类。这个似乎是一个很好的想法,我们总是希望降维后的数据同一个类别自身内部方差小,不同类别之间的方差要尽可能大。这也是合理的,因为同一个类别的数据应该更加相似,因此方差小;不同类别的数据之间应该很不相似,这样才能更容易对数据进行分类,我们简称为:类内方差小,类间方差大,在计算机语言叫“松耦合,高内聚”。在做具体的推导之前,我们对数据的形式和一些基本统计量做一些描述:
特征
X
=
(
x
1
,
x
2
,
.
.
.
,
x
N
)
T
X = (x_1,x_2,...,x_N)^T
X=(x1,x2,...,xN)T,因变量
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
N
)
T
,
其
中
,
y
i
∈
{
+
1
,
−
1
}
Y = (y_1,y_2,...,y_N)^T,\;\;其中,y_i \in \{+1,-1 \}
Y=(y1,y2,...,yN)T,其中,yi∈{+1,−1},类别c1的特征
X
c
1
=
{
x
i
∣
y
i
=
+
1
}
X_{c_1} = \{x_i|y_i=+1 \}
Xc1={xi∣yi=+1},同理,类别c2的特征
X
c
2
=
{
x
i
∣
y
i
=
−
1
}
X_{c_2} = \{x_i|y_i=-1 \}
Xc2={xi∣yi=−1},属于c1类别的数据个数为
N
1
N_1
N1,属于类别c2的数据个数为
N
2
N_2
N2,其中,
N
1
+
N
2
=
N
N_1+N_2 = N
N1+N2=N。
特征X投影在w方向至一维:
z
i
=
w
T
x
i
,
∣
∣
w
∣
∣
=
1
z_i = w^Tx_i,\;\;||w|| = 1
zi=wTxi,∣∣w∣∣=1
全样本投影的均值
z
ˉ
=
1
N
∑
i
=
1
N
z
i
=
1
N
∑
i
=
1
N
w
T
x
i
\bar{z} = \frac{1}{N}\sum\limits_{i=1}^{N}z_i = \frac{1}{N}\sum\limits_{i=1}^{N}w^Tx_i
zˉ=N1i=1∑Nzi=N1i=1∑NwTxi
全样本投影的协方差
S
z
=
1
N
∑
i
=
1
N
(
z
i
−
z
ˉ
)
(
z
i
−
z
ˉ
)
T
=
1
N
∑
i
=
1
N
(
w
T
x
i
−
z
ˉ
)
(
w
T
x
i
−
z
ˉ
)
T
S_z = \frac{1}{N}\sum\limits_{i=1}^{N}(z_i-\bar{z})(z_i-\bar{z})^T = \frac{1}{N}\sum\limits_{i=1}^{N}(w^Tx_i-\bar{z})(w^Tx_i-\bar{z})^T
Sz=N1i=1∑N(zi−zˉ)(zi−zˉ)T=N1i=1∑N(wTxi−zˉ)(wTxi−zˉ)T
c1样本投影的均值
z
1
ˉ
=
1
N
1
∑
i
=
1
N
1
z
i
=
1
N
1
∑
i
=
1
N
1
w
T
x
i
\bar{z_1} = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}z_i = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}w^Tx_i
z1ˉ=N11i=1∑N1zi=N11i=1∑N1wTxi
c1样本投影的协方差
S
z
1
=
1
N
1
∑
i
=
1
N
1
(
z
i
−
z
1
ˉ
)
(
z
i
−
z
1
ˉ
)
T
=
1
N
1
∑
i
=
1
N
1
(
w
T
x
i
−
z
1
ˉ
)
(
w
T
x
i
−
z
1
ˉ
)
T
S_{z_1} = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}(z_i-\bar{z_1})(z_i-\bar{z_1})^T = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}(w^Tx_i-\bar{z_1})(w^Tx_i-\bar{z_1})^T
Sz1=N11i=1∑N1(zi−z1ˉ)(zi−z1ˉ)T=N11i=1∑N1(wTxi−z1ˉ)(wTxi−z1ˉ)T
c2样本投影的均值
z
2
ˉ
=
1
N
2
∑
i
=
1
N
2
z
i
=
1
N
2
∑
i
=
1
N
2
w
T
x
i
\bar{z_2} = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}z_i = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}w^Tx_i
z2ˉ=N21i=1∑N2zi=N21i=1∑N2wTxi
c2样本投影的协方差
S
z
2
=
1
N
2
∑
i
=
1
N
2
(
z
i
−
z
2
ˉ
)
(
z
i
−
z
2
ˉ
)
T
=
1
N
2
∑
i
=
1
N
2
(
w
T
x
i
−
z
2
ˉ
)
(
w
T
x
i
−
z
2
ˉ
)
T
S_{z_2} = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}(z_i-\bar{z_2})(z_i-\bar{z_2})^T = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}(w^Tx_i-\bar{z_2})(w^Tx_i-\bar{z_2})^T
Sz2=N21i=1∑N2(zi−z2ˉ)(zi−z2ˉ)T=N21i=1∑N2(wTxi−z2ˉ)(wTxi−z2ˉ)T
类间差距:
(
z
ˉ
1
−
z
ˉ
2
)
2
(\bar{z}_1-\bar{z}_2)^2
(zˉ1−zˉ2)2
类内方差:
S
1
+
S
2
S_1 + S_2
S1+S2
由于线性判别分析的目标是同一类别内方差小,不同类别之间距离大,因此损失函数定义为:
J
(
w
)
=
(
z
ˉ
1
−
z
ˉ
2
)
2
s
1
+
s
2
=
w
T
(
x
ˉ
c
1
−
x
ˉ
c
2
)
(
x
ˉ
c
1
−
x
ˉ
c
2
)
T
w
w
T
(
s
c
1
+
s
c
2
)
w
w
^
=
a
r
g
m
a
x
w
J
(
w
)
J(w) = \frac{(\bar{z}_1-\bar{z}_2)^2}{s_1+s_2} = \frac{w^T(\bar{x}_{c_1}-\bar{x}_{c_2})(\bar{x}_{c_1}-\bar{x}_{c_2})^Tw}{w^T(s_{c_1}+s_{c_2})w}\\ \;\;\; \hat{w} = argmax_w\;J(w)
J(w)=s1+s2(zˉ1−zˉ2)2=wT(sc1+sc2)wwT(xˉc1−xˉc2)(xˉc1−xˉc2)Tww^=argmaxwJ(w)
记:
S
b
=
(
x
ˉ
c
1
−
x
ˉ
c
2
)
(
x
ˉ
c
1
−
x
ˉ
c
2
)
T
,
S
w
=
(
s
c
1
+
s
c
2
)
S_b = (\bar{x}_{c_1}-\bar{x}_{c_2})(\bar{x}_{c_1}-\bar{x}_{c_2})^T,\;S_w = (s_{c_1}+s_{c_2})
Sb=(xˉc1−xˉc2)(xˉc1−xˉc2)T,Sw=(sc1+sc2),因此
J
(
w
)
=
w
T
S
b
w
w
T
S
w
w
J(w) = \frac{w^TS_bw}{w^TS_ww}
J(w)=wTSwwwTSbw
让J(w)对w求导等于0,求出:
w
=
S
w
−
1
(
x
ˉ
c
1
−
x
ˉ
c
2
)
w = S_w^{-1}(\bar{x}_{c_1}-\bar{x}_{c_2})
w=Sw−1(xˉc1−xˉc2)
(2) 朴素贝叶斯:
在线性判别分析中,我们假设每种分类类别下的特征遵循同一个协方差矩阵,每两个特征之间是存在协方差的,因此在线性判别分析中各种特征是不是独立的。但是,朴素贝叶斯算法对线性判别分析作进一步的模型简化,它将线性判别分析中的协方差矩阵中的协方差全部变成0,只保留各自特征的方差,也就是朴素贝叶斯假设各个特征之间是不相关的。在之前所看到的偏差-方差理论中,我们知道模型的简化可以带来方差的减少但是增加偏差,因此朴素贝叶斯也不例外,它比线性判别分析模型的方差小,偏差大。虽然简化了模型,实际中使用朴素贝叶斯的案例非常多,甚至多于线性判别分析,例如鼎鼎大名的新闻分类,垃圾邮件分类等。