Linear classifiers——线性分类器

1.(Generalized) Linear classifiers——广义线性分类器

1.1 模型

        假如有两类数据,类别标签为y = 1和y = -1

Linear classifiers——线性分类器_第1张图片

        我们可以使用一个线性函数将其分类,二维形式

                                        

        通常x增加一个恒等于1的维度,可以将b合并进w,于是更一般的形式为

                                         

                

                x_{1}=1,w_{1}就相当于b

        输出分类标签

                                Linear classifiers——线性分类器_第2张图片

1.2 几何意义

        对于,其法向量为(w_{1},w_{2},w_{3}\cdots ,w_{n})=W,单位化\frac{W}{\left \| W \right \|}

对于平面上的一个数据点的向量来说,可以被分解为如下

                                            

        其中表示向量x在决策函数上的投影向量,γ表示x到决策边界的距离,那么就表示x垂直决策边界的向量

                                        Linear classifiers——线性分类器_第3张图片

        由点到面的距离公式可得,x到决策函数的距离

                        \gamma =\frac{h_{w}(x)}{||w||}

        变形得

                        h_{w}(x)=\gamma||w||

        决策函数的正负了反映数据点的类别,而且其大小也反映了数据点到决策边界距离

2.Fisher’s linear discriminant——Fisher’s 线性判别

1.Fisher’s 线性判别的原理

        Fisher’s 线性判别通过降维的方式进行两类别分离,将高纬度的数据在低纬度上进行投影。投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,也就是类内小,类间大”。

        例有两类数据“x”"o",二维的数据降维就是投影到一条直线上

Linear classifiers——线性分类器_第4张图片               Linear classifiers——线性分类器_第5张图片

        选取不同的投影轴,会产生不同的效果,很明显第一张图效果就比第二张图好,所以只需要找到一个满足需求的W向量就能实现分类任务。

2.Fisher’s 线性判别的推导

        假设投影到w向量上,同时限定|w|=1,拥有两个特征的数据点向量x投影到向量w上等于w^{\top }x(w相当于一个新的坐标轴,x通过投影在w轴上的获得的值)

证明:

x_{i}在w上的投影长度为y=|x_{i}|cos\theta

w^{\top }x_{i}=|w||x_{i}|cos\theta=z

         于是我们可以建立

                                                        

        通过1.可知,数据点会分布在w上的不同位置,通过设定一个阈值T_{0}完成分类

                                        Linear classifiers——线性分类器_第6张图片

        假设我们有两个类别C_{1}C_{2},分别有N_{1}N_{2}个数据

        可以计算出两类数据的均值,通过均值的差距来表现类间的差距

                 {m}_1=\frac{1}{N_1}\sum_{i=1}^{N_1}\mathbf{x}_i=\frac{1}{N_1}\sum_{i=1}^{N_1}w^{\top }{x}_i,

                 {m}_2=\frac{1}{N_2}\sum_{i=1}^{N_2}\mathbf{x}_i=\frac{1}{N_2}\sum_{i=1}^{N_2}w^{\top }{x}_i

        同样可以计算出两类数据的方差,通过方差来表现类内的差距

                s_1^2=\frac{1}{N_1}\sum_{i=1}^{N_1}(w^{T}x_{i}-{m_1})(w^{T}x_{i}-{m_1})^T

                s_2^2=\frac{1}{N_2}\sum_{i=1}^{N_2}(w^{T}x_{i}-{m_2})(w^{T}x_{i}-{m_2})^T

        根据类内小,类间大”的思想,我们可以建立如下目标函数

                J(\mathbf{w})=\frac{(m_1-m_2)^2}{s_1^2+s_2^2},与类间均值成正比,类内方差成反比

  \begin{aligned} ({m_{1}}-{m_{2}})^{2}& =(\frac1{N_1}\sum_{i=1}^{N_1}w^Tx_i-\frac1{N_2}\sum_{i=1}^{N_2}w^Tx_i)^2 \\ &=(w^T(\frac{1}{N_1}\sum_{i=1}^{N_1}x_i-\frac{1}{N_2}\sum_{i=1}^{N_2}x_i))^2 \\ &=(w^T(\overline{x_1}-\overline{x_2}))^2 \\ &=w^T(\overline{x_1}-\overline{x_2})(\overline{x_1}-\overline{x_2})^Tw \end{aligned}

        \begin{aligned} s_{1}^2+s_{2}^2& =\frac{1}{N_{1}}\sum_{i=1}^{N_{1}}(w^{T}x_{i}-{m_{1}})(w^{T}x_{i}-{m_{1}})^{T}+\frac{1}{N_{2}}\sum_{i=1}^{N_{2}}(w^{T}x_{i}-{m_{2}})(w^{T}x_{i}-{m_{2}})^{T} \\ &=\frac{1}{N_1}\sum_{i=1}^{N_1}(w^Tx_i-\frac{1}{N_1}\sum_{i=1}^{N_1}w^Tx_i)(w^Tx_i-\frac{1}{N_1}\sum_{i=1}^{N_1}w^Tx_i)^T+\frac{1}{N_2} \\ &\sum_{i=1}^{N_{2}}(w^{T}x_{i}-\frac{1}{N_{2}}\sum_{i=1}^{N_{2}}w^{T}x_{i})(w^{T}x_{i}-\frac{1}{N_{2}}\sum_{i=1}^{N_{2}}w^{T}x_{i})^{T} \\ &=w^T\frac1{N_1}\sum_{i=1}^{N_1}[(x_i-\overline{x_1})(x_i-\overline{x_1})^T]w+w^T\frac1{N_2}\sum_{i=1}^{N_2}[(x_i-\overline{x_2})(x_i-\overline{x_2})^T]w \\ &=w^Ts_{1}^2w+w^Ts_{2}^2w \\ &=w^{T}(s_{1}^2+s_{2}^2)w \end{aligned}

