首页/新闻资讯/正文详情

线性回归初步理解

发布时间:2026/11/11 13:01:47 来源:云帆数科 栏目:资讯中心
线性回归初步理解
章节 1线性回归算法简单线性回归线性回归是一种经典的有监督学习算法用于研究因变量目标变量和一个或多个自变量影响因素之间的线性关系。简单线性回归关注单一自变量对目标变量的影响而多元线性回归则处理多个自变量的情况。目标变量y是需要预测的值可以是连续值自变量X是影响目标变量的因素可以是连续值或离散值。简单线性回归模型公式为 y a bx其中a是截距b是斜率。看一个美国人发火箭的例子Actual value真实值即已知的 yPredicted value预测值是把已知的 x 带入到公式里面和猜出来的参数 a,b 计算得到的Error误差预测值和真实值的差距最优解尽可能的找到一个模型使得整体的误差最小整体的误差通常叫做损失 LossLoss整体的误差loss 通过损失函数 loss function 计算得到最优解是通过最小化整体误差损失来找到最佳模型。真实值Actual value、预测值Predicted value和误差Error的关系用于评估模型效果。多元线性回归现实生活中往往有多个因素影响结果y。这时自变量的数量从X1变为Xn简单线性回归的公式不再适用。多元线性回归公式为 y XW ε其中W是特征的权值向量ε是误差向量。举例训练一个模型预测一个人有多漂亮历史数据包含人的一些指标和已知得分。在多元线性回归中W 是一维向量代表的是 W0 到 Wn我们也可以用线性代数的方式去 表达公式这时算法要求解的就是这个向量如果维度很多我们当然需要计算机帮助我们来求解了。章节2 从代码理解线性回归通过anaconda环境打开jupyter notebook正规方程处理线性回归# 支持python2和3from __future__ import division, print_function, unicode_literals# 导入必要的库import numpy as npimport os# 设置随机数种子让每一次用相同的数据进行训练时输出的结果一致np.random.seed(42)# 设置可视化的参数%matplotlib inlineimport matplotlib as mplimport matplotlib.pyplot as pltmpl.rc(axes, labelsize14)mpl.rc(xtick, labelsize12)mpl.rc(ytick, labelsize12)# 设置文件保存路径PROJECT_ROOT_DIR .CHAPTER_ID training_linear_models# 无视一些不重要的警告import warningswarnings.filterwarnings(actionignore, message^internal gelsd)用y43xy43x高斯噪声来生成数据点x0x0为1import numpy as npX 2 * np.random.rand(100, 1) #X中所有点的范围在0-2之间y 4 3 * X np.random.randn(100, 1)# 绘制定义好的方程plt.plot(X, y, b.)plt.xlabel($x_1$, fontsize18)plt.ylabel($y$, rotation0, fontsize18)plt.axis([0, 2, 0, 15])# save_fig(generated_data_plot)plt.show()通过求解MSE的最小值^θ(XT⋅X)−1⋅XT⋅yθ^(XT⋅X)−1⋅XT⋅y 求解θθ值这就是一个模型的训练过程X_bnp.c_[np.ones((100, 1)), X]# add x0 1 to each instancetheta_bestnp.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) theta_bestarray([[4.21509616], [2.77011339]])把x01x01带入可计算出y值这里面因为有X_new是二维的所以x0也是二维的这里X_new是两个数据点X_newnp.array([[0], [2]]) X_new_bnp.c_[np.ones((2, 1)), X_new]# add x0 1 to each instancey_predictX_new_b.dot(theta_best) y_predictarray([[4.21509616], [9.75532293]])plt.plot(X_new, y_predict, r-, linewidth2, labelPredictions) plt.plot(X, y, b.) plt.xlabel($x_1$, fontsize18) plt.ylabel($y$, rotation0, fontsize18) plt.legend(locupper left, fontsize14) plt.axis([0, 2, 0, 15]) plt.show()LinearRegression是基于最小二乘方法的线性模型训练过程使用正规方程求解fromsklearn.linear_modelimportLinearRegression lin_regLinearRegression() lin_reg.fit(X, y) lin_reg.intercept_, lin_reg.coef_(array([4.21509616]), array([[2.77011339]]))lin_reg.predict(X_new)array([[4.21509616], [9.75532293]])梯度下降训练线性回归eta0.1 n_iterations1000 m100 thetanp.random.randn(2,1)foriterationinrange(n_iterations): gradients2/m*X_b.T.dot(X_b.dot(theta)-y) thetatheta-eta*gradientsthetaarray([[4.21509616], [2.77011339]])预测X_new_b.dot(theta)array([[4.21509616], [9.75532293]])绘制不同学习率下的学习过程theta_path_bgd[] # 函数 绘制不同学习率下的学习过程defplot_gradient_descent(theta, eta, theta_pathNone): mlen(X_b) plt.plot(X, y, b.) n_iterations1000foriterationinrange(n_iterations):ifiteration10: y_predictX_new_b.dot(theta) styleb-ifiteration0elser-- plt.plot(X_new, y_predict, style) gradients2/m*X_b.T.dot(X_b.dot(theta)-y) thetatheta-eta*gradientsiftheta_pathisnotNone: theta_path.append(theta) plt.xlabel($x_1$, fontsize18) plt.axis([0, 2, 0, 15]) plt.title(r$\eta {}$.format(eta), fontsize16)np.random.seed(42) thetanp.random.randn(2,1)# random initializationplt.figure(figsize(10,4)) plt.subplot(131); plot_gradient_descent(theta, eta0.02) plt.ylabel($y$, rotation0, fontsize18) plt.subplot(132); plot_gradient_descent(theta, eta0.1, theta_paththeta_path_bgd) plt.subplot(133); plot_gradient_descent(theta, eta0.5) plt.show()这里面绘制了前10次迭代的情况可以看到第一幅图由于学习率很小梯度下降进展很慢。第二幅图可以看到当学习率适中时梯度下降可以快速开始寻找最优解。第三幅图当学习率比较大时梯度下降很可能永远找不到最优解。随机梯度下降每次用所有样本来梯度下降依然很慢可以每次只用其中一个值尽管会引入一些不规律性算法也没法收敛到最优解但通常最后的参数还不错另外也可以帮助跳出局部最优解。一个优化的方法是逐渐的减小学习率这个过程称为模拟退火。theta_path_sgd[] mlen(X_b) np.random.seed(42) n_epochs50 t0, t15, 50# learning schedule hyperparametersdeflearning_schedule(t):returnt0/(tt1) thetanp.random.randn(2,1)# random initializationforepochinrange(n_epochs):foriinrange(m):ifepoch0andi20:# not shown in the booky_predictX_new_b.dot(theta)# not shownstyleb-ifi0elser--# not shownplt.plot(X_new, y_predict, style)# not shownrandom_indexnp.random.randint(m) xiX_b[random_index:random_index1] yiy[random_index:random_index1] gradients2*xi.T.dot(xi.dot(theta)-yi) etalearning_schedule(epoch*mi) thetatheta-eta*gradients theta_path_sgd.append(theta)# not shownplt.plot(X, y, b.)# not shownplt.xlabel($x_1$, fontsize18)# not shownplt.ylabel($y$, rotation0, fontsize18)# not shownplt.axis([0, 2, 0, 15])# not shownplt.show()thetaarray([[4.21076011], [2.74856079]])sklearn库中可以使用函数实现随机梯度下降SGDRegressor()fromsklearn.linear_modelimportSGDRegressor sgd_regSGDRegressor(max_iter50, tol-np.infty, penaltyNone, eta00.1, random_state42) sgd_reg.fit(X, y.ravel())SGDRegressor(eta00.1, max_iter50, penaltyNone, random_state42, tol-inf)sgd_reg.intercept_, sgd_reg.coef_(array([4.16782089]), array([2.72603052]))小批量梯度下降在迭代的每一步批量梯度使用整个训练集随机梯度使用仅仅一个实例在小批量梯度下降中它则使用一个随机的小型实例集。它比随机梯度的主要优点在于你可以通过矩阵运算的硬件优化得到一个较好的训练表现尤其当你使用GPU进行运算的时候。theta_path_mgd[] n_iterations50 minibatch_size20 np.random.seed(42) thetanp.random.randn(2,1)# random initializationt0, t1200, 1000deflearning_schedule(t):returnt0/(tt1) t0forepochinrange(n_iterations): shuffled_indicesnp.random.permutation(m) X_b_shuffledX_b[shuffled_indices] y_shuffledy[shuffled_indices]foriinrange(0, m, minibatch_size): t1 xiX_b_shuffled[i:iminibatch_size] yiy_shuffled[i:iminibatch_size] gradients2/minibatch_size*xi.T.dot(xi.dot(theta)-yi) etalearning_schedule(t) thetatheta-eta*gradients theta_path_mgd.append(theta)thetaarray([[4.25214635], [2.7896408 ]])三个方法的训练过程数据theta_path_bgdnp.array(theta_path_bgd) theta_path_sgdnp.array(theta_path_sgd) theta_path_mgdnp.array(theta_path_mgd)# 可视化 三个方法的训练过程数据 plt.figure(figsize(7,4)) plt.plot(theta_path_sgd[:, 0], theta_path_sgd[:, 1], r-s, linewidth1, labelStochastic) plt.plot(theta_path_mgd[:, 0], theta_path_mgd[:, 1], g-, linewidth2, labelMini-batch) plt.plot(theta_path_bgd[:, 0], theta_path_bgd[:, 1], b-o, linewidth3, labelBatch) plt.legend(locupper left, fontsize16) plt.xlabel(r$\theta_0$, fontsize20) plt.ylabel(r$\theta_1$ , fontsize20, rotation0) plt.axis([2.5, 4.5, 2.3, 3.9]) plt.show()从图中可以看出随机梯度下降法的稳定性较差波动较大批量梯度下降法虽然整体性能最优但是训练过程的时耗最大小批量梯度下降法则是两者的折中在大多数任务下的使用率最高。

