机器学习-七种回归分析

七种回归分析

什么是回归分析

回归分析是一种预测模型来研究因变量和自变量(们)之间的关系。例如,研究开快车和路上交通事故直接的关系。回归分析也是一种重要的数据建模与分析工具。我们想找到一条曲线/直线,尽可能的通过各个点,使线和点之间的总误差尽可能小。

为什么要用回归分析?-->预测

如上所述,回归分析是一种估计两个或多个变量之间关系的。比如,我们想基于现在的经济状况估计一个公司的销售情况。根据近期的公司数据,销量的增长大约是经济增长的2.5倍。这样,我们可以依靠现有和过去的信息预测未来公司的销量。

使用回归分析的优点有两种:

  1. 发现自变量和因变量之间的显著关系
  2. 发现各个自变量对因变量的影响程度

回归分析的种类

有许多种回归分析可以用来做预测?这些技术通常由三个维度驱动(自变量的数量,因变量的类型和回归曲线的形状),如下所示:

回归分析的种类
图1 回归分析的种类

如果你富有创造性,也可以创造出新的回归方式,综合上面多种参数。在此之前,让我们来了解最常用的回归方式:

线性回归

线性回归是最广为人知的建模技术,也是人们最先选择的回归预测模型。在这个技术中,自变量可以是离散的,也可以是连续的,但是因变量必须是连续的。而且双方是一种线性关系。

线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X(s))之间建立一种线性关系。

这种关系可以用\(Y=a+b*x+e\)来表示。其中,a是截距,b是直线的斜率,e是误差项。这个公式可以通过给定的一些预测参数来预测目标值。

图2 线性回归
图2 线性回归

单线性回归和多线性回归的区别是:多线性回归有多余1个自变量,而单线性回归只有一个自变量。现在的问题是“如何最适曲线?”。

如何最适曲线?

答案是寻找最小均方误差,这是回归分析最常用的方式。 \[min\|Xw-y\|^2_2\] 我们可以通过R-square来衡量模型的性能。更多的细节可以参考这篇文章《11 Important Model Evaluation Metrics for Machine Learning Everyone should know》

着重强调

  • 自变量和因变量之间必须要有线性关系!
  • 多变量回归容易收到多重共线性,自相关和异方差性影响
  • 线性回归对异常值很敏感,它会对线性回归和最终的预测值产生糟糕的影响
  • 多重共线性会增加系数估计的方差,使模型对微小的变动十分敏感。结果会导致系数估计不稳定
  • 在多个独立自变量的场景下,我们可以使用前向选择,后向消除和逐步法来选择最显著的独立变量

Logistic回归

Logistic回归是用来区分Event=Success或Event=Failure概率的方法。我们在因变量是二元变量(0/1,True/False,Yes/No)的回归分析中可以使用Logistic回归。

Logistic回归也是从统计学中借鉴来的,尽管名字里有回归俩字儿,但它不是一个需要预测连续结果的回归算法。与之相反,Logistic 回归是二分类任务的首选方法。它输出一个 0 到 1 之间的离散二值结果。简单来说,它的结果不是 1 就是 0。癌症检测算法可看做是 Logistic回归问题的一个简单例子,这种算法输入病理图片并且应该辨别患者是患有癌症(1)或没有癌症(0)。

它是如何工作的

Logistic 回归通过使用其固有的 logistic 函数估计概率,来衡量因变量(我们想要预测的标签)与一个或多个自变量(特征)之间的关系。

然后这些概率必须二值化才能真地进行预测。这就是 logistic 函数的任务,也称为 Sigmoid 函数。Sigmoid 函数是一个 S 形曲线,它可以将任意实数值映射到介于 0 和 1 之间的值,但并不能取到 0或1。然后使用阈值分类器将 0 和 1 之间的值转换为 0 或 1。

下面的图片说明了 logistic 回归得出预测所需的所有步骤。

logistic回归步骤图
图3 logistic回归步骤图

下面是 logistic 函数(sigmoid 函数)的图形表示:

sigmoid 函数
图4 Sigmoid函数

