文章目录
线性模型
1. 线性回归
- 线性回归采用最小二乘法作为代价函数,需要符合最小二乘法使用的基本假设,违背基本假设时,普通最小二乘法估计量不再是最小线性无偏估计量,但是还是无偏的
- 正规方程法中如果 X T X X^TX XTX不可逆,两种解决方案:删除数据中多余的特征(即特征之间存在相关性);删除部分特征数据使特征数小于样本数
2.逻辑回归
-
当逻辑回归仍采用线性回归的代价函数时,即仍用MSE表征,定义为 J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) − y ( i ) ) 2 J(\theta)=\frac{1}{m}\sum_{i=1}^m\frac12(h_\theta(x^{(i)}-y^{(i)})^2 J(θ)=m1∑i=1m21(hθ(x(i)−y(i))2,其中 h θ ( x ) = s i g m o i d ( θ T X ) h_\theta(x)=sigmoid(\theta^TX) hθ(x)=sigmoid(θTX),所得到的代价函数将是一个非凸函数,影响用梯度下降法求最小值,因此选用交叉熵损失函数
-
利用梯度下降法求解代价函数的推导公式
-
两种角度考虑逻辑回归的代价函数:
- 极大似然估计
- 极大似然估计
-
多分类问题的逻辑回归
softmax的推导过程:
ln P ( Y i = 1 ) = β 1 X i − ln Z \ln P(Y_i=1)=\beta_1 X_i-\ln Z lnP(Yi=1)=β1Xi−lnZ
ln P ( Y i = 2 ) = β 2 X i − ln Z \ln P(Y_i=2)=\beta_2 X_i-\ln Z lnP(Yi=2)=β2Xi−lnZ
ln P ( Y i = 3 ) = β 3 X i − ln Z \ln P(Y_i=3)=\beta_3 X_i-\ln Z lnP(Yi=3)=β3Xi−lnZ
ln P ( Y i = K ) = β K X i − ln Z \ln P(Y_i=K)=\beta_K X_i-\ln Z lnP(Yi=K)=βKXi−lnZ
这里的 l n Z lnZ lnZ为一个常数,能够保证 Σ P ( i ) = 1 \Sigma P(i)=1 ΣP(i)=1,将两边指数化,可得
P ( Y i = k ) = 1 Z e β k X i P(Y_i=k)=\frac1Ze^{\beta_kX_i} P(Yi=k)=Z1eβkXi
则有
Z = ∑ e β k X i Z=\sum e^{\beta_kX_i} Z=∑eβkXi
代入上式则有:
P ( Y i = c ) = e β c ⋅ x i ∑ k = 1 K e β k ⋅ X i \operatorname{P}\left(Y_{i}=c\right)=\frac{e^{\beta_{c} \cdot \mathbf{x}_{i}}}{\sum_{k=1}^{K} e^{\beta_{k} \cdot \mathbf{X}_{i}}} P(Yi=c)=∑k=1Keβk⋅Xieβc⋅xi
3. 正则化
为了避免过拟合,无论是逻辑回归还是线性模型都采用加入正则化项,当加入 L 2 L_2 L2范数时,得到的线性模型成为岭回归,采用 L 1 L_1 L1范数时得到LASSO回归,无论是L1范数还是L2范数,都将有助于降低过拟合的风险,但同时,L1范数更容易获得稀疏解(即求得的参数中有更少的非零分量)可用于进行特征选择
为什么L1更容易获得稀疏解,如上图所示,假设输入变量为只有两个,即在 y = ω x + b y=\omega x+b y=ωx+b中 ω \omega ω只有两个,我们写出对应的Lasso回归和岭回归的表达式:
LASSO:
a r g m i n ω ∑ i = 1 m ( y i − ω T x i ) 2 + λ ∣ ω ∣ argmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2+\lambda|\omega| argminω∑i=1m(yi−ωTxi)2+λ∣ω∣
Ridge:
a r g m i n ω ∑ i = 1 m ( y i − ω T x i ) 2 + λ ω 2 argmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2+\lambda\omega^2 argminω∑i=1m(yi−ωTxi)2+λω2
由Lagrange乘数法,对于Lasso,即为求下面的条件极值:
a
r
g
m
i
n
ω
∑
i
=
1
m
(
y
i
−
ω
T
x
i
)
2
argmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2
argminωi=1∑m(yi−ωTxi)2
s
.
t
.
∣
∣
ω
∣
∣
<
=
C
s.t. ||\omega||<=C
s.t.∣∣ω∣∣<=C
对于Ridge同理,于是我们将 ∣ ∣ ω ∣ ∣ < = C , ω 2 < = C ||\omega||<=C,\omega^2<=C ∣∣ω∣∣<=C,ω2<=C以及广义cost function的等值线绘制在坐标轴中如下
若最优解不在凸函数的边界取到,则一定在凸函数的内部取到,此时加不加正则化也没啥意义,但是实际情况中,最优解往往在正则化边界处渠道,此时,在所有的解中,L1范数更有可能与目标函数相交于坐标轴线上,L2范数不可能与目标函数交于坐标轴线上,使得产生的解不具有稀疏性
总的来说,一般在特征选择的时候选用L1范数,在要正则化的时候选择L2范数,其实L1也能正则化,但是实际情况为什么经常采用L2范数呢,我想可能跟L1范数不是处处可导有关
此外,在深度学习中的权重衰减也是指的L2正则化
4. FM,FFM,DeepFM
在做这些事情之前,首要做的就是One-Hot编码
LR&PLOY2
LR优点是简单高效,缺点也很明显,它太简单,视特征空间内特征之间彼此独立,没有任何交叉或者组合关系,这与实际不符合,因此PLOY2通过特征的二项式组合建模,PLOY2的函数如下
f
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
j
1
=
1
n
∑
j
2
=
j
1
+
1
n
w
h
(
j
1
,
j
2
)
x
j
1
x
j
2
f(x)=w_0+\sum_{i=1}^nw_ix_i+\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n} w_{h\left(j_{1}, j_{2}\right)} x_{j_{1}} x_{j_{2}}
f(x)=w0+i=1∑nwixi+j1=1∑nj2=j1+1∑nwh(j1,j2)xj1xj2
PLOY2有一个明显的问题,就是在实际场景中,大部分特征都是稀疏的,即大部分特征值为0
FM
因此,FM就是解决稀疏数据下的特征组合问题
对于每个特征
i
i
i来说,认为其有一个隐向量
v
i
(
k
⋅
1
)
v_{i(k\cdot 1)}
vi(k⋅1),其中k为超参数,则PLOY2中的
w
i
j
=
v
i
T
⋅
v
j
w_{ij}=v_i^T\cdot v_j
wij=viT⋅vj,则FM的表达式为
y
^
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
(
v
i
⋅
v
j
)
x
i
x
j
\hat{y}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left(\mathbf{v}_{i} \cdot \mathbf{v}_{j}\right) x_{i} x_{j}
y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n(vi⋅vj)xixj
注意:在强调一遍,这里面所涉及的特征,都是One-Hot编码后的特征
举例说明:
训练集如下:
数据集 | Clicked? | Publisher | Advertiser |
---|---|---|---|
训练集 | 1 | NBC | Nike |
训练集 | 0 | EPSN | Adidas |
测试集如下:
数据集 | Clicked? | Publisher | Advertiser |
---|---|---|---|
测试集 | ? | NBC | Adidas |
首先要做的就是先把Publisher和Advertiser的特征One-Hot编码,如下:
数据集 | Clicked? | NBC | ESPN | Nike | Adidas |
---|---|---|---|---|---|
训练集 | 1 | 1 | 0 | 1 | 0 |
训练集 | 0 | 0 | 1 | 0 | 1 |
则四个特征分别是NBC,ESPN,Nike,Adidas,对于第一个训练样本,FM参数变为 V N B C ⋅ V N i k e V_{N B C} \cdot V_{N i k e} VNBC⋅VNike,因为其他的都是0,只有 x N B C ⋅ x N i k e = 1 x_{N B C} \cdot x_{N i k e}=1 xNBC⋅xNike=1,对于第二个训练样本,FM参数变为 V E P S N ⋅ V A d i d a s V_{E P S N} \cdot V_{A d i d a s} VEPSN⋅VAdidas,同理,因为只有ESPN和Adidas相乘不为0,根据训练集,上述训练集,我们训练得到 V N B C , V E P S N , V A d i d a s , V N i k e V_{N B C} ,V_{E P S N},V_{A d i d a s},V_{N i k e} VNBC,VEPSN,VAdidas,VNike,然后在测试集上,FM参数只有 V N B C ⋅ V A d i d a s V_{NBC} \cdot V_{Adidas} VNBC⋅VAdidas
则我们的任务就是,根据所有的训练集,求出所有特征的因变量 v i v_i vi,以及特征的系数 w i w_i wi和常数 w 0 w_0 w0,共kn+n+1个变量。紧接着将训练得到的参数用于测试集,计算y
计算复杂度分析:
直接来看FM的复杂度为 O ( k n 2 ) O(kn^2) O(kn2),对FM的表达式进行优化,可将复杂度降至 O ( k n ) O(kn) O(kn)
FM的性能度量方法
注意,FM只是针对于原来的 f ( x ) = w 0 + ∑ i = 1 n w i x i f(x)=w_0+\sum_{i=1}^n w_ix_i f(x)=w0+∑i=1nwixi进行优化的,将FM应用于分类问题时,采用的依然是 y = 1 1 + e x p ( − f ( x ) ) y=\frac{1}{1+exp(-f(x))} y=1+exp(−f(x))1,把其中的f(x)换为FM的表达式就好
对于回归问题
L
o
s
s
=
(
y
^
(
x
)
−
y
)
2
Loss=(\hat{y}(\mathbf{x})-y)^2
Loss=(y^(x)−y)2
对于分类问题
L
o
s
s
=
log
(
1
+
e
−
y
y
^
(
x
)
)
Loss=\log(1+e^{-y\hat{y}(\mathbf{x})})
Loss=log(1+e−yy^(x))
FM的学习方法
将上述计算复杂度分析结果代入原来的FM表达式
[外链图片转存失败(img-t2acLpnq-1563582989249)(C:\Users\lifra\AppData\Roaming\Typora\typora-user-images\1556335574128.png)]
除了采用SGD外,还可以采用各种优化方法Adagrad,Adams等可以自适应学习率的方法进行训练
FFM
在FM中,我们认为,各个特征组合组合的时候,隐变量是保持不变的,事实上并不全是,FFM就是考虑Field-FM,大致意思是认为,对于不同类型的特征,他们组合的时候隐向量是会变化的,太绕了举个例子:
数据集 | Clicked? | Publisher | Advertiser | Gender |
---|---|---|---|---|
训练集 | 1 | NBC | Nike | Men |
训练集 | 0 | EPSN | Adidas | Women |
再加一个性别特征,OneHot一下
数据集 | Clicked? | NBC | ESPN | Nike | Adidas | Men | Women |
---|---|---|---|---|---|---|---|
训练集 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
训练集 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
在训练样本1中,FM所考虑的隐向量为:
V
N
B
C
⋅
V
N
i
k
e
+
V
N
i
k
e
⋅
V
M
e
n
+
V
N
B
C
⋅
V
M
e
n
V_{N B C} \cdot V_{N i k e}+V_{Nike} \cdot V_{Men}+V_{N B C} \cdot V_{Men}
VNBC⋅VNike+VNike⋅VMen+VNBC⋅VMen
而事实上,与Advertiser类别特征相乘的
V
N
B
C
V_{NBC}
VNBC和与Gender类别相乘的
V
N
B
C
V_{NBC}
VNBC不一定是相等的,FFM考虑了这种与不同类型(Field)特征组合的隐变量不相等问题
FFM所考虑的隐向量为:
V
N
B
C
,
A
⋅
w
N
i
k
e
,
P
⎵
P
×
A
+
V
N
i
k
e
,
G
⋅
V
M
e
n
,
A
⎵
A
×
G
+
V
N
B
C
,
G
⋅
V
M
e
n
,
P
⎵
P
×
G
\underbrace{{\bf V}_{NBC, A} \cdot {\bf w}_{Nike, P}}_{P \times A} + \underbrace{{\bf V}_{Nike, G} \cdot {\bf V}_{Men,A}}_{A \times G} + \underbrace{{{\bf V}_{NBC, G} \cdot {\bf V}_{Men,P}}}_{P \times G}
P×A
VNBC,A⋅wNike,P+A×G
VNike,G⋅VMen,A+P×G
VNBC,G⋅VMen,P
注意,FFM考虑的是隐向量在field之间的差异,field就是没有做onehot之前的特征,也就是说,
V
N
B
C
,
G
V_{NBC,G}
VNBC,G无论是和
V
M
e
n
,
P
V_{Men,P}
VMen,P还是和
V
W
o
m
e
n
,
P
V_{Women,P}
VWomen,P相乘都取的是一个值。
FFM的表达式为
(3-1)
y
(
x
)
=
w
0
+
∑
i
=
1
d
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
(
w
i
,
f
j
⋅
w
j
,
f
i
)
x
i
x
j
y(\mathbf{x}) = w_0 + \sum_{i=1}^d w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n (w_{i, f_j} \cdot w_{j, f_i}) x_i x_j \tag{3-1}
y(x)=w0+i=1∑dwixi+i=1∑nj=i+1∑n(wi,fj⋅wj,fi)xixj(3-1)
变量的个数:1+n+kn(d-1),n代表onehot后特征的个数,d代表onehot前特征的个数
决策树
1.常用的几种树模型
-
ID3
采用信息增益来划分:
Ent ( D ) = − ∑ k = 1 ∣ Y ∣ p k log 2 p k \operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y |}} p_{k} \log _{2} p_{k} Ent(D)=−k=1∑∣Y∣pklog2pk
p k p_{k} pk:样本集合D中第k类样本所占的比例
Gain ( D , a ) = Ent ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ( D v ) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
特点:- 只能处理离散型变量
- 只能用于分类问题
- 特征在层级之间不复用,只用一次
ID3代码实例
import numpy as np import pandas as pd from math import * def calcEnt(dataset): ydata=dataset[:,-1] ydatasize=len(ydata) ydataclass={} ##ydata的分类 sument=0 for i in ydata: if i not in ydataclass.keys(): ydataclass[i]=1 else: ydataclass[i]+=1 for dataclass in ydataclass.keys(): temp=ydataclass[dataclass]/ydatasize sument+=-(temp*log2(temp)) return sument def split(dataset,i,value): """ 删除第i列的值为value的元素,并把其余的拼接起来 """ spliteddata=[] for data in dataset: if data[i]==value: temp=np.hstack((data[:i],data[i+1:])) temp=list(temp) spliteddata.append(temp) spliteddata=np.array(spliteddata) return spliteddata def chbestspt(dataset): datax=dataset[:,:-1] baseEnt=calcEnt(dataSet) maxgain=0 maxgaini=0 for i in range(len(datax[0])): xdatai=list(datax[:,i]) enti=0 for j in set(xdatai): splitdataset=split(dataset,i,j) entij=calcEnt(splitdataset) enti+=len(splitdataset)/len(dataset)*entij gaini=baseEnt-enti if gaini>maxgain: maxgain=gaini maxgaini=i return maxgaini def producetree(dataset,labels): xdata = dataset[:, :-1] ydata = dataset[:, -1] if list(ydata).count(ydata[0])==len(ydata):##如果ydata只有一类 return ydata[0] if len(labels)==1:##如果label只有一类 yseries=pd.Series(ydata) return yseries.value_counts().keys()[0] besti=chbestspt(dataset) bestilabel=labels[besti] mytree={bestilabel:{}} del labels[besti] for value in set(list(xdata[:,besti])): sublabels=labels[:] ispliteddata=split(dataset,besti,value) mytree[bestilabel][value]=producetree(ispliteddata,sublabels) print(mytree) return mytree dataSet = np.loadtxt('data2.csv',dtype=None,delimiter=',') labels = ['A', 'B', 'C'] tree=producetree(dataSet,labels)
-
C4.5
ID3中的信息增益对分类较多的属性有所偏好,C4.5用增益率代替信息增益,缓解这种现象
G a i n _ r a t i o ( D , a ) = Gain ( D , a ) IV ( a ) Gain\_ratio(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中:I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ \mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
注意:由于信息增益率可能对数值较少的属性有偏好,因此C4.5并不是直接取 a r g m a x G a i n _ r a t i o n argmax{Gain\_ration} argmaxGain_ration,而是先找到所有 G a i n > a v g G a i n Gain>avgGain Gain>avgGain的属性,再从中选取 m a x G a i n _ r a t i o maxGain\_ratio maxGain_ratio
特点:
- 可用于处理连续性和离散型变量,注:C4.5对于连续变量的处理和CART有点像,首先对连续进行排序,将连续变量划分为 < = v k <=v_k <=vk和 > v k >v_k >vk两部分,计算Gain_ratio,选取 m a x ( G a i n _ r a t i o ) max(Gain\_ratio) max(Gain_ratio)作为最优切分点
- 只能用于处理分类问题
- 特征在层级之间不复用,只用一次
-
CART
CART既可以用来做分类,还可以用来做回归
CART树的特点:1.永远是二叉树,当某个属性中的类别不止两个的时候,就划分为A和非A 2.可用于处理分类和回归问题 3.特征属性可在层级之间复用
分类模型
将ID3和C4.5中的Ent改为Gini
Gini ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 ∣ Y ∣ p k 2 \begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} Gini(D)=k=1∑∣Y∣k′̸=k∑pkpk′=1−k=1∑∣Y∣pk2
其中:p k p_k pk:样本集合D中第k类样本所占的比例
Gini(D)反应了从数据集D中抽取两个样本,其属于不同分类的概率
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ( D v ) Gini\_index(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right) Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
取 a r g m i n G i n i _ i n d e x argmin Gini\_index argminGini_index回归模型
在回归模型中,目标函数(Gain)是利用CART所得的所有分类,使得她们的方差最小
举例,当上图用于预测是否已婚时(分类)
G a i n = ∑ i ∈ I p i ⋅ Gini i = 3 7 ⋅ ( 1 − ( ( 2 3 ) 2 + ( 1 3 ) 2 ) ) + 4 7 ⋅ ( 1 − ( ( 3 4 ) 2 + ( 1 4 ) 2 ) ) = 0.4 Gain=\sum_{i \in I} p_{i} \cdot \operatorname{Gini} _{i}=\frac{3}{7} \cdot\left(1-\left(\left(\frac{2}{3}\right)^{2}+\left(\frac{1}{3}\right)^{2}\right)\right)+\frac{4}{7} \cdot\left(1-\left(\left(\frac{3}{4}\right)^{2}+\left(\frac{1}{4}\right)^{2}\right)\right)=0.4 Gain=i∈I∑pi⋅Ginii=73⋅(1−((32)2+(31)2))+74⋅(1−((43)2+(41)2))=0.4
当用于预测年龄时(回归)
G a i n = ∑ i ∈ I σ i = 1 2 2 + 1 8 2 + 2 1 2 − 3 ⋅ 1 7 2 + 2 6 2 + 4 7 2 + 3 6 2 + 2 9 2 − 4 ⋅ 32. 5 2 = 34.71 Gain=\sum_{i \in I} \sigma_{i}=\sqrt{12^{2}+18^{2}+21^{2}-3 \cdot 17^{2}}+\sqrt{26^{2}+47^{2}+36^{2}+29^{2}-4 \cdot 32.5^{2}}=34.71 Gain=i∈I∑σi=122+182+212−3⋅172+262+472+362+292−4⋅32.52=34.71
2.剪枝策略
无论是预剪枝还是后剪枝,所采用的计算精度的标准从来都不是针对于训练集,而是针对于验证集,因为本来剪枝策略就是为了防止过拟合,增加泛化能力而提出的
-
预剪枝
在生成决策树的时候提前停止树的增长,如果说当前节点的划分是否能够带来模型泛化能力的提升,如果可以就生长,不可以就生长,具体的叶节点属于哪一类,以少数服从多数决定,举例:
这是原来的一个未剪枝的二叉树
这是训练集
这是验证集
首先来看,根节点要不要生长:
如果不生长“脐部”,观察训练集:好瓜5,坏瓜5,我们认为全是好瓜\坏瓜,都可以,假设为好瓜,观察验证集,精度为 3 7 \frac37 73
如果生长脐部,观察训练集,“脐部=凹陷”:好瓜3,坏瓜1,认为是好瓜;“脐部=稍凹”:好瓜2,坏瓜2,认为是好瓜\坏瓜,都可以,假设为好瓜;“脐部=平坦”,好瓜0,坏瓜2,认为坏瓜;则{4,5,8,11,12}分类正确,精度 5 7 \frac57 75,则划分!
接着来看色泽要不要生长:
如果不生长,则跟根节点生长的精度是一样的,是 5 7 \frac57 75
如果生长,则注意,此时只有色泽生长,其他还是不生长,则色泽=青绿 好瓜,色泽=乌黑 好瓜 色泽=浅白 坏瓜,则对于训练集来讲,划分正确的有{4,8,11,12},精度 4 7 \frac47 74,不划分!
-
后剪枝
3. 缺失值的处理
当出现缺失值时,首先计算各个特征属性的饱和度
ρ
\rho
ρ,再计算特征中有值的Gain,最后乘
ρ
\rho
ρ,
Gain
(
D
,
a
)
=
ρ
×
Gain
(
D
~
,
a
)
=
ρ
×
(
Ent
(
D
~
)
−
∑
v
=
1
V
r
~
v
Ent
(
D
~
v
)
)
\begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned}
Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))
其中:
ρ
=
∑
x
∈
D
~
w
x
∑
x
∈
D
w
x
\rho=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}}
ρ=∑x∈Dwx∑x∈D~wx,举例如下:
[外链图片转存失败(img-ZDTAQMhr-1563582989251)(C:\Users\lifra\AppData\Roaming\Typora\typora-user-images\1554644775057.png)]
对于色泽属性来说,除{1,5,13}空缺外剩下均有值,故 ρ = 14 17 \rho=\frac{14}{17} ρ=1714,计算 Ent ( D ~ ) = − ( 6 14 log 2 6 14 + 8 14 log 2 8 14 ) = 0.985 \operatorname{Ent}(\tilde{D})=-\left(\frac{6}{14} \log _{2} \frac{6}{14}+\frac{8}{14} \log _{2} \frac{8}{14}\right)=0.985 Ent(D~)=−(146log2146+148log2148)=0.985, Ent ( D ~ 1 ) = − ( 2 4 log 2 2 4 + 2 4 log 2 2 4 ) = 1.000 \operatorname{Ent}\left(\tilde{D}^{1}\right)=-\left(\frac{2}{4} \log _{2} \frac{2}{4}+\frac{2}{4} \log _{2} \frac{2}{4}\right)=1.000 Ent(D~1)=−(42log242+42log242)=1.000, Ent ( D ~ 2 ) = − ( 4 6 log 2 4 6 + 2 6 log 2 2 6 ) = 0.918 \operatorname{Ent}\left(\tilde{D}^{2}\right)=-\left(\frac{4}{6} \log _{2} \frac{4}{6}+\frac{2}{6} \log _{2} \frac{2}{6}\right)=0.918 Ent(D~2)=−(64log264+62log262)=0.918, Ent ( D ~ 3 ) = − ( 0 4 log 2 0 4 + 4 4 log 2 4 4 ) = 0.000 \operatorname{Ent}\left(\tilde{D}^{3}\right)=-\left(\frac{0}{4} \log _{2} \frac{0}{4}+\frac{4}{4} \log _{2} \frac{4}{4}\right)=0.000 Ent(D~3)=−(40log240+44log244)=0.000;
故
Gain
(
D
~
,
色
泽
)
=
Ent
(
D
~
)
−
∑
v
=
1
3
r
~
v
Ent
(
D
~
v
)
=
0.985
−
(
4
14
×
1.000
+
6
14
×
0.918
+
4
14
×
0.000
)
=
0.306
\begin{aligned} \operatorname{Gain}(\tilde{D}, 色泽) &=\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{3} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right) \\ &=0.985-\left(\frac{4}{14} \times 1.000+\frac{6}{14} \times 0.918+\frac{4}{14} \times 0.000\right) \\ &=0.306 \end{aligned}
Gain(D~,色泽)=Ent(D~)−v=1∑3r~vEnt(D~v)=0.985−(144×1.000+146×0.918+144×0.000)=0.306
Gain ( D , 色 泽 ) = ρ Gain ( D ~ , 色 泽 ) = 0.252 \operatorname{Gain}({D}, 色泽)=\rho\operatorname{Gain}(\tilde{D}, 色泽)=0.252 Gain(D,色泽)=ρGain(D~,色泽)=0.252
在根节点已经确定的情况下,第二个根节点,确定方式跟第一个一样,但是对于缺失值,并不像第一个一样直接舍去,而是以一定的权重加入到后续分析中去,如下例所示,我们已知第一个根节点为{纹理},判断纹理=稍糊中第二个根节点的计算策略
4.总结
优点:1.直观 2.不需要做预处理,不需要做缺失值处理 3.预测的时间复杂度为 O ( l o g m ) O(logm) O(logm) 4.对异常点的容错能力好
缺点:1.决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进;2.寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优;3.如果某些特征的样本比例过大,生成决策树容易偏向于这些特征,可以通过调节样本权重改善
支持向量机
支持向量机和逻辑回归不同的是:支持向量机只输出类别,不输出概率
1.线性可分SVM
2.线性SVM
当欠拟合时,需要增加惩罚系数C
min
w
,
b
1
2
∥
w
∥
2
+
C
∑
i
=
1
m
ℓ
0
/
1
(
y
i
(
w
T
x
i
+
b
)
−
1
)
\min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \ell_{0 / 1}\left(y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)-1\right)
w,bmin21∥w∥2+Ci=1∑mℓ0/1(yi(wTxi+b)−1)
s.t.
ℓ
0
/
1
(
z
)
=
{
1
,
if
z
<
0
0
,
otherwise
\ell_{0 / 1}(z)=\left\{\begin{array}{ll}{1,} & {\text { if } z<0} \\ {0,} & {\text { otherwise }}\end{array}\right.
ℓ0/1(z)={1,0, if z<0 otherwise
然而,由于0-1非凸,所以常用hinge来替代0-1函数,
ℓ
hinge
(
z
)
=
max
(
0
,
1
−
z
)
\ell_{\text {hinge}}(z)=\max (0,1-z)
ℓhinge(z)=max(0,1−z),若采用hinge损失,
z
=
y
f
(
x
)
z=yf(x)
z=yf(x)上式变为
min
w
,
b
,
ξ
i
1
2
∥
w
∥
2
+
C
∑
i
=
1
m
ξ
i
\min _{\boldsymbol{w}, b, \xi_{i}} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i}
w,b,ξimin21∥w∥2+Ci=1∑mξi
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
−
ξ
i
ξ
i
⩾
0
,
i
=
1
,
2
,
…
,
m
\begin{array}{l}{y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1-\xi_{i}} \\ {\xi_{i} \geqslant 0, i=1,2, \ldots, m}\end{array}
yi(wTxi+b)⩾1−ξiξi⩾0,i=1,2,…,m
这就是SVM软间隔最大化
当 C = + ∞ C=+\infty C=+∞,迫使所有的都必须满足硬间隔,此时与1相等,C越大,对于软间隔的容忍度越低,结构就越复杂
3.非线性可分SVM
正定核的充要条件,对于任意D,核矩阵K是半正定的
4. Hinge损失函数与结构风险最小化
接着2继续讲,如果将其换为logistic损失函数 log ( 1 + exp ( − z ) ) \log(1+\exp(-z)) log(1+exp(−z))(此时是-1,1的情况),此时变成了logistic回归
总结一下SVM与logistic回归
- 两者损失函数不同,一个是交叉熵,另一个是hinge
- logistic可以输出概率,SVM只能分类
- 处理多分类问题上,SVM有OvR或类似于二叉树的感觉一样,logistic有softmax
- SVM由于采用hinge损失,有一块平坦的零区域,所以更容易获得稀疏解
贝叶斯理论
集成学习
-
梯度提升树
bagging和boosting
Bagging和Boosting的区别:
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
5)这个很重要面试被问到了
为什么说bagging是减少variance,而boosting是减少bias?
bagging:
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立)。由于,所以bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。另一方面,若各子模型独立,则有
,此时可以显著降低variance。若各子模型完全相同,则
,此时不会降低variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。
(用公式可以一目了然:设有i.d.的n个随机变量,方差记为,两两变量之间的相关性为
,则
的方差为
,bagging降低的是第二项,random forest是同时降低两项。详见ESL p588公式15.1)
boosting:
我自己就可以解答,由于boosting每次总是拟合上一步的残差,这里面的残差指的就是bias,所以每一次生成子树后一定比生成子树前模型bias有一定的下降,同时相应带来的问题就是模型将会变得更为负载,variance升高
boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数。例如,常见的AdaBoost即等价于用这种方法最小化exponential loss:
。所谓forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步长a(或者叫组合系数),来最小化
,这里
是前n-1步得到的子模型的和。因此boosting是在sequential地最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。
boosting
Adaboost
GBDT
gbdt的神文搬运:https://www.cnblogs.com/ModifyRong/p/7744987.html
gbdt如何应用于分类问题
首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树。不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练的。这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。残差相减是有意义的。
如果选用的弱分类器是分类树,类别相减是没有意义的。上一轮输出的是样本 x 属于 A类,本一轮训练输出的是样本 x 属于 B类。 A 和 B 很多时候甚至都没有比较的意义,A 类- B类是没有意义的。
我们具体到分类这个任务上面来,我们假设样本 X 总共有 K类。来了一个样本 x,我们需要使用gbdt来判断 x 属于样本的哪一类。
第一步 我们在训练的时候,是针对样本 X 每个可能的类都训练一个分类回归树。举例说明,目前样本有三类,也就是 K = 3。样本 x 属于 第二类。那么针对该样本 x 的分类结果,其实我们可以用一个 三维向量 [0,1,0] 来表示。0表示样本不属于该类,1表示样本属于该类。由于样本已经属于第二类了,所以第二类对应的向量维度为1,其他位置为0。
针对样本有 三类的情况,我们实质上是在每轮的训练的时候是同时训练三颗树。第一颗树针对样本x的第一类,输入为(x,0)(x,0)。第二颗树输入针对 样本x 的第二类,输入为(x,1)(x,1)。第三颗树针对样本x 的第三类,输入为(x,0)(x,0)
在这里每颗树的训练过程其实就是就是我们之前已经提到过的CATR TREE 的生成过程。在此处我们参照之前的生成树的程序 即可以就解出三颗树,以及三颗树对x 类别的预测值f1(x),f2(x),f3(x)f1(x),f2(x),f3(x)。那么在此类训练中,我们仿照多分类的逻辑回归 ,使用softmax 来产生概率,则属于类别 1 的概率
p1=exp(f1(x))/∑k=13exp(fk(x))p1=exp(f1(x))/∑k=13exp(fk(x))
并且我们我们可以针对类别1 求出 残差y11(x)=0−p1(x)y11(x)=0−p1(x);类别2 求出残差y22(x)=1−p2(x)y22(x)=1−p2(x);类别3 求出残差y33(x)=0−p3(x)y33(x)=0−p3(x).
然后开始第二轮训练 针对第一类 输入为(x,y11(x)y11(x)), 针对第二类输入为(x,y22(x))y22(x)), 针对 第三类输入为 (x,y33(x)y33(x)).继续训练出三颗树。一直迭代M轮。每轮构建 3颗树。
所以当K =3。我们其实应该有三个式子
F1M(x)=∑m=1MC1mI(xϵR1m)F1M(x)=∑m=1MC1mI(xϵR1m)
F2M(x)=∑m=1MC2mI(xϵR2m)F2M(x)=∑m=1MC2mI(xϵR2m)
F3M(x)=∑m=1MC3mI(xϵR3m)F3M(x)=∑m=1MC3mI(xϵR3m)
当训练完毕以后,新来一个样本 x1 ,我们需要预测该样本的类别的时候,便可以有这三个式子产生三个值,f1(x),f2(x),f3(x)f1(x),f2(x),f3(x)。样本属于 某个类别c的概率为
pc=exp(fc(x))/∑k=13exp(fk(x))pc=exp(fc(x))/∑k=13exp(fk(x))
- GBDT 多分类举例说明
上面的理论阐述可能仍旧过于难懂,我们下面将拿Iris 数据集中的六个数据作为例子,来展示gbdt 多分类的过程。
-
-
样本编号 花萼长度(cm) 花萼宽度(cm) 花瓣长度(cm) 花瓣宽度 花的种类 1 5.1 3.5 1.4 0.2 山鸢尾 2 4.9 3.0 1.4 0.2 山鸢尾 3 7.0 3.2 4.7 1.4 杂色鸢尾 4 6.4 3.2 4.5 1.5 杂色鸢尾 5 6.3 3.3 6.0 2.5 维吉尼亚鸢尾 6 5.8 2.7 5.1 1.9 维吉尼亚鸢尾 图四 Iris 数据集
-
这是一个有6个样本的三分类问题。我们需要根据这个花的花萼长度,花萼宽度,花瓣长度,花瓣宽度来判断这个花属于山鸢尾,杂色鸢尾,还是维吉尼亚鸢尾。具体应用到gbdt多分类算法上面。我们用一个三维向量来标志样本的label。[1,0,0] 表示样本属于山鸢尾,[0,1,0] 表示样本属于杂色鸢尾,[0,0,1] 表示属于维吉尼亚鸢尾。
gbdt 的多分类是针对每个类都独立训练一个 CART Tree。所以这里,我们将针对山鸢尾类别训练一个 CART Tree 1。杂色鸢尾训练一个 CART Tree 2 。维吉尼亚鸢尾训练一个CART Tree 3,这三个树相互独立。
我们以样本 1 为例。针对 CART Tree1 的训练样本是[5.1,3.5,1.4,0.2][5.1,3.5,1.4,0.2],label 是 1,最终输入到模型当中的为[5.1,3.5,1.4,0.2,1][5.1,3.5,1.4,0.2,1]。针对 CART Tree2 的训练样本也是[5.1,3.5,1.4,0.2][5.1,3.5,1.4,0.2],但是label 为 0,最终输入模型的为[5.1,3.5,1.4,0.2,0][5.1,3.5,1.4,0.2,0]. 针对 CART Tree 3的训练样本也是[5.1,3.5,1.4,0.2][5.1,3.5,1.4,0.2],label 也为0,最终输入模型当中的为[5.1,3.5,1.4,0.2,0][5.1,3.5,1.4,0.2,0].
下面我们来看 CART Tree1 是如何生成的,其他树 CART Tree2 , CART Tree 3的生成方式是一样的。CART Tree的生成过程是从这四个特征中找一个特征做为CART Tree1 的节点。比如花萼长度做为节点。6个样本当中花萼长度 大于5.1 cm的就是 A类,小于等于 5.1 cm 的是B类。生成的过程其实非常简单,问题 1.是哪个特征最合适? 2.是这个特征的什么特征值作为切分点? 即使我们已经确定了花萼长度做为节点。花萼长度本身也有很多值。在这里我们的方式是遍历所有的可能性,找到一个最好的特征和它对应的最优特征值可以让当前式子的值最小。
我们以第一个特征的第一个特征值为例。R1 为所有样本中花萼长度小于 5.1 cm 的样本集合,R2 为所有样本当中花萼长度大于等于 5.1cm 的样本集合。所以 R1={2}R1={2},R2={1,3,4,5,6}R2={1,3,4,5,6}.
图 5 节点分裂示意图
y1 为 R1 所有样本的label 的均值 1/1=11/1=1。y2 为 R2 所有样本的label 的均值 (1+0+0+0+0)/5=0.2(1+0+0+0+0)/5=0.2。
下面便开始针对所有的样本计算这个式子的值。样本1 属于 R2 计算的值为(1−0.2)2(1−0.2)2, 样本2 属于R1 计算的值为(1−1)2(1−1)2, 样本 3,4,5,6同理都是 属于 R2的 所以值是(0−0.2)2(0−0.2)2. 把这六个值加起来,便是 山鸢尾类型在特征1 的第一个特征值的损失值。这里算出来(1-0.2)^2+ (1-1)^2 + (0-0.2)2+(0-0.2)2+(0-0.2)^2 +(0-0.2)^2= 0.84
接着我们计算第一个特征的第二个特征值,计算方式同上,R1 为所有样本中 花萼长度小于 4.9 cm 的样本集合,R2 为所有样本当中 花萼长度大于等于 4.9 cm 的样本集合.所以 R1={}R1={},R1={1,2,3,4,5,6}R1={1,2,3,4,5,6}. y1 为 R1 所有样本的label 的均值 = 0。y2 为 R2 所有样本的label 的均值 (1+1+0+0+0+0)/6=0.3333(1+1+0+0+0+0)/6=0.3333。
图 6 第一个特征的第二个特侦值的节点分裂情况
我们需要针对所有的样本,样本1 属于 R2, 计算的值为(1−0.333)2(1−0.333)2, 样本2 属于R2 ,计算的值为(1−0.333)2(1−0.333)2, 样本 3,4,5,6同理都是 属于 R2的, 所以值是(0−0.333)2(0−0.333)2. 把这六个值加起来山鸢尾类型在特征1 的第二个特征值的损失值。这里算出来 (1-0.333)^2+ (1-0.333)^2 + (0-0.333)2+(0-0.333)2+(0-0.333)^2 +(0-0.333)^2 = 2.244189. 这里的损失值大于 特征一的第一个特征值的损失值,所以我们不取这个特征的特征值。
图 7 所有情况说明
这样我们可以遍历所有特征的所有特征值,找到让这个式子最小的特征以及其对应的特征值,一共有24种情况,4个特征*每个特征有6个特征值。在这里我们算出来让这个式子最小的特征花萼长度,特征值为5.1 cm。这个时候损失函数最小为 0.8。
于是我们的预测函数此时也可以得到:
f(x)=∑xϵR1y1∗I(xϵR1)+∑xϵR2y2∗I(xϵR2)f(x)=∑xϵR1y1∗I(xϵR1)+∑xϵR2y2∗I(xϵR2)
此处 R1 = {2},R2 = {1,3,4,5,6},y1 = 1,y2 = 0.2。训练完以后的最终式子为
f1(x)=∑xϵR11∗I(xϵR1)+∑xϵR20.2∗I(xϵR2)f1(x)=∑xϵR11∗I(xϵR1)+∑xϵR20.2∗I(xϵR2)
借由这个式子,我们得到对样本属于类别1 的预测值 f1(x)=1+0.2∗5=2f1(x)=1+0.2∗5=2。同理我们可以得到对样本属于类别2,3的预测值f2(x)f2(x),f3(x)f3(x).样本属于类别1的概率 即为
p1=exp(f1(x))/∑k=13exp(fk(x))
Xgboost
-
xgboost和gbdt的区别:
-
xgboost在训练过程中已经加入了正则化项
-
xgboost使用二阶导数
-
gbdt采用了cart基分类器,xgboost除了有cart之外还有线性(gbtree,gbliner)
-
xgboost支持对数据的采样,每轮迭代并不是使用全部的数据
-
对连续特征进行分桶/分位数的方法,实现了全局和局部近似分裂点的算法,降低了穷举分位点带来的计算速度的损失
-
xgboost比gbdt快的主要原因还是在于对每个特征分块进行排序,实现了计算速度的提升,其并行化体现在寻找最佳分裂点的时候可以并行化计算
-
-
xgboost如何处理缺失值:
简单来说,就是在遍历统计左右子树的时候,只会对非缺失值的样本进行统计,然后再把缺失值统一放到左子树/右子树,判断哪个子树带来的信息增益会比较大,就跑到哪边去
-
boosting模型是如何做特征重要性排序的
使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的提升决策树构建中价值。一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。
属性重要性是通过对数据集中的每个属性进行计算,并进行排序得到。在单个决策书中通过每个属性分裂点改进性能度量的量来计算属性重要性,由节点负责加权和记录次数。也就说一个属性对分裂点改进性能度量越大(越靠近根节点),权值越大;被越多提升树所选择,属性越重要。性能度量可以是选择分裂节点的Gini纯度,也可以是其他度量函数。
最终将一个属性在所有提升树中的结果进行加权求和后然后平均,得到重要性得分。
降维
降维是一种缓解高维情形下出现的数据样本系数,距离计算
条件随机场
HMM的两个独立性假设:
- 观测序列之间是独立的
- 当前状态仅依赖于先前的状态
HMM有三个问题,对应的有三种解决方式
- 概率计算问题:前向后向,已知模型 λ \lambda λ和 O O O,计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
- 学习问题:B-W算法,是EM算法的特例,已知 O O O,估计 λ \lambda λ
- 预测问题:已知 λ \lambda λ和 O O O,求解 a r g m a x i j P ( O , λ ∣ i ) argmax_{i_j}P(O,\lambda|i) argmaxijP(O,λ∣i),求解最有可能出现O的状态是哪个
HMM,CRF,MEMM
聚类
1.kmeans
kmeans有点像BGD一样,每次对整个样本更新
缺点:
- 受初值点和离群点的影响,每次结果不稳定,结果通常是局部最优解
- 无法很好的解决数据簇分布差别比较大的情况
2.LVQ
LVQ和kmeans的区别:LVQ可以认为是监督聚类方法,LVQ的类簇和类别标记数不一定相等,随机制定类簇个数k和类簇中心点 d l d_l dl并规定每个类簇属于哪个类别标记,可以有重复(比如说类簇1属于标记1,类簇2也属于标记1),判定计算所有样本到类簇中心点的距离,对于样本 x i x_i xi,如果最近类簇中心点 d l ( l = 1... k ) d_l(l=1...k) dl(l=1...k)的标记 y l y_l yl与样本本身的标记点 y k y_k yk相等,则 d ′ = d l + η ( x j − d l ) d'=d_l+\eta (x_j-d_l) d′=dl+η(xj−dl),否则 d ′ = d l − η ( x j − d l ) d'=d_l-\eta (x_j-d_l) d′=dl−η(xj−dl)
LVQ有点类似于Momentum的感觉一样,同样也是对于单个样本更新
3.GMM
高斯混合分布认为分布是由k个混合成分组成,每个混合成分是一个高斯分布,即概率密度函数
p
M
(
x
)
=
∑
i
=
1
k
α
i
⋅
p
(
x
∣
μ
i
,
Σ
i
)
p_{\mathcal{M}}(\boldsymbol{x})=\sum_{i=1}^{k} \alpha_{i} \cdot p\left(\boldsymbol{x} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)
pM(x)=i=1∑kαi⋅p(x∣μi,Σi)
其中
p
(
x
)
p(x)
p(x)为多元高斯分布,概率密度函数
p
(
x
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
e
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
p(\boldsymbol{x})=\frac{1}{(2 \pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}} e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})}
p(x)=(2π)2n∣Σ∣211e−21(x−μ)TΣ−1(x−μ)
E步:给定初始值
α
\alpha
α,
μ
\mu
μ,
Σ
\Sigma
Σ,计算
p
M
(
Z
∣
X
;
Θ
)
p_M(Z|X;\Theta)
pM(Z∣X;Θ)
γ
j
i
=
p
M
(
z
j
=
i
∣
x
j
;
θ
)
=
P
(
z
j
=
i
)
⋅
p
M
(
x
j
∣
z
j
=
i
)
p
M
(
x
j
)
=
α
⋅
p
(
x
j
∣
μ
,
Σ
)
∑
l
=
1
k
α
l
⋅
p
(
x
j
∣
μ
l
,
Σ
)
\gamma_{ji}=p_M(z_j=i|x_j;\theta)=\frac{P(z_j=i)\cdot p_M(x_j|z_j=i)}{p_M(x_j)}=\frac{\alpha\cdot p(x_j|\mu,\Sigma)}{\sum_{l=1}^k \alpha_l\cdot p(x_j|\mu_l,\Sigma)}
γji=pM(zj=i∣xj;θ)=pM(xj)P(zj=i)⋅pM(xj∣zj=i)=∑l=1kαl⋅p(xj∣μl,Σ)α⋅p(xj∣μ,Σ)
M步:给定上述参数,计算
a
r
g
m
a
x
L
L
(
D
)
=
ln
(
∏
j
=
1
m
p
M
(
x
j
)
)
=
∑
j
=
1
m
ln
(
∑
i
=
1
k
α
i
⋅
p
(
x
j
∣
μ
i
,
Σ
i
)
)
\begin{aligned} argmaxL L(D) &=\ln \left(\prod_{j=1}^{m} p_{\mathcal{M}}\left(\boldsymbol{x}_{j}\right)\right) \\ &=\sum_{j=1}^{m} \ln \left(\sum_{i=1}^{k} \alpha_{i} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)\right) \end{aligned}
argmaxLL(D)=ln(j=1∏mpM(xj))=j=1∑mln(i=1∑kαi⋅p(xj∣μi,Σi))
令
∂
L
L
(
D
)
∂
μ
i
=
0
\frac{\partial L L(D)}{\partial \mu_{i}}=0
∂μi∂LL(D)=0则有:
μ
i
=
∑
j
=
1
m
γ
j
i
x
j
∑
j
=
1
m
γ
j
i
\mu_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i} \boldsymbol{x}_{j}}{\sum_{j=1}^{m} \gamma_{j i}}
μi=∑j=1mγji∑j=1mγjixj
令 ∂ L L ( D ) ∂ Σ i = 0 \frac{\partial L L(D)}{\partial \mathbf{\Sigma}_{i}}=0 ∂Σi∂LL(D)=0则有: Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i \boldsymbol{\Sigma}_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i}\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)^{\mathrm{T}}}{\sum_{j=1}^{m} \gamma_{j i}} Σi=∑j=1mγji∑j=1mγji(xj−μi)(xj−μi)T
对于
α
\alpha
α,需要满足
Σ
α
=
1
\Sigma \alpha=1
Σα=1,则由lagrange不等式,有:
L
L
(
D
)
+
λ
(
∑
i
=
1
k
α
i
−
1
)
L L(D)+\lambda\left(\sum_{i=1}^{k} \alpha_{i}-1\right)
LL(D)+λ(i=1∑kαi−1)
得出:
α
i
=
1
m
∑
j
=
1
m
γ
j
i
\alpha_{i}=\frac{1}{m} \sum_{j=1}^{m} \gamma_{j i}
αi=m1∑j=1mγji
4.DBSCAN
几个概念名词:
ϵ \epsilon ϵ-邻域: N ϵ ( x j ) = { x i ∈ D ∣ dist ( x i , x j ) ⩽ ϵ } N_{\epsilon}\left(\boldsymbol{x}_{j}\right)=\left\{\boldsymbol{x}_{i} \in D | \operatorname{dist}\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) \leqslant \epsilon\right\} Nϵ(xj)={xi∈D∣dist(xi,xj)⩽ϵ}
给定邻域参数 ϵ \epsilon ϵ, M i n P t s MinPts MinPts,任取一个样本点,若 ∣ N ϵ ( x j ) ∣ ≥ M i n P t s |N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts ∣Nϵ(xj)∣≥MinPts,则这些全部归为一类,然后再找到类中所有 ∣ N ϵ ( x j ) ∣ ≥ M i n P t s |N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts ∣Nϵ(xj)∣≥MinPts的点,有点类似于二叉树的层序遍历的感觉,用队列实现。
优点:
- 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集
- 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
- 聚类结果没有偏倚,不受初始值的影响,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响
缺点:
- 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响
适用场景:数据集是稠密的,而且不凸的,DBSCAN比kmeans好上不少
DBSCAN的聚类结果
Kmeans的聚类结果