梯度下降法思路就是,开始随机选择参数组合,计算代价函数,寻找到下一个能让代价函数下降最快的参数组合(对某一参数的偏导方向),然后不断重复这一过程,直到找到一个局部最小值。因为并没有计算过所有的参数组合,所以并不知道局部最小值是否是全局最小值。所以选择不同的初始参数组合,可能会找到不同的局部最小值。

可以做一个形象的比喻:把曲面图想象成一座山,你正站在山上的某点。在梯度下降算法中,我们要做的就是环绕四周,看看在那个方向上,用小碎步能尽快下山。然后到新的点,再看看哪个方向小碎步下山最快,不断重复,直到接近局部最低点。

批量梯度下降算法公式里面的α是学习率(步长),学习率越大,迈出的步子就越大。并且同时让所有的参数减去学习速率乘以代价函数的偏导。α的取值一般需要我们自己来取一个相对合适的值。如果太小每一次步长会很小,造成迭代次数过多。如果过大,那么很容易造成过拟合的情况。

并且随着迭代次数的增加,代价函数的导数会自动变小,相当于每迭代一次步长会变小,所以没有必要另外减小α,这也可以防止过拟合情况的出现。

在线性回归算法中,用到的梯度下降算法一般是批量梯度下降,就是在求偏导过程中需要求和运算。因此在每一个单独的梯度下降过程中,我们都需要对所有的样本求和。不过也有一些其他类型的梯度下降法,并不考虑整个数据集,而是关注训练集中一些小的子集,这称为随机梯度下降法。

梯度下降代码实现思路

首先定义一个输入函数,来负责输入特征和目标变量。还有一个预测函数负责输入训练集,返回预测结果。然后再定义一个实现梯度下降算法的函数,需要先设定好迭代次数和学习率,规定好参数的初始值(一般为0)。并且计算好数据长度。然后在有限的迭代次数内进行梯度下降。这里我们已经算出了梯度下降算法的结论,所以直接代公式进行累加操作,同时更新两个参数。

import numpy as np

class linear():

def __init__(self):

self.b = 0

self.k = 0

def cost(self,x_data, y_data, b, k):#计算损失函数

m = float(len(x_data))

sum = 0

for i in range(0, len(x_data)):

sum += (y_data[i] - (k*x_data[i] + b))**2

return sum / 2.0*m

def gradient(self,x_data, y_data):#进行梯度下降

lr = 0.001#学习步长

k = 0#斜率

b = 0#截距

epochs = 3000 #最大迭代次数

#计算总数量

m = float(len(x_data))

#循环epochs次

for i in range(epochs):

k_gradient = 0

b_gradiet = 0

#计算梯度总和再求平均

for j in range(0,len(x_data)):

k_gradient += (1/m)*((x_data[j] * self.k + self.b) - y_data[j])

b_gradiet += (1/m)*((x_data[j] * self.k + self.b) - y_data[j]) * x_data[j]

#更新k和b

self.k -= lr * k_gradient

self.b -= lr * b_gradiet

return self.k,self.b

#输入数据集,输出截距和斜率

def fit(self,x_data,y_data):

self.k,self.b = self.gradient(x_data, y_data)

print('loss =:',self.cost(x_data, y_data, self.b, self.k),'b =:',self.b,'k =:',self.k)

return self.k,self.b

#返回预测结果

def predict(self,x_test):

y_predict = self.k*x_test+self.b

return y_predict

python底层代码里面的参数_梯度下降算法讲解及python底层实现相关推荐

  1. python函数如何实现可变参数_【已解决】Python中实现可变参数的函数

    [问题] Python中,希望实现一个可变参数的函数. [解决过程] 相关代码如下:(extractOK, extractedBlogUser, generatedBlogEntryUrl) = ca ...

  2. python调用exe程序 传入参数_关于使用c#调用python脚本文件,脚本文件需要传递参数...

    最近工作中需要干这个事,网上搜了搜资料,改了改,基本是这样 建立一个控制台应用程序: 比如 加入我在命令行直接调用python脚本,命令为 y安装python后,添加环境变量,path下面,加入路径. ...

  3. python向数据库中添加参数_第四篇:python操作数据库时的传参问题

    python在操作数据库执行sql的时候我们经常会遇到传参问题,以下是我总结的几种方法: 1.格式化字符串 city = 'beijing' cur.execute("SELECT * FR ...

  4. python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...

    [向量化] 单一变量的线性回归函数,我们将其假设为:hθ(χ)=θ0+θ1χh_\theta(\chi)=\theta_0+\theta_1\chihθ​(χ)=θ0​+θ1​χ但是如果我们的变量个数 ...

  5. 梯度下降算法的正确步骤_梯度下降算法

    梯度下降算法的正确步骤 Title: What is the Gradient Descent Algorithm and its working. 标题:什么是梯度下降算法及其工作原理. Gradi ...

  6. python代码设置超参数_超参数调优总结,贝叶斯优化Python代码示例

    本文介绍超参数(hyperparameter)的调优方法. 神经网络模型的参数可以分为两类,模型参数,在训练中通过梯度下降算法更新: 超参数,在训练中一般是固定数值或者以预设规则变化,比如批大小(ba ...

  7. python训练模型函数参数_一步步亲手用python实现Logistic Regression

    前面的[DL笔记1]Logistic回归:最基础的神经网络和[DL笔记2]神经网络编程原则&Logistic Regression的算法解析讲解了Logistic regression的基本原 ...

  8. python语言原理_梯度下降算法的原理用Python语言实现,易于理解,python,更

    梯度下降 要找到某个函数的最小值,就是沿着该函数的梯度的负方向寻找.若寻找某函数最大值,则沿着梯度方向找. 那么梯度下降数学表示: :步长或叫学习率, :是函数关于w的导数 梯度上升数学表示: 上述某 ...

  9. python怎么理解函数的参数_理解Python中函数的参数

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

最新文章

  1. java类加载的表现形式
  2. 进大厂全靠自学,微软amp;头条实习生现身说法:我是这样自学深度学习的丨课程传送门...
  3. HDU 3400 Line belt【三分法】
  4. 性能测试工具SilkPerformer介绍
  5. YoloV5实战:手把手教物体检测
  6. ThinkPHP5 助手函数
  7. 第三季-第4课-Linux应用程序地址布局
  8. Git 提交代码步骤总结
  9. Word的样式库在 选项卡中_Word自动生成目录的四种方法步骤
  10. 锂电池健康状态估计(一)
  11. IJCAI-18 阿里妈妈搜索广告转化预测 Top2%思路
  12. Linux CentOS 系统实战笔记-基础篇
  13. ASICC码对照表整理
  14. vue在初始化时给scrollTop设置一个值,但scrollTop却始终为0
  15. centos-linux(64位)安装与配置
  16. HBase常见面试题
  17. mysql error 1146错误解决办法
  18. send函数给FTP服务器发消息,send函数给FTP服务器发消息
  19. tushare使用教程(附代码)
  20. 哪些进销存软件既好用又免费?

热门文章

  1. 游戏开发--开源软件7--xith3D(java 3D引擎)
  2. ASP.NET BookMark
  3. 顺天则昌,逆天则亡(2006-03-13 21:07:17)(新浪)
  4. 面试题3-二维数组中的查找
  5. redux常见问题答疑
  6. linux 搭建dns
  7. LINUX:GRUB破解root密码【远程不可
  8. Java 动态语言
  9. 读取并修改App.config文件(转载)
  10. 项目要开始,应该提出什么样的要求?