线性模型

1. 线性回归

  1. 线性回归采用最小二乘法作为代价函数,需要符合最小二乘法使用的基本假设,违背基本假设时,普通最小二乘法估计量不再是最小线性无偏估计量,但是还是无偏的
  2. 正规方程法中如果XTXX^TX不可逆,两种解决方案:删除数据中多余的特征(即特征之间存在相关性);删除部分特征数据使特征数小于样本数

2.逻辑回归

  1. 当逻辑回归仍采用线性回归的代价函数时,即仍用MSE表征,定义为J(θ)=1mi=1m12(hθ(x(i)y(i))2J(\theta)=\frac{1}{m}\sum_{i=1}^m\frac12(h_\theta(x^{(i)}-y^{(i)})^2,其中hθ(x)=sigmoid(θTX)h_\theta(x)=sigmoid(\theta^TX),所得到的代价函数将是一个非凸函数,影响用梯度下降法求最小值,因此选用交叉熵损失函数

  2. 利用梯度下降法求解代价函数的推导公式机器学习常见算法汇总

  3. 两种角度考虑逻辑回归的代价函数:

    1. 极大似然估计机器学习常见算法汇总
    2. 机器学习常见算法汇总
  4. 多分类问题的逻辑回归

    softmax的推导过程:

    lnP(Yi=1)=β1XilnZ\ln P(Y_i=1)=\beta_1 X_i-\ln Z

    lnP(Yi=2)=β2XilnZ\ln P(Y_i=2)=\beta_2 X_i-\ln Z

    lnP(Yi=3)=β3XilnZ\ln P(Y_i=3)=\beta_3 X_i-\ln Z

    lnP(Yi=K)=βKXilnZ\ln P(Y_i=K)=\beta_K X_i-\ln Z

    这里的lnZlnZ为一个常数,能够保证ΣP(i)=1\Sigma P(i)=1,将两边指数化,可得

    P(Yi=k)=1ZeβkXiP(Y_i=k)=\frac1Ze^{\beta_kX_i}

    则有

    Z=eβkXiZ=\sum e^{\beta_kX_i}

    代入上式则有:
    P(Yi=c)=eβcxik=1KeβkXi \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}}}

3. 正则化

为了避免过拟合,无论是逻辑回归还是线性模型都采用加入正则化项,当加入L2L_2范数时,得到的线性模型成为岭回归,采用L1L_1范数时得到LASSO回归,无论是L1范数还是L2范数,都将有助于降低过拟合的风险,但同时,L1范数更容易获得稀疏解(即求得的参数中有更少的非零分量)可用于进行特征选择

为什么L1更容易获得稀疏解,如上图所示,假设输入变量为只有两个,即在y=ωx+by=\omega x+bω\omega只有两个,我们写出对应的Lasso回归和岭回归的表达式:

LASSO:

argminωi=1m(yiωTxi)2+λωargmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2+\lambda|\omega|

Ridge:

argminωi=1m(yiωTxi)2+λω2argmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2+\lambda\omega^2

由Lagrange乘数法,对于Lasso,即为求下面的条件极值:
argminωi=1m(yiωTxi)2 argmin_\omega \sum_{i=1}^m(y_i-\omega^Tx_i)^2
s.t.ω<=Cs.t. ||\omega||<=C

对于Ridge同理,于是我们将ω<=C,ω2<=C||\omega||<=C,\omega^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)=w0+i=1nwixi+j1=1nj2=j1+1nwh(j1,j2)xj1xj2 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}}
PLOY2有一个明显的问题,就是在实际场景中,大部分特征都是稀疏的,即大部分特征值为0

FM

因此,FM就是解决稀疏数据下的特征组合问题