S_{B}=(m_{1}-m_{2})(m_{1}-m_{2})^T,表示类间协方差矩阵

S_{w}=s_{1}^2+s_{2}^2,表示类内协方差矩阵

        可以得到

                J(\mathbf{w})=\frac{\mathbf{w}^T\mathbf{S}_B\mathbf{w}}{\mathbf{w}^T\mathbf{S}_W\mathbf{w}}

        这个就是损失函数,目标是求最大值

       对w求偏导 有(这里需要用到矩阵求导)

        

           

        假设数据点有p维

Linear classifiers——线性分类器_第7张图片

最终我们可以得到

                                

                Linear classifiers——线性分类器_第8张图片

  • 求解速度快,不需要像SGD一样迭代,简单高效
  • 对于数据的特征维度不能太高<1000

3.Perceptron——感知机

3.1 感知机及其模型

        感知机是一个二分类线性模型

Linear classifiers——线性分类器_第9张图片

        对于每个输入数据x都会有一个对应的权重w,图中的○称为“神经元”或者“节点”。

        输入被送往神经元时,会被分别乘以固定的权重加上偏置项 (wx+b),神经元会计算传送过来的信号的总和,在经过一个非线性激活函数输出最终的值,在感知机中使用的是符号函数sign

                        

        如果用X表示特征向量,W表示权重向量(按照之前同样的方法把b并入W向量),最终该模型可以表示为

                                \mathbf{y}=\begin{cases}\mathbf{+1(W^{T}X>=0)}\\-1(W^{T}X<0)\end{cases}

        决策边界为y=W^{T}X,产生一个线性分割超平面

        Linear classifiers——线性分类器_第10张图片

3.2 损失函数

         我们很容易想到的一个损失函数的是误分类点的总数,但是这样损失函数与w无关,不是参数w和b的连续可导函数导函数导函数,无法得到w的值。

          于是,感知机采用误分类点到超平面的总距离,如下图              

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Linear classifiers——线性分类器_第11张图片

        单个样本到超平面的距离如下公式

        ​​​​​​​        ​​​​​​​         ​​​​​​​d=\frac{|W^{T}X|}{||W||}   ()

        对于每一个误分类样本来说,都有-y_{i}(W^{T}X_{i})>0成立,其中y_{i}为真实标签,下面给出证明:

  • y_{i}=1时,误分类样本W^{T}X_{i}<0,可以得到-y_{i}(W^{T}X_{i})>0,且此时有-y_{i}(W^{T}X_{i})=-(W^{T}X_{i})=|W^{T}X_{i}|
  • y_{i}=-1时,误分类样本W^{T}X_{i}>=0,可以得到-y_{i}(W^{T}X_{i})>0,且此时有-y_{i}(W^{T}X_{i})=(W^{T}X_{i})=|W^{T}X_{i}|

        于是误分类点到超平面的总距离可以表示为下式:
                -\frac{1}{||W||}\sum_{X_{i}\epsilon M}(y_{i}(W^{T}X_{i})),M表示误分类点集合

        此外,1/||w||用来归一化超平面法向量,得到几何间隔,也就是点到超平面的距离,但超平面只要能够将两类样本分类开即可,距离大小没关系,下图中两条决策边界都是正确的 

                                        Linear classifiers——线性分类器_第12张图片

        最终感知机损失函数为

                J(w)=-\sum_{X_{i}\epsilon M }y_{i}(W^{T}X_{i})

