函数凸凹性:


用到的范数知识:

详细解释:每一个元素的平方再开方。

补充损失函数: Huber Loss知识点

loss函数可以通过loss参数进行设置。SGDRegressor支持以下的loss函数:


SGD:随机梯度下降四个损失函数:

事例代码:

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0) #随机数种子
#构造训练数据,这个数据不包括x0;
x=np.arange(0,10,0.2) #生成50个样本
#训练样本的个数
m=len(x)
#构造x0
x0=np.full(m,1.0) #50个1
#将x0和x拼接起来,组成完整的训练数据
input_data=np.vstack([x0,x]).T #将偏置b作为权向量的第一个分量
featureNum=input_data.shape[1] #维度
print(input_data)
#y_train生成y,其实就是input_data对应的标签
target_data=2*x+5+np.random.randn(m) #最后一项是偏差m=5就行了,x是50的向量 #两种终止条件
loop_max=1000000 #最大迭代次数,防止死循环
epsilon=1e-5 #阈值 #初始化权值
theta=np.random.randn(featureNum)
alpha=0.00001 #步长(注意取值过大会导致震荡即不收敛,过小收敛速度变慢)
#记录误差变量
error=np.zeros(featureNum)
count=0 #循环次数
#全部用向量表示,theta的维度和error维度一样。 while count < loop_max:
count += 1
sum_m=np.zeros(2)
for i in range(m):
diff = (np.dot(theta,input_data[i])-target_data[i])*input_data[i]
sum_m=sum_m+diff #当alpha取值过大时,sum_m会在迭代过程中溢出 theta = theta-alpha*sum_m #注意步长alpha(0.005的时候会震荡)的取值,过大会导致震荡
#判断是否已经收敛
if np.linalg.norm(theta-error)<epsilon: #norm()范数:error是之前的theta,theta是更新后的,相减是求距离,也就是求相关性:距离很小的时候,相当于theta值没有更新
break
else:
error=theta
print('loop count=%d'%count,'\tw:',theta)
print('loop count=%d'%count,'\tw:',theta) plt.plot(x,target_data,'g*')
plt.plot(x,theta[1]*x+theta[0],'r')
plt.show()

输出:
省略···

BGD(批量梯度下降)--学习笔记的更多相关文章

  1. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

      梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent).随机梯度下降(Stochastic Gradient Descent ...

  2. online learning,batch learning&批量梯度下降,随机梯度下降

    以上几个概念之前没有完全弄清其含义及区别,容易混淆概念,在本文浅析一下: 一.online learning vs batch learning online learning强调的是学习是实时的,流 ...

  3. 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比[转]

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  4. 【转】 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  5. batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)

    批量梯度下降是一种对参数的update进行累积,然后批量更新的一种方式.用于在已知整个训练集时的一种训练方式,但对于大规模数据并不合适. 随机梯度下降是一种对参数随着样本训练,一个一个的及时updat ...

  6. NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降

    1.前言 这几种方法呢都是在求最优解中常常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中.都是环绕下面这个式子展开: 当中在上面的式子中hθ(x)代表.输入为x的时候的其当时θ參数下的输出值 ...

  7. 机器学习-随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  8. Tensorflow细节-P84-梯度下降与批量梯度下降

    1.批量梯度下降 批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新.从数学上理解如下: 对应的目标函数(代价函数)即为: (1)对目标函数求偏导: (2)每次迭代对参数进 ...

  9. 【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值

    [Python]机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值 本题目来自吴恩达机器学习视频. 题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方), ...

随机推荐

  1. DatePicker去掉头布局的两种方法

    5.0+ private void hideDatePickerHeader() { ViewGroup rootView = (ViewGroup) datePicker.getChildAt(0) ...

  2. IntelliJ:自动生成JavaBean的读写方法

    1.定义好一个class,其中写好private属性. 2.右键点击该class,在generate中选择自动根据模板生成的读写方法.

  3. redis数据类型的使用及介绍

    Redis数据类型 1.Sting类型 set命令 设置键值,存在则覆盖,不存在则新建 set key value EX 秒 设置有效时长为秒 nx 如果键不存在则新建,如果存在返回nil xx 只有 ...

  4. DFT/FFT/NTT

    在Seal库和HElib库中都用到了NTT技术,用于加快多项式计算,而NTT又是FFT的优化,FFT又来自于DFT,现在具体学习一下这三个技术! 基础概念 名词区分 1.DFT:离散傅立叶变换 2.F ...

  5. DDos攻击竟然这么恐怖,它的原理是什么?

    DDOS的定义 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击, ...

  6. PHP-制作验证码

    <?php //11>设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1> ...

  7. php jsonp接口

    //jsonp回调 $callback = isset($_GET['callback']) ? trim($_GET['callback']) : ''; //jsonp回调参数,必需 $cgc_k ...

  8. 七天接手react项目 系列

    七天接手react项目 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7天 r ...

  9. Flink域名处理

    概述 最近做了一个小任务,要使用Flink处理域名数据,在4GB的域名文档中求出每个域名的顶级域名,最后输出每个顶级域名下的前10个子级域名.一个比较简单的入门级Flink应用,代码很容易写,主要用到 ...

  10. 单循环链表(基于c语言)

    #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef int LDataType; ...