对于每个特征ii来说,认为其有一个隐向量vi(k1)v_{i(k\cdot 1)},其中k为超参数,则PLOY2中的wij=viTvjw_{ij}=v_i^T\cdot v_j,则FM的表达式为
y^(x)=w0+i=1nwixi+i=1nj=i+1n(vivj)xixj \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}
注意:在强调一遍,这里面所涉及的特征,都是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参数变为VNBCVNikeV_{N B C} \cdot V_{N i k e},因为其他的都是0,只有xNBCxNike=1x_{N B C} \cdot x_{N i k e}=1,对于第二个训练样本,FM参数变为VEPSNVAdidasV_{E P S N} \cdot V_{A d i d a s},同理,因为只有ESPN和Adidas相乘不为0,根据训练集,上述训练集,我们训练得到VNBC,VEPSN,VAdidas,VNikeV_{N B C} ,V_{E P S N},V_{A d i d a s},V_{N i k e},然后在测试集上,FM参数只有VNBCVAdidasV_{NBC} \cdot V_{Adidas}

则我们的任务就是,根据所有的训练集,求出所有特征的因变量viv_i,以及特征的系数wiw_i和常数w0w_0,共kn+n+1个变量。紧接着将训练得到的参数用于测试集,计算y

计算复杂度分析:

直接来看FM的复杂度为O(kn2)O(kn^2),对FM的表达式进行优化,可将复杂度降至O(kn)O(kn)

机器学习常见算法汇总

FM的性能度量方法

注意,FM只是针对于原来的f(x)=w0+i=1nwixif(x)=w_0+\sum_{i=1}^n w_ix_i进行优化的,将FM应用于分类问题时,采用的依然是y=11+exp(f(x))y=\frac{1}{1+exp(-f(x))},把其中的f(x)换为FM的表达式就好