相关推荐

C++面向对象(二)
C++面向对象(二)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 0:05:15

搭建蜂鸟E203FLASH启动的仿真环境,运行Hello World例程
搭建蜂鸟E203FLASH启动的仿真环境,运行Hello World例程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/9 3:51:41

C# 多窗体显示(MDI)
C# 多窗体显示(MDI)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 0:13:17

永川考电工证在哪上课怎么考才能拿到高含金量证书
永川考电工证在哪上课怎么考才能拿到高含金量证书

永川考电工证在哪上课怎么考才能拿到高含金量证书 你是不是也担心自己学历不高,连电工证都报不了?别急,今天就给你讲讲【永川考电工证在哪上课】的全过程,还有如何拿到高含金量证书,让你一次搞懂,不走弯路。… · 2026/11/11 13:01:28

特种工直播报名指南保姆级教程:怕被中介坑?看这篇就够了
特种工直播报名指南保姆级教程:怕被中介坑?看这篇就够了

特种工直播报名指南保姆级教程:怕被中介坑?看这篇就够了 你是不是也这样, 不知道去哪报名怕被中介坑 ?特种作业操作证,尤其是【特种工直播】类的证书,现在越来越被重视,但很多人在报名时一筹莫展,不是被各种中介信息绕晕,就是不清楚报名流程,甚至… · 2026/11/11 13:01:28

