机器学习-七种回归分析 Nov 21, 2019 · 机器学习 · 分享到: 七种回归分析 什么是回归分析 为什么要用回归分析?-->预测 回归分析的种类 线性回归 着重强调 Logistic回归 它是如何工作的 注意点 何时适用 Polynomial_Regression Stepwise_Regression Ridge_Regression Lasso_Regression ElasticNet_Regression 如何选择正确的回归分析算法 参考文献 什么是回归分析 回归分析是一种预测模型来研究因变量和自变量(们)之间的关系。例如,研究开快车和路上交通事故直接的关系。回归分析也是一种重要的数据建模与分析工具。我们想找到一条曲线/直线,尽可能的通过各个点,使线和点之间的总误差尽可能小。 为什么要用回归分析?-->预测 如上所述,回归分析是一种估计两个或多个变量之间关系的。比如,我们想基于现在的经济状况估计一个公司的销售情况。根据近期的公司数据,销量的增长大约是经济增长的2.5倍。这样,我们可以依靠现有和过去的信息预测未来公司的销量。 使用回归分析的优点有两种: 发现自变量和因变量之间的显著关系 发现各个自变量对因变量的影响程度 回归分析的种类 有许多种回归分析可以用来做预测?这些技术通常由三个维度驱动(自变量的数量,因变量的类型和回归曲线的形状),如下所示: 图1 回归分析的种类 如果你富有创造性,也可以创造出新的回归方式,综合上面多种参数。在此之前,让我们来了解最常用的回归方式: 线性回归 线性回归是最广为人知的建模技术,也是人们最先选择的回归预测模型。在这个技术中,自变量可以是离散的,也可以是连续的,但是因变量必须是连续的。而且双方是一种线性关系。 线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X(s))之间建立一种线性关系。 这种关系可以用\(Y=a+b*x+e\)来表示。其中,a是截距,b是直线的斜率,e是误差项。这个公式可以通过给定的一些预测参数来预测目标值。 图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 回归得出预测所需的所有步骤。 图3 logistic回归步骤图 下面是 logistic 函数(sigmoid 函数)的图形表示: 图4 Sigmoid函数 注意点 常被用于分类问题。 Logistic回归不需要自变量和因变量有线性关系,因为是非线性的log变换。 为了避免过拟合和欠拟合,我们应该包括所有重要的变量。确保这一过程的一个好方法是使用逐步的方式来估计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的凸组合。弹性网络是一不断叠代的方法。 如何选择正确的回归分析算法 数据探索是构建预测模型的必然部分。这是选择正确的模型(例如确定变量之间的关系和影响)之前的第一步。 为了比较不同模型的适用性,我们需要不同维度的分析,例如参数的统计特性,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). 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. 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. 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. 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/