对于回归问题
Loss=(y^(x)y)2 Loss=(\hat{y}(\mathbf{x})-y)^2
对于分类问题
Loss=log(1+eyy^(x)) Loss=\log(1+e^{-y\hat{y}(\mathbf{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所考虑的隐向量为:
VNBCVNike+VNikeVMen+VNBCVMen V_{N B C} \cdot V_{N i k e}+V_{Nike} \cdot V_{Men}+V_{N B C} \cdot V_{Men}
而事实上,与Advertiser类别特征相乘的VNBCV_{NBC}和与Gender类别相乘的VNBCV_{NBC}不一定是相等的,FFM考虑了这种与不同类型(Field)特征组合的隐变量不相等问题

FFM所考虑的隐向量为:
VNBC,AwNike,PP×A+VNike,GVMen,AA×G+VNBC,GVMen,PP×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}
注意,FFM考虑的是隐向量在field之间的差异,field就是没有做onehot之前的特征,也就是说,VNBC,GV_{NBC,G}无论是和VMen,PV_{Men,P}还是和VWomen,PV_{Women,P}相乘都取的是一个值。

FFM的表达式为
(3-1)y(x)=w0+i=1dwixi+i=1nj=i+1n(wi,fjwj,fi)xixj 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}
变量的个数:1+n+kn(d-1),n代表onehot后特征的个数,d代表onehot前特征的个数

决策树

1.常用的几种树模型

  1. ID3

    采用信息增益来划分:
    Ent(D)=k=1Ypklog2pk \operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y |}} p_{k} \log _{2} p_{k}
    pkp_{k}:样本集合D中第k类样本所占的比例
    Gain(D,a)=Ent(D)v=1VDvDEnt(Dv) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)
    特点:

    1. 只能处理离散型变量
    2. 只能用于分类问题
    3. 特征在层级之间不复用,只用一次

    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)
    
  2. C4.5

    ID3中的信息增益对分类较多的属性有所偏好,C4.5用增益率代替信息增益,缓解这种现象
    Gain_ratio(D,a)=Gain(D,a)IV(a) Gain\_ratio(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}
    其中:

    IV(a)=v=1VDvDlog2DvD\mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}

    注意:由于信息增益率可能对数值较少的属性有偏好,因此C4.5并不是直接取argmaxGain_rationargmax{Gain\_ration},而是先找到所有Gain>avgGainGain>avgGain的属性,再从中选取maxGain_ratiomaxGain\_ratio

    特点:

    1. 可用于处理连续性和离散型变量,注:C4.5对于连续变量的处理和CART有点像,首先对连续进行排序,将连续变量划分为<=vk<=v_k>vk>v_k两部分,计算Gain_ratio,选取max(Gain_ratio)max(Gain\_ratio)作为最优切分点
    2. 只能用于处理分类问题
    3. 特征在层级之间不复用,只用一次
  3. CART

    CART既可以用来做分类,还可以用来做回归

    CART树的特点:1.永远是二叉树,当某个属性中的类别不止两个的时候,就划分为A和非A 2.可用于处理分类和回归问题 3.特征属性可在层级之间复用

    分类模型

    将ID3和C4.5中的Ent改为Gini
    Gini(D)=k=1Ykkpkpk=1k=1Ypk2 \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}
    其中:

    pkp_k:样本集合D中第k类样本所占的比例

    Gini(D)反应了从数据集D中抽取两个样本,其属于不同分类的概率
    Gini_index(D,a)=v=1VDvDGini(Dv) Gini\_index(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)
    argminGini_indexargmin Gini\_index

    回归模型

    在回归模型中,目标函数(Gain)是利用CART所得的所有分类,使得她们的方差最小

    机器学习常见算法汇总

    举例,当上图用于预测是否已婚时(分类)
    Gain=iIpiGinii=37(1((23)2+(13)2))+47(1((34)2+(14)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=iIσi=122+182+2123172+262+472+362+292432.52=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

2.剪枝策略

无论是预剪枝还是后剪枝,所采用的计算精度的标准从来都不是针对于训练集,而是针对于验证集,因为本来剪枝策略就是为了防止过拟合,增加泛化能力而提出的

  1. 预剪枝

    在生成决策树的时候提前停止树的增长,如果说当前节点的划分是否能够带来模型泛化能力的提升,如果可以就生长,不可以就生长,具体的叶节点属于哪一类,以少数服从多数决定,举例:

    这是原来的一个未剪枝的二叉树

    机器学习常见算法汇总

    这是训练集

    机器学习常见算法汇总

    这是验证集

    机器学习常见算法汇总

    首先来看,根节点要不要生长:

    如果不生长“脐部”,观察训练集:好瓜5,坏瓜5,我们认为全是好瓜\坏瓜,都可以,假设为好瓜,观察验证集,精度为37\frac37

    如果生长脐部,观察训练集,“脐部=凹陷”:好瓜3,坏瓜1,认为是好瓜;“脐部=稍凹”:好瓜2,坏瓜2,认为是好瓜\坏瓜,都可以,假设为好瓜;“脐部=平坦”,好瓜0,坏瓜2,认为坏瓜;则{4,5,8,11,12}分类正确,精度57\frac57,则划分!

    接着来看色泽要不要生长:

    如果不生长,则跟根节点生长的精度是一样的,是57\frac57

    如果生长,则注意,此时只有色泽生长,其他还是不生长,则色泽=青绿 好瓜,色泽=乌黑 好瓜 色泽=浅白 坏瓜,则对于训练集来讲,划分正确的有{4,8,11,12},精度47\frac47,不划分!

    机器学习常见算法汇总

  2. 后剪枝

3. 缺失值的处理

当出现缺失值时,首先计算各个特征属性的饱和度ρ\rho,再计算特征中有值的Gain,最后乘ρ\rho
Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(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}​
其中:ρ=xD~wxxDwx\rho=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}},举例如下:

机器学习常见算法汇总

对于色泽属性来说,除{1,5,13}空缺外剩下均有值,故ρ=1417\rho=\frac{14}{17},计算Ent(D~)=(614log2614+814log2814)=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~1)=(24log224+24log224)=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~2)=(46log246+26log226)=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~3)=(04log204+44log244)=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;


