线性回归(linearregression)

huangyc huangyc     2023-01-07     337

关键词:

1. 前言

线性回归形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型(nonlinear model)可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于线性回归的解( heta)直观表达了各属性在预测中的重要性,因此线性回归有很好的可解释性。

2. 线性回归原理

线性回归遇到的问题一般是这样的。我们有(m)个样本,每个样本对应于(n)维特征和一个结果输出。

训练数据的形式:
[ (x_1^(0), x_2^(0), ...x_n^(0), y_0), (x_1^(1), x_2^(1),...x_n^(1),y_1), ... (x_1^(m), x_2^(m), ...x_n^(m), y_n) ]
我们主要做的是通过找到参数(( heta_0, heta_1,... heta_m)),线性回归模型如下:
[ h_ heta(x_1, x_2, ...x_n) = heta_0 + heta_1x_1 + ... + heta_nx_n ]
矩阵化如下:
[ h_θ(X)=Xθ ]
得到了模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:
[ J( heta_0, heta_1..., heta_n) = sumlimits_i=0^m(h_ heta(x_0, x_1, ...x_n) - y_i)^2 ]

矩阵化如下:

[ J(mathbf heta) = frac12(mathbfX heta - mathbfY)^T(mathbfX heta - mathbfY) ]

3. 线性回归的算法

对于线性回归的损失函数(J(mathbf heta)=frac12(mathbfX heta-mathbfY)^T(mathbfX heta-mathbfY)),我们常用的有两种方法来求损失函数最小化时候的(θ)参数:一种是梯度下降法,一种是最小二乘法。

如果采用梯度下降法,则( heta)的迭代公式是这样的:
[ mathbf heta= mathbf heta - alphamathbfX^T(mathbfX heta - mathbfY) ]
通过若干次迭代后,我们可以得到最终的( heta)的结果

如果采用最小二乘法,则( heta)的结果公式如下:

[ mathbf heta = (mathbfX^TX)^-1mathbfX^TY ]
当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。

4. 多项式线性回归

我们遇到的数据不一定都是线性的形式,如果式(y=x_1^2+x_2^2)的模型,那线性回归很难拟合这个函数,这时候就需要用到多项式回归了。

回到我们开始的线性模型,(h_ heta(x_1, x_2, ...x_n) = heta_0 + heta_1x_1 + ... + heta_nx_n), 如果这里不仅仅是x的一次方,而是二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的2次多项式回归的模型:
[ h_ heta(x_1, x_2) = heta_0 + heta_1x_1 + heta_2x_2 + heta_3x_1^2 + heta_4x_2^2 + heta_5x_1x_2 ]
我们令(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^2, x_4 = x_2^2, x_5 = x_1x_2),这样我们就得到了下式:

[ h_ heta(x_1, x_2) = heta_0 + heta_1x_1 + heta_2x_2 + heta_3x_3 + heta_4x_4 + heta_5x_5 ]

可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征((x_1,x_2)),我们得到一个五元样本特征((1,x_1,x_2,x^2_1,x^2_2,x_1x_2)),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归,但是达到了非线性拟合的效果。

5.广义线性回归

在上一节的线性回归的多项式中,我们对样本特征进行了变换,用线性回归完成了非线性回归的效果。这里我们对于特征(y)做推广。比如我们的输出(Y)不满足和(X)的线性关系,但是(logY)(X)满足线性关系,模型函数如下:
[ logY=Xθ ]
这样对与每个样本的输入(y),我们用(logy)去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 (logy)一般化,假设这个函数是单调可微函数(g(.)),则一般化的广义线性回归形式是:(g(Y)=Xθ)或者(Y=g^-1(Xθ))。这个函数g(.)我们通常称为联系函数。后面会讲到的逻辑回归这是在联系函数的基础上进行分类的。

6. 线性回归的正则化

为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

6.1 L1正则化Lasso回归

L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数(alpha)来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:  
[ J(θ)=frac12n(Xθ-Y)^T(Xθ-Y)+alpha|θ|_1 ]
其中(n)为样本个数,(alpha)为常数系数,需要进行调优。(|θ|_1)为L1范数。

Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

6.2 L2正则化Ridge回归

L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:
[ J(θ)=frac12(Xθ-Y)^T(Xθ-Y)+frac12alpha|θ|_2^2 ]
其中(alpha)为常数系数,需要进行调优。(|θ|2)为L2范数。

Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。

7. 总结

线性回归的算法本身并不复杂,但是在它的基础上延伸出来的内容可谓是相当丰富,涉及到了多项式中的特征转换(特征工程)、针对过拟合的正则化项、运用非常广泛的逻辑回归等。要真正理解它需要对机器学习的知识融汇贯通。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected]

线性回归(linearregression)

fromnumpyimportgenfromtxtfromsklearnimportlinear_modeldatapath=r"Delivery_Dummy.csv"data=genfromtxt(datapath,delimiter=",")x=data[1:,:-1]y=data[1:,-1]printxprintymlr=linear_model.LinearRegression()mlr 查看详情

机器学习基石:09linearregression

线性回归假设代价函数---均方误差最小化样本内代价函数只有满秩方阵才有逆矩阵线性回归算法流程线性回归算法是隐式迭代的线性回归算法泛化可能的保证线性分类是近似求解,线性回归是解析求解,线性分类中使用0/1误... 查看详情