3.3 梯度下降

        对于感知机来说,极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个点使其梯度下降,因此感知机的优化器使用的是随机梯度下降(SGD)。

        当选取的点分类正确时,无需进行参数更新

        当选取的点分类错误时

                计算该点损失函数的梯度:

                ​​​​​​​        \frac{\delta J(w)}{\delta w}=-y_{i}X_{i}

                更新W

                        W^{t+1}=W^{t}+\eta y_{i}X_{i}

                同时可以看出,当一个误分类点的真实标签为1时即y_{i}=1时,W在原本基础上增加了一个X,当一个误分类点的真实标签为1时即y_{i}=-1时,W在原本基础上减少一个X,如下图

Linear classifiers——线性分类器_第13张图片

3.4 代码实现

        一个二维的感知机,决策边界为y=wx+b

# 训练参数
epochs = 100
η = 0.1
 
# 感知机
def perceptron(X, y, η, epochs):
    n_samples, n_features = X.shape
    # 初始化权重参数
    w = np.zeros(n_features)
    b = 0
    for epoch in range(epochs):
        for i in range(n_samples):
            # 预测值
            y_pred = 1 if (np.dot(X[i], w) + b) > 0 else -1            
            # 随机梯度下降法随机选择一个误分点进行参数更新
            if -y[i]*(np.dot(X[i], w) + b)>=0:
                w = w + η * X[i] * y[i]
                b = b + η * y[i]
                loss += 1
    return w, b
 
# 预测函数
def predict(X,w):
    y_pred = np.where(np.dot(X,w)+b>0,1,-1)
    return y_pred
 
w,b = perceptron(trainx,trainy,η,epochs)

4.Softmax regression

4.1 Softmax regression模型

        Softmax regression是逻辑回归的推广,是一个多类别分类器。分类类别需要转化为one-hot编码,如下图所示

Linear classifiers——线性分类器_第14张图片

奶牛的one-hot编码为(1,0,0)1和0表示属于某一类的概率

        对于每一个分类都有其对应W向量,输入特征向量X,假设K分类问题,输入X先经过线性回归得到K个z_{j}

                ​​​​​​​z_{j}=W_{j}^{T}X,j=1,2,……K,W=[w_{1}^{T},w_{2}^{T},w_{3}^{T}\cdots w_{K}^{T}]

        接着通过一个Softmax函数,这个函数会把输入都映射到[0,1]之间,就可以得到输入X对于K个分类各自的概率

                p(y=i|X)=\frac{e^{z_{i}}}{\sum_{j=1}^{K}e^{z_{j}}}(y=i,表示第i个类别)

        ​​​​​​​        ​​​​​​​Linear classifiers——线性分类器_第15张图片

        最终模型的预测

                argmax(\frac{e^{z_{i}}}{\sum_{j=1}^{K}e^{z_{j}}},i=1,2,\cdots K),取概率最大的类别

        附上一个四分类的计算例子

Linear classifiers——线性分类器_第16张图片

       由 p(y=i|X)=\frac{e^{z_{i}}}{\sum_{j=1}^{N}e^{z_{j}}}可以得出,所有分类概率之和恒等于1

4.2 交叉熵损失函数(cross-entropy)

        J(w)=-\sum_{i=1}^{N}\sum_{j=1}^{K}y_{ij}log(\sigma_{ij})

其中:

  • N是样本数量
  • K是类别数量
  • y_{ij} 是第i个样本中第j个类别的真实标签值
  • \sigma_{ij}是模型预测的第个样本中第j个类别的概率

        这个损失函数涉及两个求和符号。外层求和对应于所有的样本,内层求和对应于每个样本中各个类别的交叉熵损失

4.3 梯度下降

第j个分类的权重向量:

\frac{\partial J(w)}{w_{j}}=\sum_{i=1}^{N}(\sigma_{ij}-y_{ij})X_{i}

更新参数

W_{j}^{t+1}=W_{j}^{t}-\eta\sum_{i=1}^{N}(\sigma_{ij}-y_{ij})X_{i}

你可能感兴趣的:(机器学习与深度学习,机器学习,人工智能)