Regression

Linear regression(线性回归)

问题的导入:预测神奇宝贝进化后的战斗力(CP)值

  • 输入:进化前神奇宝贝A的CP值,种类,血量(HP),重量(Weight),高度(Height)

  • 输出:进化后神奇宝贝A的CP值

    1

机器学习的主要步骤:

step 1:Model(确定模型)

step 2:Goodless of function(确定损失函数)

step 3:Best function(找到最好的函数)

$\S $Model

在这里,根据常理推测,神奇宝贝进化后的CP值和进化前的CP值有较大的关系,故我们可以假设进化前的CP值与进化后的CP值呈线性关系。

设神奇宝贝进化前的CP值为$x_{cp}$,进化后的CP值为$y$,则可建立以下线性关系:

在这里我们仅考虑了神奇宝贝进化前的CP值这一特征,如果神奇宝贝影响进化后的CP值的不止这一特征,若有n个特征,那么我们可将$x_{cp}$推广到$x_i$,于是便可得到Linear model(线性模型):

在这个模型里,一般而言,我们会有training data,假设现在我们有10组训练数据,即:

对于以上数据来说,它们是已知的,其上标代表了它们的序号,而现在,我们可以将以上数据带入简化模型(式1)中,可得:

对于式4,即就是我们训练数据带入模型后所得,而其只有两个未知数,即$b,w$,而现在我们需要做的就是找到最适合的$b,w$参数值。现在就需要损失函数发挥作用了。

$\S $Goodless of function

  • 损失函数的作用

    这里要注意评价函数的输入,即为函数$f$,而其输出是它的好坏,但由上式可知,式(4)其未知量只有待求参数$b,w$,那么函数评价函数$L(f)$即为:

    那么现在,对于输出所评价函数的好坏即可转化为评价参数$w,b$的好坏。

  • 常见的损失函数

    现在我们已有真实数据,那么如何反映其参数的好坏呢,我们可以通过真实的CP值与预测CP值的差进行衡量,如下所示:

    当真实值与误差值较小时,那么此时的$w,b$可认为是最好的,则我们的目标即为:

    于是我们现在就需要对其进行求解。

$\S $Best function ——-Gradient Descent(梯度下降法)

我们需要通过$Loss\ Function\Longrightarrow”the \ best\ function”$,即达到我们的目标,令:

对于以上,我们可以采用穷举法,求得$L(w,b)$的最小值,但下面介绍更加高效的算法。

  • 梯度下降法

    若现在损失函数$L(w,b)$只考虑其$w$单变量情况,有以下函数图像:

    2

    当我们现在随机在函数上选择一点$w^0$,

    1.如果函数在该点的斜率为负,即导数$\frac{\mathrm{d}L}{\mathrm{d}w}<0$,那么此时函数应该为递减的,于是可以考虑增大$w^0$。

    2.如果函数在该点的斜率为正,即导数$\frac{\mathrm{d}L}{\mathrm{d}w}>0$,那么此时函数应该为递增的,于是可以考虑减少$w^0$。

    增大多少或减少多少?

    定义每次移动的步长为:

    在式(8)中,$\eta$称为”learning rate(学习率)”,我们可以通过控制$\eta$的大小,从而增加step,以此可以提高求解效率,但若$\eta$过大,则会导致步长过大,那么有可能会错过最优解,故我们需要选取合适的$\eta$。而$\frac{\mathrm{d}L}{\mathrm{d}w}|w=w^0$,其微分值越大$\rightarrow$曲线越陡峭$\rightarrow$移动步长越大$\rightarrow$提高求解效率。

    以上图为例,其算法如下:

    在上式中,因为$\frac{\mathrm{d}L}{\mathrm{d}w}|w=w^{0}<0$,故需给其添加负号。对点不断更新循环,直到$(\frac{\mathrm{d}L}{\mathrm{d}w}|w=w^{t})=0$停止,此时$w=w^t$即所求参数的最优解。

    但从上图我们可以发现$w^t$其实并不为global optimal solution(全局最优解),其为local optimal solution(局部最优解),不过由于我们研究的为线性回归,所以不存在局部最优解。故在线性回归中,梯度下降法是有效的。

    现在,我们可以将单变量$w$推广到多变量$w,b$,函数如下图所示:

    3

    随机选取点$(w^0,b^0)$,计算函数在该点的偏导$\frac{\partial L}{\partial w}|w=w^0,b=b^0,\frac{\partial L}{\partial b}|w=w^0,b=b^0$。

    那么函数在该点的梯度即为:

    其中$\nabla$为向量微分算子。

    而对于梯度向量,其方向为曲线在等值线上的法线方向(高数中有对其的证明),其通过不断的增加步长以更新点,从而达到最优解,如上图所示。

    与单变量相同,多变量算法与其相同:

    最后直到$\nabla L(w^t,b^t)=0$停止,此时$w^t,b^t$即为所求得的最优解,由于在线性回归中,所以不同担心会由于初始值的选取,而影响达到全局最优解。

