首页 > 编程知识 正文

简述线性回归算法的基本原理,回归分析举例说明

时间:2023-05-04 03:46:27 阅读:26390 作者:2340

摘要:回归算法是一种监控型算法,利用训练集数据建立学习模型,并利用该模型对一些测试集数据进行预测。 本文主要介绍了基于线性回归、逻辑回归以及线性回归添加正则项的回归模型,并对其特点和应用场景等进行了一定的介绍。 针对线性回归和逻辑回归模型,具体介绍了梯度下降的原理及其应用。 用线性回归模型进行了人口和生产效益值的训练和预测,用逻辑回归模型进行了两个试验的训练和预测。 最后利用美国波士顿房价数据,用线性回归模型进行房价预测,用均方误差进行预测评价。

目录线性回归模型介绍了损失函数梯度下降线性回归梯度下降引起的实战数据分布损失函数, 梯度下降函数拟合效果预测结果线性回归应用实例数据描述数据分割数据标准化处理用线性回归模型和梯度下降测试数据预测性能逻辑回归引言逻辑回归介绍逻辑回归的代价函数逻辑回归实例引入合适的数据包和数据获取数据分布图分析sigmoid函数、损耗函数、 基于测试码线性回归和Ridge回归的多项式拟合,各模型图参考文献均可提供求解梯度函数、求解最小损耗函数建立预测、判断边界归正则项的逻辑回归运算其他回归模型岭回归模型Lasso模型弹性网络回归模型梯度下降法

线性回归模型介绍

线性回归的定义预计目标值是输入变量的线性组合。 线性模型形式简单,易于建模,利用数理统计中的回归分析,确定两种以上变量之间相互依赖的定量关系,但对非线性数据的拟合效果不好。

例如,课堂上可以根据房子的大小x预测房子的价格y,两者满足单变量线性方程的关系,把这个线性方程看作回归的模型,就可以按给定的房子大小预测价格。 其一般模型公式如下

关于多元回归,举另一个例子,销售量y不仅受到商品的大小x1的影响,还受到商品价格x2的影响。 满足的模型表达式如下:

设定损失函数模型后,将训练数据代入上式,即可得到预测值。

等式左侧为训练样本真值,右侧为训练模型预测值,加上真值与预测值之差。

梯度下降对损失函数的优化有矩阵运算和梯度下降两种方法。 矩阵运算有要求矩阵可逆性的局限性,所以这里只介绍梯度下降。

梯度下降可被理解为首先假设定点,以一定的步骤沿该点的梯度更新迭代,最后找出损耗函数使这个局部最有优点的值最小化的局部最优点。

线性回归梯度下降图

从图像可以看出,随着模型复杂度的增加,训练集的数据拟合较好,但会出现拟合现象,因此需要在损耗函数中添加罚项。

线性回归梯度下降实战录取数据来自档案Regression的linear_regression_data1.txt,其中体现了人口x与收入y的关系。 如果使用梯度下降进行线性回归,并将结果与Scikit_learn中的拟合结果进行比较,则表明效果很好。

数据分布数据分布图

损失函数,梯度下降函数的步骤图

迭代次数与损失值的关系图

拟合效果梯度下降与Scikit_learn对比拟合效果图

预测结果预测结果图

线性回归的应用实例参照CSDN的博文,利用sklearn内置的回归模型预测“美国波士顿房价”的数据。 现在进行学习总结,相关数据可以从kaggle官网获得。

数据说明froms klearn.datasetsimportload _ bostonboston=load _ Boston (print Boston.descr数据分割froms klearn.cross _ validation=Boston.datay=Boston.datay y _ test=train _ test _ split (x,y,random_state=33, test_size=0.25 )数据标准化处理froms klearn.cross _ validationimporttrain _ test _ splitimportnumpyasnpx=Boston.daty=baty random_state=33, test_size=0.25 )使用线性回归模型和梯度下降预测数据的froms klearn.linear _ modelimportlinearregressionlr=linear regression ((lr.) (lr_y_predict=lr.predict ) x_test ) froms klearn.linear _ modelimportsgdregressorsgdr=sgdregregressssorr

