当前位置: 首页 > news >正文

龙岩网站定制北京平面设计网站

龙岩网站定制,北京平面设计网站,宣威做网站建设的公司,网站网站做维护本文转载至本人原创公众号《算法实验室》#xff0c;欢迎关注#xff0c;有问题可随时联系#xff0c;转载请注明出处。 原文链接#xff1a;线性回归公式推导及代码实现 一、概述 本文有以下几个方面构成#xff0c;在每一部分都给出了详细的公式推导及numpy代码。 ①…本文转载至本人原创公众号《算法实验室》欢迎关注有问题可随时联系转载请注明出处。 原文链接线性回归公式推导及代码实现 一、概述 本文有以下几个方面构成在每一部分都给出了详细的公式推导及numpy代码。 ①、线性回归的累加及矩阵公式 ②、损失函数的表达MSE、极大似然估计 ③、损失函数求解最小二乘法梯度下降法 ④、sklearn的代码求解 ⑤、总结 本文所有的向量都默认为列向量粗体均表示向量或矩阵。 xij 表示第 i 个样本的第 j 个特征设共有 m 个样本 n 个特征其中 w0 为偏置项b xi0 表示第 i 个样本的第0个特征为1 xi表示第 i 个样本。 ①线性回归的累加形式表达式为 ②矩阵形式的表达式为 二、损失函数 下面介绍两种得到线性回归损失函数的思路 1、MSE 要想最后拟合的结果比较好那么要保证函数实际值与估计值之间的差距小也即 使得上式结果最小的参数 w即为最优解但是绝对值对于求导等计算不太方便所以采用取平方计算同时为了使得损失函数不至于太大除以样本数m所以上式的损失函数等价于下式如果不除以样本量那么在数据量特别多的情况下损失函数计算的的结果过大不利于计算以及后面采用梯度下降算法更新迭代时所需的每步的步长就需要特别小 将该损失函数称作MSEMean Squared Error均方误差。 2、极大似然估计 上面讲述了得到损失函数的第一种方式下面从概率的角度讲解第二种方式。 由于是拟合结果真实值与估计值之间总是存在误差的。真实值可以表示为估计值与误差的和: 由于误差是一个随机变量他是符合均值为0方差为的 σ2 高斯分布。对于第i个样本误差的概率密度为 那么如何求得参数w的最优值呢我们可以从极大似然估计的角度来考虑极大似然估计的基本思路就是假设未知参数已经定下来了但是参数未知所有样本发生的概率我们也能求出来当取到某些特定的样本时概率最大的参数就是这个未知参数。换句话说就是使样本最有可能发生的的情况下的参数。 根据极大似然函数法构建似然函数似然函数的最大值就是参数w的最有可能的取值具体过程如下 要使似然函数最大也就是最小化减号后面的项所以最终的损失函数为 同理为了避免损失函数过大在后面采用梯度下降算法时除以样本数得到MSE 代码如下 #累加形式损失函数 def loss_function_sum(x,y,theta):anp.dot(x,theta)-yreturn np.sum(a**2)/x.shape[0] 矩阵形式的损失函数 代码如下 #矩阵形式损失函数 def loss_function_matrix(x,y,theta):anp.dot(x,theta)-yreturn np.dot(a.T,a)/x.shape[0] 采用sklearn中的波士顿房价数据集验证损失函数是否一致。注意以下两点 ①、在文章一开始我就说了所有向量默认为列向量所以为了保证计算的正确性一定要将所有向量变成默认的列向量形式。         ②、在特征矩阵前拼接一个全为1的列向量表示偏置项。 import numpy as np import pandas as pd from sklearn.datasets import load_boston from sklearn.preprocessing import StandardScaler dataload_boston().data yload_boston().target.reshape(-1,1) dataStandardScaler().fit_transform(data) x0np.ones([data.shape[0],1]) #构建全为1的列向量与特征矩阵拼接 datanp.hstack([x0,data]) thetanp.ones(data.shape[1]).reshape(-1,1) #初始化theta也就是参数w print(loss_function_matrix(data,y,theta),loss_function_sum(data,y,theta)) 可以看出损失给定任意参数w损失函数的值一样证明矩阵及向量形式的损失函数我们并没有写错并且结果一样因此为了方便以后我们仅采用向量形式进行损失函数的代码编写。 三、损失函数求解 下面采用两种方法来求解损失函数最小二乘法、梯度下降法并且每种方法分别采用累加和矩阵两种形式推导并给出响应的python代码验证。 1、先导知识 为了对损失函数进行求导需要有矩阵求导的先导知识 2、 最小二乘法 最小二乘法的思想就是高中数学的求极值的思想对损失函数求导令导函数也就是梯度为        0求解的参数就是极值参数。 2.1、累加形式的梯度 2.2、矩阵形式的梯度 令梯度为0就是最小二乘法最后的结果所以 代码实现如下 inv_matrixnp.linalg.inv(np.dot(data.T,data)) wnp.dot(inv_matrix,np.dot(data.T,y)) print(w) 3、梯度下降 这里不再对梯度下降的原理进行过多阐述总而言之就是利用梯度来不断迭代更新参数值梯度迭代停止的条件有 ①、每次更新的梯度的值小于某一阈值 ②、两次迭代之间的差值小于某一阈值 ③、自定义迭代次数达到这一次数时迭代停止。 梯度下降分为批量梯度下降BGD、随机梯度下降SGD、小批量梯度下降MBGD。 首先先写出累加及矩阵形式的梯度下降函数 #累加形式梯度函数 def gradient_function_sum(x,y,theta):sum0for i in range(x.shape[0]):_(np.dot(x[i,:],theta)-y[i] )*np.array(x[i,:]).reshape(-1,1)sumsum_ return sum*2/x.shape[0]#矩阵形式梯度函数 def gradient_function_matrix(x,y,theta):anp.dot(x,theta)-yreturn 2*np.dot(x.T,a)/x.shape[0] 以上两种形式所得到的的结果也是一模一样的为了计算方便下面仅采用矩阵表达式。 3.1、BGD BGD是一次利用所有样本进行计算计算效率较低。其代码如下 #限制迭代次数控制程序停止 def bgd_gradient_descent1(x,y, alpha,epoch):thetanp.ones(x.shape[1]).reshape(-1, 1)gradient gradient_function_matrix(x,y,theta)for _ in range(epoch):thetatheta-alpha*gradientgradient gradient_function_matrix(x,y,theta)return theta#限制梯度的大小控制程序停止 def bgd_gradient_descent2(x,y, alpha):thetanp.ones(x.shape[1]).reshape(-1, 1)gradient gradient_function_matrix(x,y,theta)while not all(np.abs(gradient) 1e-5):thetatheta-alpha*gradient gradient gradient_function_matrix(x,y,theta)return theta 3.2、SGD SGD是每次利用一个样本进行梯度迭代所以运算效率高但是也正是因为用一个样本来决定梯度方向导致其梯度的方向变化很大不能很快的收敛于全局或者局部最优值。代码如下 def sgd(x,y, alpha):xnp.mat(x)ynp.mat(y)thetanp.ones(x.shape[1]).reshape(-1, 1)thetanp.mat(theta)knp.random.randint(x.shape[0]) gradient 2/x.shape[0]*x[k].T*(x[k]*theta-y[k]) while not all(np.abs(gradient) 1e-5):thetatheta-alpha*gradient gradient gradient_function_matrix(x,y,theta)return theta 3.3、MBGD MBGD是每次利用部分样本进行迭代是BGD与SGD的一个折中。代码如下 def mbgd(x,y,alpha,frac):#frac为抽取样本的比例xpd.DataFrame(x)thetanp.ones(x.shape[1]).reshape(-1, 1)thetanp.mat(theta)rowx.sample(fracfrac,replaceFalse).index xnp.mat(x.loc[row,:])ynp.mat(y[[row]])gradient2/x.shape[0]*x.T*(x*theta-y) while not all(np.abs(gradient) 1e-5): thetatheta-alpha*gradient gradient gradient_function_matrix(x,y,theta)return theta 四、sklearn求解 1、最小二乘法 from sklearn.linear_model import LinearRegression,SGDRegressor dataload_boston().data yload_boston().target dataStandardScaler().fit_transform(data) lrLinearRegression() lr.fit(data ,y) print(lr.intercept_) print(lr.coef_) 2、梯度下降法 dataload_boston().data yload_boston().target dataStandardScaler().fit_transform(data) lrSGDRegressor() lr.fit(data ,y) print(lr.intercept_) print(lr.coef_) 五、总结 本文共讨论的线性回归的四种大方法最小二乘法、BGD、SGD、MBGD以及各种方法的矩阵及累加形式实现。 通过运行以上代码可以看出所有的方法求出来的结果基本上差别不大。
http://www.hkea.cn/news/14451394/