$\S $Result

如果现在通过十组训练数据,得到的结果如下图所示:

4

如图所示,其通过梯度下降法,所求得的最优参数$b,w$分别为-188.4,2.7,其中,损失值可用$\frac{1}{10}\sum_{n=1}^{10}\mathrm{e}^n$表示,$e^n$即为第n组真实值与预测值的差值。

现在将model改用不同函数,观察其结果变化情况,如下图所示:

5

6

7

8

可以发现,随着Model改用函数的阶数的升高,训练集损失值越来越小,但可以发现测试集损失值却并不是越来越少,相反,当阶数大于4后,其测试集损失值增大较多,而这种现象叫做”Overfitting”(过拟合)。

那么我们如何才能防止过拟合的发生呢?

  • Regularization(正则化)

    由于过拟合是model过度拟合其在训练集的数据,则其会造成曲线波动较大,而如果能让曲线变得smooth平滑,便可防止过拟合。

    于是考虑,增加一个与参数$w$(斜率)相关的值,如果loss function 越小的话,那么对应这个值也会越小,即$w$也会越小,于是便会使函数更加平滑。

    于是可在线性回归模型中,将loss function变为:

    而在式(10)中,$\lambda\sum_j(w_j)^2$称为正则化项,$\lambda$称为正则化参数,它的作用就是平衡loss function这两项,若$\lambda$取得非常大,即对参数$w_j$惩罚的非常大,那么相当于$w_j$趋于0,即相当于原线性回归模型中删除了这些项,那么函数就变成了一条$y=b$的水平直线。

    那么为什么减小$w_j$能够使其函数不宜发生overfitting呢?

    若现在令$\varDelta x_j$为输入时的干扰项,那么输出所形成的误差即为:

    由此我们可以发现,当$w_j$较小时,产生的误差$\varDelta y$也更小,则更加光滑的函数会受更少的影响。

    但观察正则化项,我们会发现为什么没有$b$呢?

    其实,正则化调整的是函数的平滑程度,但我们调整b对函数的平滑程度不会造成影响,它只能让函数上下移动。

Classification

什么是分类呢?例如在现实生活中,当我们看见一张关于猫与狗的照片时,我们可以很容易区分,照片里的属于猫还是狗,那么如果现在有一些不同类别的大量数据,显然由人进行分类是不现实的,那么我们希望可以借助计算机来帮我们进行数据的分类……

那么我们如何解决分类问题呢?例如下图:

9

希望能建立一个函数,输入一个神奇宝贝,就能返回其属性(类别)。

首先我们需要将神奇宝贝数字化,即通过它的特征(Hp,Attack,Defense……)来描述这只神奇宝贝。首先将分类问题简化,只考虑其只有两类。

二分类

我们的目标仍是寻找一个函数,输入x输出其类别,即为:

  • Function (Model):

    输入x,则当函数值>0,其属于class 1,否则其属于class 2。而这个函数我们可以利用概率模型进行描述,即

  • Loss Function:

    Loss Function的目的是用来评价函数的好坏,那么我们想用模型分类的结果,与正确的模型结果进行对比,统计错误的次数。

  • Find the best function:

    Example:perception(感知机算法)、svm(支持向量机)

贝叶斯概率模型

10

在Box 1中我们可以计算得到抽出蓝色球的概率为,绿色球的概率为,若已知我们抽取Box 1的概率为,那么我们就可以利用贝叶斯公式计算得到,已知抽取的小球为蓝色,则从Box 1抽出的机率为多少,即

而现在我们可以将这些球看作是一个个数据,从而可以利用贝叶斯公式生成概率模型。

11

  • 先验概率:,即每种类别发生的概率。
  • 类条件概率:,在某种类别的条件下,某事发生的概率。
  • 后验概率:,某事发生了,它属于某种类别的概率。

如果我们可以计算得到,与,那么我们可以通过贝叶斯公式计算得到,如果,那么可以认为是属于Class 1 ,相反可认为是属于Class 2的。