Gain(D~,)=Ent(D~)v=13r~vEnt(D~v)=0.985(414×1.000+614×0.918+414×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,)=ρGain(D~,)=0.252 \operatorname{Gain}({D}, 色泽)=\rho\operatorname{Gain}(\tilde{D}, 色泽)=0.252

在根节点已经确定的情况下,第二个根节点,确定方式跟第一个一样,但是对于缺失值,并不像第一个一样直接舍去,而是以一定的权重加入到后续分析中去,如下例所示,我们已知第一个根节点为{纹理},判断纹理=稍糊中第二个根节点的计算策略

4.总结

优点:1.直观 2.不需要做预处理,不需要做缺失值处理 3.预测的时间复杂度为O(logm)O(logm) 4.对异常点的容错能力好

缺点:1.决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进;2.寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优;3.如果某些特征的样本比例过大,生成决策树容易偏向于这些特征,可以通过调节样本权重改善

支持向量机

支持向量机和逻辑回归不同的是:支持向量机只输出类别,不输出概率

1.线性可分SVM

2.线性SVM

当欠拟合时,需要增加惩罚系数C
minw,b12w2+Ci=1m0/1(yi(wTxi+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)
s.t.
0/1(z)={1, if z<00, otherwise  \ell_{0 / 1}(z)=\left\{\begin{array}{ll}{1,} & {\text { if } z<0} \\ {0,} & {\text { otherwise }}\end{array}\right.
然而,由于0-1非凸,所以常用hinge来替代0-1函数,hinge(z)=max(0,1z)\ell_{\text {hinge}}(z)=\max (0,1-z),若采用hinge损失,z=yf(x)z=yf(x)上式变为
minw,b,ξi12w2+Ci=1mξi \min _{\boldsymbol{w}, b, \xi_{i}} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i}
s.t.
yi(wTxi+b)1ξiξi0,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}
这就是SVM软间隔最大化

C=+C=+\infty,迫使所有的都必须满足硬间隔,此时与1相等,C越大,对于软间隔的容忍度越低,结构就越复杂

3.非线性可分SVM

正定核的充要条件,对于任意D,核矩阵K是半正定的

4. Hinge损失函数与结构风险最小化

接着2继续讲,如果将其换为logistic损失函数log(1+exp(z))\log(1+\exp(-z))(此时是-1,1的情况),此时变成了logistic回归

总结一下SVM与logistic回归

  1. 两者损失函数不同,一个是交叉熵,另一个是hinge
  2. logistic可以输出概率,SVM只能分类
  3. 处理多分类问题上,SVM有OvR或类似于二叉树的感觉一样,logistic有softmax
  4. SVM由于采用hinge损失,有一块平坦的零区域,所以更容易获得稀疏解

贝叶斯理论

集成学习

  1. xgboost和gbdt的区别:

    1. xgboost在训练过程中已经加入了正则化项
    2. xgboost使用二阶导数
    3. gbdt采用了cart基分类器,xgboost除了有cart之外还有线性(gbtree,gbliner)
    4. xgboost支持对数据的采样,每轮迭代并不是使用全部的数据
  2. 梯度提升树

    GBDT

bagging和boosting

boosting

Adaboost

GBDT

Xgboost,LightGBM,GBDT

xgboost和gbdt的区别:

  1. xgboost在训练过程中已经加入了正则化项
  2. xgboost使用二阶导数
  3. gbdt采用了cart基分类器,xgboost除了有cart之外还有线性(gbtree,gbliner)
  4. xgboost支持对数据的采样,每轮迭代并不是使用全部的数据

bagging

RandomForest

降维

降维是一种缓解高维情形下出现的数据样本系数,距离计算

条件随机场

HMM的两个独立性假设:

  1. 观测序列之间是独立的
  2. 当前状态仅依赖于先前的状态

HMM有三个问题,对应的有三种解决方式

  1. 概率计算问题:前向后向,已知模型λ\lambdaOO,计算P(Oλ)P(O|\lambda)
  2. 学习问题:B-W算法,是EM算法的特例,已知OO,估计λ\lambda
  3. 预测问题:已知λ\lambdaOO,求解argmaxijP(O,λi)argmax_{i_j}P(O,\lambda|i),求解最有可能出现O的状态是哪个

HMM,CRF,MEMM

聚类

1.kmeans

kmeans有点像BGD一样,每次对整个样本更新

缺点:

  1. 受初值点和离群点的影响,每次结果不稳定,结果通常是局部最优解
  2. 无法很好的解决数据簇分布差别比较大的情况

2.LVQ

LVQ和kmeans的区别:LVQ可以认为是监督聚类方法,LVQ的类簇和类别标记数不一定相等,随机制定类簇个数k和类簇中心点dld_l并规定每个类簇属于哪个类别标记,可以有重复(比如说类簇1属于标记1,类簇2也属于标记1),判定计算所有样本到类簇中心点的距离,对于样本xix_i,如果最近类簇中心点dl(l=1...k)d_l(l=1...k)的标记yly_l与样本本身的标记点yky_k相等,则d=dl+η(xjdl)d'=d_l+\eta (x_j-d_l),否则d=dlη(xjdl)d'=d_l-\eta (x_j-d_l)

LVQ有点类似于Momentum的感觉一样,同样也是对于单个样本更新

3.GMM

高斯混合分布认为分布是由k个混合成分组成,每个混合成分是一个高斯分布,即概率密度函数
pM(x)=i=1kαip(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(x)p(x)为多元高斯分布,概率密度函数p(x)=1(2π)n2Σ12e12(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})}