注意点

  1. 常被用于分类问题。
  2. Logistic回归不需要自变量和因变量有线性关系,因为是非线性的log变换。
  3. 为了避免过拟合和欠拟合,我们应该包括所有重要的变量。确保这一过程的一个好方法是使用逐步的方式来估计Logistic回归。

何时适用

就像我已经提到的那样,Logistic 回归通过线性边界将你的输入分成两个「区域」,每个类别划分一个区域。因此,你的数据应当是线性可分的,如下图所示的数据点:

Logistic回归线性可分
图5 Logistic回归线性可分

换句话说:当 Y 变量只有两个值时(例如,当你面临分类问题时),您应该考虑使用逻辑回归。注意,你也可以将 Logistic 回归用于多类别分类。其他常见的分类算法有朴素贝叶斯、决策树、随机森林、支持向量机、k-近邻等等。我们将在其他文章中讨论它们,但别被这些机器学习算法的数量吓到。请注意,最好能够真正了解 4 或 5 种算法,并将精力集中在特征处理上,这也是未来工作的主题。

Polynomial_Regression

多项式回归。如果回归方程中自变量的阶数大于1,为多项式形式,则为多项式回归。

e.g. \(y=a+bx^2\)

这种回归得到是曲线,而不像线性回归是直线。多项式回归可以通过提高多项式的阶数来更好的拟合曲线。但是如果阶数(特征)设置的太多,特别是当特征数和训练点数相仿时,拟合就趋近于插值。对于训练集,曲线将会特别好的符合,但是无法泛化的测试集中。这种现象被称为过拟合。过拟合可以通过降低多项式级数(减少特征数)或者正规化来解决。

欠拟合,拟合与过拟合可以由图6表示。

图6 欠拟合,拟合与过拟合

Stepwise_Regression

逐步回归。与平时所说的 regression analysis 不太相同,stepwise regression 可以算是一种 feature extraction 的方法。

举个例子,假如我们的数据中有一个因变量,但却有十几或几十个自变量。为了便于对变量数过多的数据进行处理,避免 “curse of dimensionality” 中可能出现的种种问题,我们总是会对数据进行降维,根据在特定领域中的知识或是理论假设,选择其中一些可能更有意义的变量进行后续分析。但不是任何情况下我们都掌握这些先验信息,所以基于数据本身的特征提取方法应运而生。

在 stepwise regression 中,提取哪些变量主要基于的假设是:在线性条件下,哪些变量组合能够解释更多的因变量变异,则将其保留。

具体操作方法有三种:

Forward selection: 首先模型中只有一个单独解释因变量变异最大的自变量,之后尝试将加入另一自变量,看加入后整个模型所能解释的因变量变异是否显著增加(这里需要进行检疫,可以用 F-test, t-test 等等);这一过程反复迭代,直到没有自变量再符合加入模型的条件。

Backward elimination: 与 Forward selection 相反,此时,所有变量均放入模型,之后尝试将其中一个自变量从模型中剔除,看整个模型解释因变量的变异是否有显著变化,之后将使解释量减少最少的变量剔除;此过程不断迭代,直到没有自变量符合剔除的条件。

Bidirectional elimination: 这种方法相当于将前两种结合起来。可以想象,如果采用第一种方法,每加入一个自变量,可能会使已存在于模型中的变量单独对因变量的解释度减小,当其的作用很小(不显著)时,则可将其从模型中剔除。而第三种方法就做了这么一件事,不是一味的增加变量,而是增加一个后,对整个模型中的所有变量进行检验,剔除作用不显著的变量。最终尽可能得到一个最优的变量组合。

可以想象,这样得到的变量组合,基于当前数据,应该是可以最大程度的解释因变量的变异,但其反面的作用就是会使模型有偏,即所谓的 overfitting 问题;另外,鉴于算法是基于变量解释度来进行特征提取的,当两个变量对因变量的影响相近时,则不免受到较大的噪声影响,使特征提取结果不稳定。

Ridge_Regression

当使用最小二乘法计算线性回归模型参数的时候,如果数据集合矩阵(也叫做设计矩阵(design matrix))X,存在多重共线性,那么最小二乘法对输入变量中的噪声非常的敏感,其解会极为不稳定。为了解决这个问题,就有了这一节脊回归(Ridge Regression )。

当设计矩阵\(X\)存在多重共线性的时候(数学上称为病态矩阵),最小二乘法求得的参数\(w\)在数值上会非常的大,而一般的线性回归其模型是\(y=w^Tx\),显然,就是因为\(w\)在数值上非常的大,所以,如果输入变量\(x\)有一个微小的变动,其反应在输出结果上也会变得非常大,这就是对输入变量总的噪声非常敏感的原因。

如果能限制参数\(w\)的增长,使\(w\)不会变得特别大,那么模型对输入\(w\)中噪声的敏感度就会降低。这就是脊回归和套索回归(Ridge Regression and Lasso Regrission)的基本思想。

为了限制模型参数\(w\)的数值大小,就在模型原来的目标函数上加上一个惩罚项,这个过程叫做正则化(Regularization)。

如果惩罚项是参数的\(l_2\)范数,就是脊回归(Ridge Regression)

如果惩罚项是参数的\(l_1\)范数,就是套索回归(Lasso Regrission)

正则化同时也是防止过拟合有效的手段,这在“多项式回归”中有详细的说明。

所谓脊回归,就是对于一个线性模型,在原来的损失函数加入参数的\(l_2\)范数的惩罚项,其损失函数为如下形式: \[J_w=\min_w{\|X-w\|^2+\alpha\|w\|^2},\alpha>0\] 由于\(w\)最小化整个式子,如果\(w\)本身特别大,第二项就会很大,这样就限制了\(w\)的大小。

\(α\)的数值越大,那么正则项,也是惩罚项的作用就越明显;\(α\)的数值越小,正则项的作用就越弱。极端情况下,\(α=0\)则和原来的损失函数是一样的,如果\(α=∞\),则损失函数只有正则项,此时其最小化的结果必然是\(w=0\)

之前,我们根据线性回归判断参数的解为: \[w=(X^TX)^{-1}X^Ty\] 同理,脊回归的损失函数为: \[\|Xw-y\|^2+\alpha\|w\|^2=(Xw-y)^T(Xw-y)+\alpha w^T w\] 对于参数\(w\)求导之后,极值为0: \[X^T(Xw-y)+X^T(Xw-y)+2\alpha w=0\] 解得: \[w=(X^T X+\alpha I)^{-1}X^Ty\]

Lasso_Regression

Lasso回归全称是(Least Absolute Shrinkage and Selection Operator),它使用L1范数作为惩罚项。 \[\|Xw-y\|^2+\alpha|w|\]

ElasticNet_Regression

弹性网络是一种使用 L1,L2范数作为先验正则项训练的线性回归模型.这种组合允许学习到一个只有少量参数是非零稀疏的模型,就像 Lasso一样,但是它仍然保持一些像Ridge的正则性质。我们可利用 l1_ratio 参数控制L1和L2的凸组合。弹性网络是一不断叠代的方法。

如何选择正确的回归分析算法

  1. 数据探索是构建预测模型的必然部分。这是选择正确的模型(例如确定变量之间的关系和影响)之前的第一步。
  2. 为了比较不同模型的适用性,我们需要不同维度的分析,例如参数的统计特性,R-square, Adjusted r-square, AIC, BIC和误差项等。另一个方法是使用Mallow’s Cp 准则。 This essentially checks for possible bias in your model, by comparing the model with all possible submodels (or a careful selection of them).
  3. Cross-validation is the best way to evaluate models used for prediction. Here you divide your data set into two group (train and validate). A simple mean squared difference between the observed and predicted values give you a measure for the prediction accuracy.
  4. If your data set has multiple confounding variables, you should not choose automatic model selection method because you do not want to put these in a model at the same time.
  5. It’ll also depend on your objective. It can occur that a less powerful model is easy to implement as compared to a highly statistically significant model.
  6. Regression regularization methods(Lasso, Ridge and ElasticNet) works well in case of high dimensionality and multicollinearity among the variables in the data set.

参考文献

[1] 7 Regression Techniques you should know!https://www.analyticsvidhya.com/blog/2015/08/comprehensive-guide-regression/