那么我们的目标就是计算,与

  • 先验概率的计算

    假设现在两个类别,Class 1:Water(水系),Class 2:Normal(其他系)。

    水系有79只神奇宝贝,其他系有61只神奇宝贝,总样本共有140只神奇宝贝。

    即通过所得样本中各自种类的占比得到先验概率,其计算较为简单。

  • 类条件概率的计算

    假设水系精灵中有6杰尼龟(水系),那么我们可以认为在水系精灵中,杰尼龟的概率是吗?

    事实上,这是不对的,因为该水系精灵样本较少,所以我们无法直接仅由样本中所占比例来推得类条件概率。假设该水系样本精灵中没有水箭龟,但水箭鬼确实是水系精灵,那么我们能说明水箭龟在水系精灵中的概率为0吗?这显然是有问题的。

    那么我们如何计算呢?我们利用极大似然估计法

$\S$ 极大似然估计

对于的计算,我们很难去寻找到随机变量所遵循的概率密度函数。那么如果我们假设已知随机变量所遵循的概率密度函数,转而计算所假设概率密度函数中的参数值,如果找到最佳的参数值,那么我们就能用该概率密度函数代替类条件概率的密度函数了。

若有样本集,每个样本集中的样本都是所谓独立同分布的随机变量。

似然函数定义为:似然函数是给定样本x时,关于参数θ的函数,其在数值上等于给定参数后变量X的概率

在当为离散型随机变量时,为概率密度函数,则

由于即为已知数据,那么似然函数即为关于参数的函数,而该似然函数的值越大,说明该参数的估计越佳,那么我们的目标即转变为找到最大的似然函数值,即为

$\S$类条件概率计算

回到类条件概率的计算,我们设水系精灵的样本集若每个考虑n个特征,即,服从(高斯分布) ,则有:

现在每个样本仅考虑2个特征,即,那么,即属于二维高斯分布,其概率密度函数为:

其中为协方差矩阵,为均值向量。

根据极大似然估计法,均为独立同分布,且均为离散型数据,则有,即:

那么似然函数就是关于参数的函数。则最佳参数值即为:

通过计算,求得最佳参数即为:

带入已知数据集,可以分别计算得到两个类别的最佳参数值:

12

$\S$Result

13

观察可以发现,在Testing data上仅有47%的正确率。于是将考虑的特征由2升为7,即变成7维向量,但测试正确率仍只有54%。

$\S$模型改进

在最初的模型里,我们是利用似然函数,分别对Class 1 与Class 2进行参数估计,从而会产生两类参数,现在,我们将这两类公用同一个协方差矩阵,而Class 1 与Class 2也共同用一个似然函数,即:

由此计算得到的与最初计算结果相同,而

而现在得到的结果如下所示:

14

可以发现,当公用协方差矩阵后,正确率可以提高,那么为什么会出现这种结果呢?因为当两个Class公用相同的协方差矩阵后,可以减少参数,从而来防止模型发生Overfitting。

$\S$Naive Bayes Classifier

在上文中,我们的特征只有两个,如果特征变成多个应该如何处理呢?如果各特征是在相互独立的情况下,那么有如下关系:

而这样做的好处是:遵循一维高斯分布,相较于二维高斯分布计算量大大降低,而这种方法叫做Naive Bayes Classifier(朴素贝叶斯分类器)。

$\S$概率密度函数选择

在前文中,我们选择了随机变量服从高斯分布,事实上我们可以选择其他分布函数,这是比较随意的,但当随机变量呈现相关性质时,有一些特定的分布效果会更加好。

  • 当样本数据x取实数值时,采用高斯分布:
  • 当每种特征时,采用伯努利分布:
  • 当每种特征取值时,采用分类分布:

Logistic Regression(逻辑回归)

在上节中,我们利用了贝叶斯公式,现在对贝叶斯公式进行一些变换:

,则有:

称为sigmoid function,其函数图像如下所示:

可以发现,sigmoid函数的值域在之间,而它通常用于隐层神经元输出,可作为激活函数。

$\S$手推公式(可跳过)

前文中,令,对其进行展开:

若假设,则有:

综上所述:

$\S$Function set(函数集)

由以上公式推导可以得到:

可以发现,可用进行线性表示。其中是每个的权重,即为偏差,在这里即为决策边界,而这也是上文中为什么当两个class公用相同的协方差矩阵后,其决策边界变为直线的缘故。如下图所示:

这种函数集的分类问题叫做logistic regression(逻辑回归)。