()sgdr.fit(X_train,y_train)sgdr_y_predict = sgdr.predict(X_test) 性能测试

在这里使用均方误差(Mean Squared Error)MSE来进行测试评价。

from sklearn.metrics import mean_squared_errorprint'线性回归模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),Ss_y.inverse_transform(lr_y_predict))print'梯度下降模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),Ss_y.inverse_transform(sgdr_y_predict))

在此次实验中,梯度下降估计参数的方法在性能表现上不及LinearRegression,但若训练数据规模十分庞大,则梯度法不论是在分类还是回归问题上都十分高效,且Scikit-learn官网建议,若数据规模超过10万,推荐使用随机梯度法估计参数模型。

逻辑回归 逻辑回归引言

逻辑回归其实是一种分类算法,将数据拟合到一个logistic函数中,从而完成对事件发生的概率进行预测。

线性回归解决的是连续值的预测,逻辑回归则解决的是一个分类问题,,最简单的是一个二分问题,比如垃圾邮件还是正常邮件,健康还是不健康等等。线性回归输出的值是一个连续值,值的范围是无法限定的,若出现噪声点,则设置的阈值不可以很好的区分开分类情况。因此我们需要将其映射到一个离散特定数值上,从而帮助我们判断,最常见的就是输出结果是0或1的一个概率值。

逻辑回归介绍

逻辑回归Logistic,主要用于两分类问题,即输出只有两种,因此利用Logistic函数,或者可以称作为Sigmoid函数,函数形式以及函数图像如下所示:


我们可以从图中看出,在z=0时,函数值为0.5,向左逐渐减少趋近于0,向右则逐渐增大为1,其值域为(0,1)之内,下面的图体现了不同的判定边界。
边界图1

边界图2

逻辑回归的代价函数

逻辑回归实战案例

采用的数据集为文件夹中的data1.txt和data2.txt,对其分别进行逻辑回归运算以及加入正则项的逻辑回归运算。

导入相应的包和数据

导入相应的包代码流程

导入测试数据图

获取数据分布图

获取数据分布代码图

数据分布图

定义sigmoid函数、损失函数、求解梯度函数和求解最小损失函数

函数定义代码图

做出预测 可以判断下分数1为45,分数2为85的概率为多少。

此时可得到其对应概率为0.7762903249331015。 画出判断边界

判断边界绘制代码

判断边界绘制图

加入正则项的逻辑回归运算

加入正则项的损失函数以及梯度求解


原始数据分布图

正则化系数不同时不同的判定边界图

其他回归模型 岭回归模型

首先需要了解共线性的概念,共线性是自变量之间存在近似线性的关系,因回归分析需要我们了解每个变量与输出量之间的关系,高共线性就是说自变量之间存在某种函数关系,变量之间相互影响,没办法固定别的变量来对单个变量对输出的影响进行分析,造成分析误差,因此回归分析时需要排除高共线性的影响。高共线性的存在可以靠以下操作来确定:该变量与y高度相关,但回归系数却不明显;添加或删除x特征,回归系数发生明显变化;x特征变量具有较高的成对相关性。

岭回归是针对第一章讨论的模型中存在的共线性关系的为变量增加一个小的平方偏差因子(也就是正则项),这样的平方偏差因子向模型中引入了少量偏差,但大大减少了方差。可以表示成下面的式子:

岭回归模型具有如下特点:

(1)岭回归的假设和最小平方回归相同,但是在最小平方回归的时候我们假设数据服从xlmdsj分布,使用的是极大似然估计(MLE),在岭回归的时候由于添加了偏差因子,使用的是极大后验估计(MAP)来得到最终的参数。
(2)没有特征选择功能

Lasso模型

Lasso与岭回归非常相似,都是在回归优化函数中增加了一个偏置项以减少共线性的影响。不同的是Lasso回归中使用了绝对值偏差作为正则化项,Lasso回归模型如下所示:

内置的特征选择(Built-in feature selection)是L1范数很有用的一个属性,岭回归中的L2范数不具有这种特性。因为L1范数倾向于产生系数。若模型中有100个系数,但其中只有10个系数是非零系数,也就是说只有这10个变量是有用的,其他90个都是没有用的。而L2范数产生非稀疏系数,所以没有这种属性。因此可以说Lasso回归做了一种参数选择形式,未被选中的特征变量对整体的权重为0。

稀疏性:指矩阵或向量中只有极少个非零系数。L1范数具有产生具有零值或具有很少大系数的非常小值的许多系数的属性。

计算效率:L1范数没解析解,但L2范数有。因此L2范数的解可以通过计算得到。L1范数的解具有稀疏性,这使得它可以与稀疏算法一起使用,使得在计算上更有效率。

弹性网络回归模型

弹性回归网络是Lasso回归和岭回归技术的混合体。它使用了L1和L2正则化,也达到了两种技术共有的效果,弹性回归网络模型的表达式如下:

在Lasso和岭回归之间进行权衡,实际是使运行弹性网络在循环的情况下继承岭回归的一些稳定性。

弹性回归网络的优点:
(1)鼓励在高度相关变量的情况下的群体效应,而不像Lasso那样将其中一些置为0,当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso倾向于随机选择其中一个,而弹性网络倾向于选择两个。
(2)对所选变量的数量没有限制。

采用梯度下降法的各模型图

下面两张图则是采用Ridge以及Lasso模型进行多项式的拟合,弹性回归网络模型则是两者的综合。
Ridge回归应用梯度下降图

Lasso回归应用梯度下降图

参考文献

[1]周志华. 机器学习. 清华大学出版社,2016.1.1.
[2]Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression).
[3]coursera上xbdwg《机器学习》第三周课程.
[4]https://blog.csdn.net/han_xiaoyang/article/details/49123419.

可提供的测试代码 线性回归和Ridge回归进行多项式拟合代码

具体见文件夹Regression里的demo.py

梯度下降实现线性回归代码

具体见文件夹Regression里的Logistic Regression.ipynb

线性回归案例代码 from sklearn.linear_model import LinearRegression, SGDRegressor, Ridgefrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_bostonfrom sklearn.cross_validation import train_test_splitfrom sklearn.metrics import mean_squared_error,classification_reportfrom sklearn.cluster import KMeans def linearmodel(): # 加载数据集 ld = load_boston() x_train,x_test,y_train,y_test = train_test_split(ld.data,ld.target,test_size=0.25) # 标准化处理 # 特征值处理 std_x = StandardScaler() x_train = std_x.fit_transform(x_train) x_test = std_x.transform(x_test) # 目标值进行处理 std_y = StandardScaler() y_train = std_y.fit_transform(y_train) y_test = std_y.transform(y_test) # 3、估计器流程 # LinearRegression lr = LinearRegression() lr.fit(x_train,y_train) y_lr_predict = lr.predict(x_test) y_lr_predict = std_y.inverse_transform(y_lr_predict) print('Lr预测值:',y_lr_predict) # SGDRegressor sgd = SGDRegressor() sgd.fit(x_train,y_train) y_sgd_predict = sgd.predict(x_test) y_sgd_predict = std_y.inverse_transform(y_sgd_predict) print('SGD预测值:',y_sgd_predict) # 两种模型评估结果print('线性回归模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),Ss_y.inverse_transform(lr_y_predict))print('梯度下降模型的均方误为:',mean_squared_error(ss_y.inverse_transform(y_test),Ss_y.inverse_transform(sgdr_y_predict)) return None 逻辑回归案例代码

具体见文件夹Regression里的Logistic Regression.ipynb

PS

上面的代码暂时还没有上传~~
以上便是我学习机器学习以来,在参考别人帖子与博客后,理解后自己整理的一些关于回归算法的知识点和实例。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。