注销的电工证多久拿证?南阳应届生避坑指南来了
注销的电工证多久拿证?南阳应届生避坑指南来了

注销的电工证多久拿证?南阳应届生避坑指南来了 你是不是也遇到过这种情况:手上有个 注销的电工证 ,想重新考个新证,但又不知道去哪儿报名,怕被中介骗钱?别急,今天就给你讲清楚, 注销的电工证多久拿证… · 2026/11/11 13:01:28

带电工证找工作别踩坑 郑州报考避坑指南全解析
带电工证找工作别踩坑 郑州报考避坑指南全解析

带电工证找工作别踩坑 郑州报考避坑指南全解析 证书过期了不知道怎么复审延期?别慌,这不是个例,很多人都遇到过这个问题。尤其是像电工这类需要持证上岗的行业,证书有效期一旦过了,就可能面临不能上岗、不能接项目、甚至被单位辞退的风险。如果你正在找… · 2026/11/11 13:01:28

长安电工证图片官方回应:怕考不过白交培训费?看懂这些不踩坑
长安电工证图片官方回应:怕考不过白交培训费?看懂这些不踩坑

长安电工证图片官方回应:怕考不过白交培训费?看懂这些不踩坑 怕考不过白交培训费?长安电工证图片网上一搜一大堆,但真要报名的人才知道,光看图根本考不过。官方回应明确表示,电工证考试内容严格,光靠死记硬背不行,还得掌握实操技巧,咱们得把功夫下在… · 2026/11/11 13:01:28

长安电工证图片怎么查?郑州报考避坑指南来了!
长安电工证图片怎么查?郑州报考避坑指南来了!

长安电工证图片怎么查?郑州报考避坑指南来了! 实操考试心里没底怕挂科?别慌,今天给你一份 长安电工证图片 查询的详细流程和郑州报考避坑指南,全是干货,看完就能少走弯路! 一、实操考试怎么准备?看看别人是怎么过的… · 2026/11/11 13:00:28

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43

_中职电工证最新政策解读
_中职电工证最新政策解读

中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52

昆明电工证培训价格值不值得考?老电工告诉你真相
昆明电工证培训价格值不值得考?老电工告诉你真相

昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52

特种电缆张工网上查询全攻略:外省证如何转过来
特种电缆张工网上查询全攻略:外省证如何转过来

特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码