$\S$Goodness of a Function

假设现在有以下的training data:

,则由极大似然估计,可定义以下损失函数:

而目标即为找到最大的,此时该函数的参数即为最佳参数值。

变形可得:

这样做的好处是,可以利用梯度下降算法求最小值,并且对取对数,可将乘积形式化为求和形式,易于后续计算。

对class1,class2进行符号转换:

则:

这样每个都可以统一成上式:

而橙色部分其实就是两个伯努利分布的交叉熵(Cross entropy)。

如图所示,假设有两个分布:如蓝色框所示,那么交叉熵的计算方式即$H(p,q)=-\sum_xp(x)ln(q(x))$。交叉熵代表的含义就是这两个分布有多接近。当两个分布相同时,计算的交叉熵就是熵。

$\S$Find the best function

梯度下降求最小,计算步骤如图所示:

对$\ln L(w,b)$求$w_i$的偏微分,只需要计算出$\frac{\ln f_{w,b}(x^n)}{\partial w_i}$与$\frac{\ln (1-f_{w,b}(x^n))}{\partial w_i}$。$f_{w,b}(x)$即为sigmoid 函数,$z=\sum_nw_ix_i+b$。

计算可得到$\frac{\ln (1-f_{w,b}(x^n))}{\partial w_i}$,将两个偏微分计算带入可得到:

紫色部分其实直观的表示了真实数据值与函数值之间的差距大小。

$\S$逻辑回归与线性回归的比较

可以发现,逻辑回归其实是在线性回归的基础上,对原线性模型再加上一层sigmoid 函数,从而将函数的输出介于(0,1)之间。而线性回归其输出可为任意值。

在Logistic regression中,target的值为0或1,而在Linear regression中,target的值可为任意值

$\S$Discriminative V.S. Generative(判别模型VS生成模型)

在前文中,其实已经介绍了两种不同的方法进行分类。

  1. 通过假设概率密度函数求解类条件概率,从而通过贝叶斯公式分类,而这种分类方法就叫做生成模型(Generative model)。
  2. 通过利用梯度下降算法求解$w,b$。于是可带入逻辑回归模型进行分类,而这种分类方法就叫做判别模型(Discriminative model)。

而判别模型和生成模型有什么区别呢?可以用一个例子来说明:

  • 判别模型:要确定一只羊是🐐还是🐏,用判别模型的方法是从历史数据中,直接学习到模型,然后通过提取到这只羊的特征带入模型进行预测这只羊是山羊的概率,是绵羊的概率。
  • 生成模型:利用生成模型首先根据山羊的特征学习出山羊的模型,然后根据绵羊的特征学习出绵羊的模型。然后从这只羊中提取特征,放到山羊的模型中,看概率是多少;放到绵羊的模型中,看概率是多少,哪个概率大就是哪个。

而对于这两种模型,它们的函数集都是相同的

对于判别模型,仅需要利用梯度下降算法,直接求解出参数$w,b$。

对于生成模型,需要通过假设概率分布求解出$\mu_1,\mu_2,B^{-1}$,而在手推公式这一节中,有如下代换:

那么这两个不同模型得到的$w,b$相同吗?

其实是不同的,为什么呢?因为在生成模型中,它是有假设的,例如它假设data满足高斯分布或伯努利分布等等,但在逻辑回归中,并没有这些假设,所以这导致了虽然它们的函数相同却最后计算得到的参数不同。

有些时候生成模型可能会出现一些问题。

例如,在这个例子中,共有13组数据,其中1组为class1,另外12组全部为class2。每组数据均有两个特征。现在当给出一个testing data,问其属于哪个类别。

对于人来说,第一反应它应该就是class1的。那么现在我们看看朴素贝叶斯分类器(naive bayes)是什么结果。

可以发现最后计算结果$P(C_1|x)<0.5$,那么即朴素贝叶斯分类器认为当前tesing data属于class2,那么为什么会造成这个结果呢?朴素贝叶斯分类器是有假设这种情况存在的(机器脑补这种可能性)。所以结果和人类直观判断的结果不太一样。

对于这两种模型,它们各自有各自的优势:

  1. 当data数量较少时,生成模型受数据影响与判别模型相比,影响较小,因为它有自己的假设,甚至无视一些data。而当data较大时,判别模型的优势就较为明显了,因为当数据越多,它的误差就可以越小,从而模型越精确。
  2. 当遇到一些data有问题时,而生成模型有做假设,有时候就可以把data中有问题的部分忽略掉。

