线性模型
1. 线性回归
线性回归采用最小二乘法作为代价函数,需要符合最小二乘法使用的基本假设,违背基本假设时,普通最小二乘法估计量不再是最小线性无偏估计量,但是还是无偏的
正规方程法中如果X T X X^TX X T X 不可逆,两种解决方案:删除数据中多余的特征(即特征之间存在相关性);删除部分特征数据使特征数小于样本数
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 ( θ ) = m 1 ∑ i = 1 m 2 1 ( 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 ) = s i g m o i d ( θ T X ) ,所得到的代价函数将是一个非凸函数,影响用梯度下降法求最小值,因此选用交叉熵损失函数
利用梯度下降法求解代价函数的推导公式
两种角度考虑逻辑回归的代价函数:
极大似然估计
多分类问题的逻辑回归
softmax的推导过程:
ln P ( Y i = 1 ) = β 1 X i − ln Z \ln P(Y_i=1)=\beta_1 X_i-\ln Z ln P ( Y i = 1 ) = β 1 X i − ln Z
ln P ( Y i = 2 ) = β 2 X i − ln Z \ln P(Y_i=2)=\beta_2 X_i-\ln Z ln P ( Y i = 2 ) = β 2 X i − ln Z
ln P ( Y i = 3 ) = β 3 X i − ln Z \ln P(Y_i=3)=\beta_3 X_i-\ln Z ln P ( Y i = 3 ) = β 3 X i − ln Z
ln P ( Y i = K ) = β K X i − ln Z \ln P(Y_i=K)=\beta_K X_i-\ln Z ln P ( Y i = K ) = β K X i − ln Z
这里的l n Z lnZ l n Z 为一个常数,能够保证Σ 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 ( Y i = k ) = Z 1 e β k X i
则有
Z = ∑ e β k X i Z=\sum e^{\beta_kX_i} Z = ∑ e β k X i
代入上式则有: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 ( Y i = c ) = ∑ k = 1 K e β k ⋅ X i e β c ⋅ x i
3. 正则化
为了避免过拟合,无论是逻辑回归还是线性模型都采用加入正则化项,当加入L 2 L_2 L 2 范数时,得到的线性模型成为岭回归,采用L 1 L_1 L 1 范数时得到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| a r g m i n ω ∑ i = 1 m ( y i − ω T x i ) 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 a r g m i n ω ∑ i = 1 m ( y i − ω T x i ) 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
a r g m i n ω i = 1 ∑ m ( y i − ω T x i ) 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 ) = 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
PLOY2有一个明显的问题,就是在实际场景中,大部分特征都是稀疏的,即大部分特征值为0
FM
因此,FM就是解决稀疏数据下的特征组合问题
对于每个特征i i i 来说,认为其有一个隐向量v i ( k ⋅ 1 ) v_{i(k\cdot 1)} v i ( k ⋅ 1 ) ,其中k为超参数,则PLOY2中的w i j = v i T ⋅ v j w_{ij}=v_i^T\cdot v_j w i j = v i T ⋅ v j ,则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 ) = w 0 + i = 1 ∑ n w i x i + i = 1 ∑ n j = i + 1 ∑ n ( v i ⋅ v j ) x i x j
注意:在强调一遍,这里面所涉及的特征,都是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} V N B C ⋅ V N i k e ,因为其他的都是0,只有x N B C ⋅ x N i k e = 1 x_{N B C} \cdot x_{N i k e}=1 x N B C ⋅ x N i k e = 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} V E P S N ⋅ V A d i d a s ,同理,因为只有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} V N B C , V E P S N , V A d i d a s , V N i k e ,然后在测试集上,FM参数只有V N B C ⋅ V A d i d a s V_{NBC} \cdot V_{Adidas} V N B C ⋅ V A d i d a s
则我们的任务就是,根据所有的训练集,求出所有特征的因变量v i v_i v i ,以及特征的系数w i w_i w i 和常数w 0 w_0 w 0 ,共kn+n+1个变量。紧接着将训练得到的参数用于测试集,计算y
计算复杂度分析:
直接来看FM的复杂度为O ( k n 2 ) O(kn^2) O ( k n 2 ) ,对FM的表达式进行优化,可将复杂度降至O ( k n ) O(kn) O ( k n )
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 ) = w 0 + ∑ i = 1 n w i x i 进行优化的,将FM应用于分类问题时,采用的依然是y = 1 1 + e x p ( − f ( x ) ) y=\frac{1}{1+exp(-f(x))} y = 1 + e x p ( − f ( x ) ) 1 ,把其中的f(x)换为FM的表达式就好
对于回归问题L o s s = ( y ^ ( x ) − y ) 2
Loss=(\hat{y}(\mathbf{x})-y)^2
L o s s = ( y ^ ( x ) − y ) 2
对于分类问题L o s s = log ( 1 + e − y y ^ ( x ) )
Loss=\log(1+e^{-y\hat{y}(\mathbf{x})})
L o s s = log ( 1 + e − y y ^ ( x ) ) FM的学习方法
将上述计算复杂度分析结果代入原来的FM表达式
除了采用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}
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
而事实上,与Advertiser类别特征相乘的V N B C V_{NBC} V N B C 和与Gender类别相乘的V N B C V_{NBC} V N B C 不一定是相等的,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 V N B C , A ⋅ w N i k e , P + A × G V N i k e , G ⋅ V M e n , A + P × G V N B C , G ⋅ V M e n , P
注意,FFM考虑的是隐向量在field之间的差异,field就是没有做onehot之前的特征,也就是说,V N B C , G V_{NBC,G} V N B C , G 无论是和V M e n , P V_{Men,P} V M e n , P 还是和V W o m e n , P V_{Women,P} V W o m e n , 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 ) = 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 ( 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}
E n t ( D ) = − k = 1 ∑ ∣ Y ∣ p k log 2 p k p k p_{k} p k :样本集合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)
G a i n ( D , a ) = E n t ( D ) − v = 1 ∑ V ∣ D ∣ ∣ D v ∣ E n t ( D v ) 特点 :
只能处理离散型变量
只能用于分类问题
特征在层级之间不复用,只用一次
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)}
G a i n _ r a t i o ( D , a ) = I V ( a ) G a i n ( 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|} I V ( a ) = − ∑ v = 1 V ∣ D ∣ ∣ D v ∣ log 2 ∣ D ∣ ∣ D v ∣
注意:由于信息增益率可能对数值较少的属性有偏好,因此C4.5并不是直接取a r g m a x G a i n _ r a t i o n argmax{Gain\_ration} a r g m a x G a i n _ r a t i o n ,而是先找到所有G a i n > a v g G a i n Gain>avgGain G a i n > a v g G a i n 的属性,再从中选取m a x G a i n _ r a t i o maxGain\_ratio m a x G a i n _ r a t i o
特点 :
可用于处理连续性和离散型变量,注:C4.5对于连续变量的处理和CART有点像,首先对连续进行排序,将连续变量划分为< = v k <=v_k < = v k 和> v k >v_k > v k 两部分,计算Gain_ratio,选取m a x ( G a i n _ r a t i o ) max(Gain\_ratio) m a x ( G a i n _ r a t i o ) 作为最优切分点
只能用于处理分类问题
特征在层级之间不复用,只用一次
CART
CART既可以用来做分类,还可以用来做回归
CART树的特点:1.永远是二叉树,当某个属性中的类别不止两个的时候,就划分为A和非A 2.可用于处理分类和回归问题 3.特征属性可在层级之间复用
分类模型
将ID3和C4.5中的Ent改为GiniGini ( 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}
G i n i ( D ) = k = 1 ∑ ∣ Y ∣ k ′ ̸ = k ∑ p k p k ′ = 1 − k = 1 ∑ ∣ Y ∣ p k 2
其中:
p k p_k p k :样本集合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)
G i n i _ i n d e x ( D , a ) = v = 1 ∑ V ∣ D ∣ ∣ D v ∣ G i n i ( D v )
取a r g m i n G i n i _ i n d e x argmin Gini\_index a r g m i n G i n i _ i n d e x
回归模型
在回归模型中,目标函数(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
G a i n = i ∈ I ∑ p i ⋅ G i n i i = 7 3 ⋅ ( 1 − ( ( 3 2 ) 2 + ( 3 1 ) 2 ) ) + 7 4 ⋅ ( 1 − ( ( 4 3 ) 2 + ( 4 1 ) 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
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 ⋅ 3 2 . 5 2 = 3 4 . 7 1
2.剪枝策略
无论是预剪枝还是后剪枝,所采用的计算精度的标准从来都不是针对于训练集,而是针对于验证集,因为本来剪枝策略就是为了防止过拟合,增加泛化能力而提出的
预剪枝
在生成决策树的时候提前停止树的增长,如果说当前节点的划分是否能够带来模型泛化能力的提升,如果可以就生长,不可以就生长,具体的叶节点属于哪一类,以少数服从多数决定,举例:
这是原来的一个未剪枝的二叉树
这是训练集
这是验证集
首先来看,根节点要不要生长:
如果不生长“脐部”,观察训练集:好瓜5,坏瓜5,我们认为全是好瓜\坏瓜,都可以,假设为好瓜,观察验证集,精度为3 7 \frac37 7 3
如果生长脐部,观察训练集,“脐部=凹陷”:好瓜3,坏瓜1,认为是好瓜;“脐部=稍凹”:好瓜2,坏瓜2,认为是好瓜\坏瓜,都可以,假设为好瓜;“脐部=平坦”,好瓜0,坏瓜2,认为坏瓜;则{4,5,8,11,12}分类正确,精度5 7 \frac57 7 5 ,则划分!
接着来看色泽要不要生长:
如果不生长,则跟根节点生长的精度是一样的,是5 7 \frac57 7 5
如果生长,则注意,此时只有色泽生长,其他还是不生长,则色泽=青绿 好瓜,色泽=乌黑 好瓜 色泽=浅白 坏瓜,则对于训练集来讲,划分正确的有{4,8,11,12},精度4 7 \frac47 7 4 ,不划分!
后剪枝
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}
G a i n ( D , a ) = ρ × G a i n ( D ~ , a ) = ρ × ( E n t ( D ~ ) − v = 1 ∑ V r ~ v E n t ( 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 ∈ D w x ∑ x ∈ D ~ w x ,举例如下:
对于色泽属性来说,除{1,5,13}空缺外剩下均有值,故ρ = 14 17 \rho=\frac{14}{17} ρ = 1 7 1 4 ,计算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 E n t ( D ~ ) = − ( 1 4 6 log 2 1 4 6 + 1 4 8 log 2 1 4 8 ) = 0 . 9 8 5 ,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 E n t ( D ~ 1 ) = − ( 4 2 log 2 4 2 + 4 2 log 2 4 2 ) = 1 . 0 0 0 ,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 E n t ( D ~ 2 ) = − ( 6 4 log 2 6 4 + 6 2 log 2 6 2 ) = 0 . 9 1 8 ,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 E n t ( D ~ 3 ) = − ( 4 0 log 2 4 0 + 4 4 log 2 4 4 ) = 0 . 0 0 0 ;
故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}
G a i n ( D ~ , 色 泽 ) = E n t ( D ~ ) − v = 1 ∑ 3 r ~ v E n t ( D ~ v ) = 0 . 9 8 5 − ( 1 4 4 × 1 . 0 0 0 + 1 4 6 × 0 . 9 1 8 + 1 4 4 × 0 . 0 0 0 ) = 0 . 3 0 6
Gain ( D , 色 泽 ) = ρ Gain ( D ~ , 色 泽 ) = 0.252
\operatorname{Gain}({D}, 色泽)=\rho\operatorname{Gain}(\tilde{D}, 色泽)=0.252
G a i n ( D , 色 泽 ) = ρ G a i n ( D ~ , 色 泽 ) = 0 . 2 5 2
在根节点已经确定的情况下,第二个根节点,确定方式跟第一个一样,但是对于缺失值,并不像第一个一样直接舍去,而是以一定的权重加入到后续分析中去,如下例所示,我们已知第一个根节点为{纹理},判断纹理=稍糊中第二个根节点的计算策略
4.总结
优点:1.直观 2.不需要做预处理,不需要做缺失值处理 3.预测的时间复杂度为O ( l o g m ) O(logm) O ( l o g m ) 4.对异常点的容错能力好
缺点:1.决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进;2.寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优;3.如果某些特征的样本比例过大,生成决策树容易偏向于这些特征,可以通过调节样本权重改善
支持向量机
支持向量机和逻辑回归不同的是:支持向量机只输出类别,不输出概率
1.线性可分SVM
2.线性SVM
当欠拟合时,需要增加惩罚系数Cmin 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 , b min 2 1 ∥ w ∥ 2 + C i = 1 ∑ m ℓ 0 / 1 ( y i ( w T x i + 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 = y f ( 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 , ξ i min 2 1 ∥ w ∥ 2 + C i = 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}
y i ( w T x i + 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损失,有一块平坦的零区域,所以更容易获得稀疏解
贝叶斯理论
集成学习
xgboost和gbdt的区别:
xgboost在训练过程中已经加入了正则化项
xgboost使用二阶导数
gbdt采用了cart基分类器,xgboost除了有cart之外还有线性(gbtree,gbliner)
xgboost支持对数据的采样,每轮迭代并不是使用全部的数据
梯度提升树
GBDT
bagging和boosting
boosting
Adaboost
GBDT
Xgboost,LightGBM,GBDT
xgboost和gbdt的区别:
xgboost在训练过程中已经加入了正则化项
xgboost使用二阶导数
gbdt采用了cart基分类器,xgboost除了有cart之外还有线性(gbtree,gbliner)
xgboost支持对数据的采样,每轮迭代并不是使用全部的数据
bagging
RandomForest
降维
降维是一种缓解高维情形下出现的数据样本系数,距离计算
条件随机场
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) a r g m a x i j P ( O , λ ∣ i ) ,求解最有可能出现O的状态是哪个
HMM,CRF,MEMM
聚类
1.kmeans
kmeans有点像BGD一样,每次对整个样本更新
缺点:
受初值点和离群点的影响,每次结果不稳定,结果通常是局部最优解
无法很好的解决数据簇分布差别比较大的情况
2.LVQ
LVQ和kmeans的区别:LVQ可以认为是监督聚类方法,LVQ的类簇和类别标记数不一定相等,随机制定类簇个数k和类簇中心点d l d_l d l 并规定每个类簇属于哪个类别标记,可以有重复(比如说类簇1属于标记1,类簇2也属于标记1),判定计算所有样本到类簇中心点的距离,对于样本x i x_i x i ,如果最近类簇中心点d l ( l = 1... k ) d_l(l=1...k) d l ( l = 1 . . . k ) 的标记y l y_l y l 与样本本身的标记点y k y_k y k 相等,则d ′ = d l + η ( x j − d l ) d'=d_l+\eta (x_j-d_l) d ′ = d l + η ( x j − d l ) ,否则d ′ = d l − η ( x j − d l ) d'=d_l-\eta (x_j-d_l) d ′ = d l − η ( x j − d l )
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)
p M ( 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 π ) 2 n ∣ Σ ∣ 2 1 1 e − 2 1 ( x − μ ) T Σ − 1 ( x − μ )
E步:给定初始值α \alpha α ,μ \mu μ ,Σ \Sigma Σ ,计算p M ( Z ∣ X ; Θ ) p_M(Z|X;\Theta) p M ( 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)}
γ j i = p M ( z j = i ∣ x j ; θ ) = p M ( x j ) P ( z j = i ) ⋅ p M ( x j ∣ z j = i ) = ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ ) α ⋅ p ( x j ∣ μ , Σ )
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}
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 ) )
令∂ L L ( D ) ∂ μ i = 0 \frac{\partial L L(D)}{\partial \mu_{i}}=0 ∂ μ i ∂ L L ( 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 = 1 m γ j i ∑ j = 1 m γ j i x j
令∂ L L ( D ) ∂ Σ i = 0 \frac{\partial L L(D)}{\partial \mathbf{\Sigma}_{i}}=0 ∂ Σ i ∂ L L ( 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 = 1 m γ j i ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ 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)
L L ( 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 = m 1 ∑ j = 1 m γ j i
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 ϵ ( x j ) = { x i ∈ D ∣ d i s t ( x i , x j ) ⩽ ϵ }
给定邻域参数ϵ \epsilon ϵ ,M i n P t s MinPts M i n P t s ,任取一个样本点,若∣ N ϵ ( x j ) ∣ ≥ M i n P t s |N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts ∣ N ϵ ( x j ) ∣ ≥ M i n P t s ,则这些全部归为一类,然后再找到类中所有∣ N ϵ ( x j ) ∣ ≥ M i n P t s |N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts ∣ N ϵ ( x j ) ∣ ≥ M i n P t s 的点,有点类似于二叉树的层序遍历的感觉,用队列实现。
优点:
可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集
可以在聚类的同时发现异常点,对数据集中的异常点不敏感
聚类结果没有偏倚,不受初始值的影响,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响
缺点:
调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响
适用场景:数据集是稠密的,而且不凸的,DBSCAN比kmeans好上不少
DBSCAN的聚类结果
Kmeans的聚类结果