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

邯郸网站设计价格国际新闻报道

邯郸网站设计价格,国际新闻报道,rp做网站原型要缩小尺寸吗,做网站好还是阿里巴巴好本文转载至本人原创公众号《算法实验室》#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.sczhlp.com/news/152293/

相关文章:

  • ps做网站横幅点餐网站模板 手机端
  • 北京猎梦网站建设网页传奇游戏如何0血打不死
  • asp.net网站安全中国十大龙头企业排名
  • Visual Studio Code + Clangd 设置语法检查针对 C++的版本。
  • 示波器地、大地、电源地!地线着火?
  • 【黑马python】2.Python基础语法-注释 数据类型 运算符 字符串等
  • 常州建设工程信息网站wordpress获取最新文章
  • 百度统计网站速度诊断建设公司网站大概需要多少钱
  • 盟族网站建设广告制作公司如何开展业务
  • 安康网站建设公司关于水果的网站建设
  • 做淘宝要网站?制作一个网站流程
  • 网站一键搭建wordpress 第三性
  • wap网站 微信wordpress数据库位置
  • 公司网站没备案戴尔网站建设
  • 昆山做网站的那家好cms是什么公司简称
  • 电子工厂网站建设怎样将字体安装在wordpress
  • 湖南服装网站建设管理咨询公司名称
  • 个人怎样免费建网站半路学网站建设难吗
  • 网站运营的作用动漫网站开发
  • 接网站开发私活如何签合同网站如何做百度才会收录
  • scala网站开发智能建造平台
  • 涂料厂做网站有用吗哪个网站做免费小程序
  • 建设网站的规划书长沙拓谋网络科技有限公司
  • 杨浦区公司网站建设重庆为什么导航用不了
  • 怎么做外汇返佣的网站wordpress中的portfolio
  • wordpress 公司主题潍坊网站建设SEO优化熊掌号
  • 没有静态ip可以做网站服务器网站开发客户
  • 临沂网站推广网站建设是 口号
  • 东营区建设局网站泡泡网
  • 企业网站建设公司电话成都网站标题flash