$\S$Multi-class Classification(多类别分类)

假定现在有三个类别,它们分别有自己的weight和bias。如下所示:

把$z_1,z_2,z_3$带入Softmax function​中,最后可得到输出$y_1,y_2,y_3$。可以发现$z_1,z_2,z_3$在Softmax中首先进行指数化,得到$e^{z_1},e^{z_2},e^{z_3}$,后除以$\sum_{j=1}^{3}e^{z_j}$,便可得到输出值。

总结可得Softmax function的函数形式即:

那么为什么叫做Softmax呢?从字面意思上看,有soft和max,而max就是最大的意思,而Softmax的核心在于soft。通常情况下,给定一组数,我们要求它的最大值,而这里的最大值就是hardmax,而最大值只有一个,即非黑即白。但在多类别分类中,我们希望找出x的最大概率分类,而这并不能仅仅是一个hardmax。而Softmax的含义在于不再唯一的确定某个最大值,而是为每个输出分类的结果赋予一个概率值,代表属于该分类的可能性。它可以对最大的值进行强化,这样会导致大的值和小的值的差距会拉大。

也就是说,Softmax的输出值可以代表x属于每个类别的概率,即近似表示后验概率。为什么呢?当假设有三个Class服从高斯分布,当它们公用一个协方差矩阵时,就可以推导得到Softmax。

$\S$Limitation of Logistic Regression

假定现在一组数据有两个feature,则根据Logistic regression则有以下过程:

对$x_1,x_2$分别赋予weight和bias,得到$z$带入sigmiod函数便可得到输出的概率值,根据$y$的值从而进行分类。这看似是没有任何问题的,但若现在有下面四组数据:

对两个feature分别赋予0,1,并且已经知道了它们各自的类别。现在我们可以把这四组数据当作四个点,表示在二维平面上。

观察图可以发现,蓝色的点就是属于Class 2的数据,红色的点就是属于Class 1的数据。如果用逻辑回归处理数据的话,根据逻辑回归的物理意义,它的分界面就是一条直线,使得这两组Class分开,从而达到分类的效果

但很明显,观察上图可以发现,不存在这样的直线,能够使红点和蓝点分开。那么如何才能让它们可以用逻辑回归处理呢?

$\S$Feature Transformation(特征变换)

所谓特征变换就是让特征通过某种变换变成新的特征。举个例子,现在如果有定义两个特征:$x_1,x_2$,它们经过某种变换变为新特征:$x_1^{’},x_2^{‘}$。

现在假若定义如下变换:

那么可以原来二维平面的坐标点可变为新平面下的坐标点:

可以发现,在新平面下,原来不可分的点,现在是可分的了。这是为什么呢?

实际上,在通常情况下,我们的数据不一定是完全线性可分的,很多情况下会存在线性不可分,如同上面所举例子。而我们要将数据处理成线性可分,则需要进行特征变换,将数据投影到别的空间,例如上图,数据在$X$空间不可分,但在$X^{’}$空间就是可分的。而$X^{’}$空间的维度一般是高于$X$空间的维度的。

但有时候很难去寻找有效的特征变换,于是能否有一种通用的方法进行特征变换?

$\S$Cascading logistic regression models(级联逻辑回归模型)

级联逻辑回归模型从字面意思上就可以看出就是将多个逻辑回归连接起来。而它就是为了解决上述特征变换的问题。

原理过程如图所示,由特征变换和分类两个过程组成。特征$x_1,x_2$作为输入,带入逻辑回归模型,可得到输出$x_1^{’},x_2^{‘}$,而这便是经过逻辑回归得到的两个新的特征。将新特征再作为输入带入逻辑回归模型,可得到分类概率$y$。

下面还是用一个例子来说明。

四组数据,通过调整参数$w_1,w_2,w_3,w_4,b_1,b_2$,可以得到四组数据经过逻辑回归的新特征$x_1^{’},x_2^{‘}$。

将新特征$x_1^{’},x_2^{‘}$带入新逻辑回归模型中,可以发现,新特征新特征$x_1^{’},x_2^{‘}$是线性可分的,由图可知,存在一条直线,将两组Class分开。

至此我们可以引入一个新的概念!

由以上可知,一个逻辑回归的输入可以来源于其他逻辑回归的输出,这个逻辑回归的输出也可以是其他逻辑回归的输入,将每一个逻辑回归称为Neuron(神经元),把这些神经元连接起来的网络叫做Neuron Network(神经网络)!