sklearn | RFECV + 线性回归给出“'LinearRegression'对象没有属性'coef_'”

】sklearn|RFECV+线性回归给出“\\\'LinearRegression\\\'对象没有属性\\\'coef_\\\'”【英文标题】:sklearn|RFECV+LinearRegressiongives"\'LinearRegression\'objecthasnoattribute\'coef_\'"sklearn|RFECV+线性回归给出“\'LinearRegression\'对象没有属性\'co 查看详情

机器学习方法:回归:线性回归linearregression

...周期会比較长。由于我还想写一些其它的,呵呵。content:linearregression,Ridge,LassoLogisticRegression,SoftmaxKmeans,GMM,E 查看详情

sparkmllib源码学习---线性回归模型(linearregression)

线性回归是机器学习中最常见的一种回归模型,也是入门机器学习的一种经典模型。线性回归假设因变量与自变量之间呈线性关系,当只有单一自变量的时候,称之为一元线性回归。当有多个自变量的时候,则为... 查看详情

sparkmllib源码学习---线性回归模型(linearregression)

线性回归是机器学习中最常见的一种回归模型,也是入门机器学习的一种经典模型。线性回归假设因变量与自变量之间呈线性关系,当只有单一自变量的时候,称之为一元线性回归。当有多个自变量的时候,则为... 查看详情

线性回归linearregression

线性回归算法解决回归问题思想简单,容易实现是许多强大的非线性模型的基础结果具有很好的可解释性蕴含机器学习中的很多重要思想基本思想:寻找一条直线,最大程度的“拟合”样本特征和样本输出标记之间的关系如横轴... 查看详情

coursera机器学习linearregression线性回归的小项目(代码片段)

Matlab环境: 1.一元线性回归ex1.m  %%MachineLearningOnlineClass-Exercise1:LinearRegression%Instructions%------------%%Thisfilecontainscodethathelpsyougetstartedonthe%linearexercise.Youwillneedtoc 查看详情

机器学习基础---线性回归(linearregression)

内容简介符号说明一、线性回归(最小二乘法及其几何意义)1、矩阵表达下的最小二乘法2、最小二乘法的几何意义二、线性回归(最小二乘法-概率视角-高斯噪声-MLE)三、线性回归(正则化-岭回归)四、线性... 查看详情

sparkmllib---linearregression(线性回归)logisticregression(逻辑回归)(代码片段)

1、随机梯度下降首先介绍一下随机梯度下降算法:1.1、代码一:packagemllibimportorg.apache.log4j.Level,Loggerimportorg.apache.spark.SparkContext,SparkConfimportscala.collection.mutable.HashMap/***随机梯度下降算法*Createdby汪本成 查看详情

如何从sklearn LinearRegression中导出线性回归公式

】如何从sklearnLinearRegression中导出线性回归公式【英文标题】:HowtoexportalinearregressionformulaoutofsklearnLinearRegression【发布时间】:2016-02-1709:41:10【问题描述】:我想要模型的公式以便在其他语言/项目中使用它。有没有办法从模型中... 查看详情

linearregression线性回归

Motivation问题描述收集到某一地区的房子面积和房价的数据(x,y)42组,对于一套已知面积的房子预测其房价???由房价数据可视化图可以看出,可以使用一条直线拟合房价。通过这种假设得到的预测值和真实值比较接近。Model模型... 查看详情

机器学习sklearn监督学习回归算法线性回归linearregression(代码片段)

importnumpyasnpimportmatplotlib.pyplotaspltfromsklearnimportlinear_model#设置中文字体plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=False#设置自变量和因变 查看详情

从零单排入门机器学习:线性回归(linearregression)实践篇

   线性回归(linearregression)实践篇之前一段时间在coursera看了Andrewng的机器学习的课程,感觉还不错,算是入门了。这次打算以该课程的作业为主线,对机器学习基本知识做一下总结。小弟才学疏浅,如有错误。敬请... 查看详情

ufldl学习笔记与编程作业:linearregression(线性回归)

ufldl学习笔记与编程作业:LinearRegression(线性回归)ufldl出了新教程,感觉比之前的好。从基础讲起。系统清晰,又有编程实践。在deeplearning高质量群里面听一些前辈说。不必深究其它机器学习的算法。能够直接来学dl。于是近... 查看详情

r语言基于线性回归(linearregression)进行特征筛选(featureselection)

R语言基于线性回归(LinearRegression)进行特征筛选(featureselection)对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用。这里的属性即称为“特征”(feature)。对当前学习任务有用的属性称为“相关特征”... 查看详情

机器学习系列-tensorflow-03-线性回归linearregression(代码片段)

利用tensorflow实现数据的线性回归导入相关库importtensorflowastfimportnumpyimportmatplotlib.pyplotaspltrng=numpy.random参数设置learning_rate=0.01training_epochs=1000display_step=50训练数据train_X=numpy.asarray([3.3,4.4,5.5,6.7 查看详情

机器学习1线性回归(linearregression)

立个flag,本人从今天正式开始学习机器学习(MachineLearning)选取的第一门课还是吴恩达(AndrewNg)的斯坦福大学公开课:机器学习课程,我打算从作业入手,结合课程进行学习,预计一共分为8... 查看详情