相关文章:

  • 泰国网站域名深圳媒体网络推广有哪些
  • 只做英文网站 域名有什么要求网页链接生成
  • 为古汉字老人做网站wordpress分类别名获取文章
  • 建设网站项目的目的是什么意思白银市城县建设局网站
  • 怎么在网站上做旅游推广wordpress主题有什么用
  • 河南网站建设yijuce萍乡公司做网站
  • 株洲做网站的公司私人下载服务器
  • 像乐视做硬件的视频网站网站群建设报价
  • 网站的主要栏目及功能互联网公司排名500强名单
  • 百度网站主要提供的服务网站繁体和中文这么做
  • 人工智能写作网站大学生可以做的网站项目
  • 在哪可以建一个网站专业加速器产业园
  • 网站怎么做301定向个人怎么申请微信小程序
  • 建设银行网站不能建行转他行了软文案例
  • 温州网站优化排名推广做ppt模板网站有哪些
  • 物业网站建设方案长沙免费旅游景点大全
  • 申请微信支付公司网站网站上怎么做推广
  • 房产网站 模板中山营销型网站设计
  • 网站设计的主题网站建设插导航条
  • 网站建设用户调研个人网站创建平台
  • 商城类网站怎么推广wordpress aj提交评论
  • 邯郸建设网站的公司如何搭建高访问量的网站
  • 网站开发 网页设计北京师范大学出版社湖北正规网站建设检修
  • 做淘宝那样的网站要多少钱西安网站建设公司西安网络公司
  • 怎么制作网站app河北seo公司
  • 网站建设负责那内容上传吗做新浪网网站所需的条件
  • 地方网站商城怎么做茂名网站建设价格
  • 网站制作的相关术语有哪些网站开发亿玛酷专注4
  • 高密哪里做网站好成都销售型网站
  • 做网站被骗怎么办梅州市住房和城乡建设局官方网站