E步:给定初始值α\alpha,μ\mu,Σ\Sigma,计算pM(ZX;Θ)p_M(Z|X;\Theta)
γji=pM(zj=ixj;θ)=P(zj=i)pM(xjzj=i)pM(xj)=αp(xjμ,Σ)l=1kαlp(xjμ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)}
M步:给定上述参数,计算
argmaxLL(D)=ln(j=1mpM(xj))=j=1mln(i=1kαip(xjμ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}
LL(D)μi=0\frac{\partial L L(D)}{\partial \mu_{i}}=0则有:μi=j=1mγjixjj=1mγji\mu_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i} \boldsymbol{x}_{j}}{\sum_{j=1}^{m} \gamma_{j i}}

LL(D)Σi=0\frac{\partial L L(D)}{\partial \mathbf{\Sigma}_{i}}=0则有:Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji\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}}

对于α\alpha,需要满足Σα=1\Sigma \alpha=1,则由lagrange不等式,有:
LL(D)+λ(i=1kαi1) L L(D)+\lambda\left(\sum_{i=1}^{k} \alpha_{i}-1\right)
得出:αi=1mj=1mγji\alpha_{i}=\frac{1}{m} \sum_{j=1}^{m} \gamma_{j i}

4.DBSCAN

几个概念名词:

ϵ\epsilon-邻域:Nϵ(xj)={xiDdist(xi,xj)ϵ}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\}

给定邻域参数ϵ\epsilon,MinPtsMinPts,任取一个样本点,若Nϵ(xj)MinPts|N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts,则这些全部归为一类,然后再找到类中所有Nϵ(xj)MinPts|N_{\epsilon}\left(\boldsymbol{x}_{j}\right)|\geq MinPts的点,有点类似于二叉树的层序遍历的感觉,用队列实现。

优点:

  1. 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集
  2. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
  3. 聚类结果没有偏倚,不受初始值的影响,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响

缺点:

  1. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响

适用场景:数据集是稠密的,而且不凸的,DBSCAN比kmeans好上不少

DBSCAN的聚类结果

机器学习常见算法汇总
Kmeans的聚类结果

机器学习常见算法汇总

相关文章: