[机器学习-2]梯度下降法及实现(python)

  • 样例(Example)
  • 利普西斯连续(L-continuity)
  • 利普西斯光滑(L-smoothness)
  • 凸集(Convex Set)
  • 凸函数(Convex Function)
  • 强凸(Strong Convexity)
  • 方向导数
  • 泰勒展开
  • 局部与全局最优解
  • 梯度下降法
  • 回溯线算法(backtracking line search)
  • 精确线算法(exact line search)

样例(Example)

!!想看实现,直接跳转回溯线算法与精确线算法。
今天,在做机器学习的作业的时候,我的室友和我说线性回归那道题目应该用步长来做,如果大于步长减半,后来我实现这种算法以后,发现和题目要求不一样。我室友说的是回溯线算法(backtracking line search),而我最后实现的是精确线算法(exact line search)。现在和大家介绍这两种经典算法

Figure 1
题目长这样,就是用线性回归求一个二范数的最小值.
下面简单介绍一下GD所需的数学知识

利普西斯连续(L-continuity)

利普西斯光滑(L-smoothness)


由利普西斯光滑我们可以得到一个重要的结论

凸集(Convex Set)

凸函数(Convex Function)

需要说明的是,目前仍有许多数提到上凸与下凸的概念,这种定义已经过时而且明显没有搞清楚凸函数的真正定义是什么,凸函数指的是从函数上任意两点连线,线段与函数包围的区域为凸集

强凸(Strong Convexity)


类似的,根据强凸性,我们又可以得到机器学习中一些比较好的性质

方向导数

泰勒展开

机器学习中常见的泰勒展开为二阶,二阶导为海森矩阵,根据精度要求可能会高阶展开

局部与全局最优解

以最小解为例


对于凸集,有一个非常好的性质,也是机器学习里非常关心的一个性质就是局部最优解即全局最优解,所以很多时候会把一个集合拆成多个凸集进行优化

梯度下降法

梯度下降法通俗地讲就是沿负梯度方向迭代

在步长不变时可能会出现这种问题

回溯线算法(backtracking line search)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
def load_csv(path, data):data_read = pd.read_csv(path)list = data_read.values.tolist()data = np.array(list)# print(data)return datadef f(x,A,b):func = np.dot(A,x)-bresult = 0.5*np.linalg.norm(func, ord = 2)return resultdef step_gradient(func, start, A, b, array1, array2, array3):alpha = 1step = 0index = []for i in range(0, 1000):index.append(i)alpha = 1step =alphagrad = np.dot(A.T,(np.dot(A,start)-b)) # 1000*500 * 1000 *500while(func(start,A,b)<func(start-step*grad,A,b)):step = step*0.5start = start - step*gradarray1 = np.append(array1, step)array2 = np.append(array2, np.linalg.norm(grad))array3 = np.append(array3, func(start, A, b))plt.figure(figsize=(4,3))plt.semilogy(index,array1)plt.figure(figsize=(4,3))plt.semilogy(index,array2)plt.figure(figsize=(4,3))plt.semilogy(index,array3)plt.show()return 1
if __name__ == '__main__':initi = np.zeros((1000,1)).reshape(1000,1)b = np.zeros((500,1)).reshape(500,1)A = np.zeros((500,1000)).reshape(500,1000)b = load_csv('b.csv', b)A = load_csv('A.csv', A)function = f(initi, A, b)arr_1 = np.array([])arr_2 = np.array([])arr_3 = np.array([])step_gradient(f, initi, A, b, arr_1, arr_2, arr_3)

输出如下
第一张是步长的变化,第二章是向量模的变化,最后是函数值得变化

精确线算法(exact line search)


先求出目标函数的梯度为A.T(Ax-b)

然后我才用了近似算法,其实严格来说固定变量以后,就是一个二次函数求极值的问题,只是我这里方便起见采用了近似

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
def load_csv(path, data):data_read = pd.read_csv(path)list = data_read.values.tolist()data = np.array(list)# print(data)return datadef f(x,A,b):func = np.dot(A,x)-bresult = 0.5*np.linalg.norm(func, ord = 2)return resultdef step_gradient(func, start, A, b, array1, array2, array3, matrix):step = 0index = []for i in range(0, 1000):index.append(i)step =0grad = np.dot(A.T,(np.dot(A,start)-b)) # 1000*500 * 1000 *500up = np.dot(grad.T,grad)down = np.dot(grad.T, matrix)down = np.dot(down, grad)step = up/downstart = start - step*gradarray1 = np.append(array1, step)array2 = np.append(array2, np.linalg.norm(grad))array3 = np.append(array3, func(start, A, b))plt.figure(figsize=(4,3))plt.semilogy(index,array1)plt.figure(figsize=(4,3))plt.semilogy(index,array2)plt.figure(figsize=(4,3))plt.semilogy(index,array3)plt.show()return 1
if __name__ == '__main__':initi = np.zeros((1000,1)).reshape(1000,1)b = np.zeros((500,1)).reshape(500,1)A = np.zeros((500,1000)).reshape(500,1000)hessian = np.zeros((1000,1000)).reshape(1000,1000)b = load_csv('b.csv', b)A = load_csv('A.csv', A)hessian = np.dot(A.T,A)function = f(initi, A, b)arr_1 = np.array([])arr_2 = np.array([])arr_3 = np.array([])step_gradient(f, initi, A, b, arr_1, arr_2, arr_3, hessian)

输出如下,可以看到下降的非常快

[机器学习-2]梯度下降法及实现(python)相关推荐

  1. 【机器学习】机器学习之梯度下降法简单应用(Python)

    本文主要是用Python简单程序应用梯度下降法解决一个实际问题,帮助理解机器学习在预测方面的功能作用. 一.通过一个人的身高体重性别预测他的腰围 数据训练集(可以通过调查获得,这里只列4个,还可以更多 ...

  2. python机器学习:梯度下降法

    ---<从机器学习到深度学习>刘长龙 用梯度下降法求解因变量最低点步骤: 任取一点为起始点 查看在当前点向哪个方向移动能得到最小的z值,并向该方向移动 重复该步骤,直到无法找到更小的z值, ...

  3. Python机器学习:梯度下降法004实现线性回归中的梯度下降法

    直接上代码 import numpy as np import matplotlib.pyplot as plt 生成模拟数据 np.random.seed(666) x = 2 * np.rando ...

  4. Python机器学习:梯度下降法002模拟实现梯度下降法

    模拟实现梯度下降法 import numpy as np import matplotlib.pyplot as plt 生成数据 plot_x = np.linspace(-1,6,141) pri ...

  5. 梯度下降法原理及python实现

    文章目录 引言 梯度 单变量梯度下降法 单变量梯度下降原理 python实现单变量梯度下降 批量梯度下降法 批量梯度下降法原理 python实现多变量梯度下降 梯度下降算法数据归一化 随机梯度下降法 ...

  6. 【深度学习的数学】2-11 用Excel体验梯度下降法(用python实现)

    梯度下降法是神经网络计算的基础,下面我们用python编程来体验它! 代码 # -*- coding: utf-8 -*- """ @File : 梯度下降法求函数最小值 ...

  7. 机器学习之梯度下降法(GD)和坐标轴下降法(CD)

    梯度下降法 梯度下降法(Gradient Descent, GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极 ...

  8. 机器学习_梯度下降法(BGD、SGD、MBGD)

    除了最小二乘法求解损失函数之外,梯度下降法是另一种求解损失函数的方法. 梯度下降的直观理解,先用一个例子说明: 假设找凸函数y=x**2的最小值,通过迭代的方式,假设x=2时,y=4,x=0.8时,y ...

  9. 机器学习:梯度下降法,几种实现策略

    文章目录 梯度下降法 目标函数:软间隔SVM的目标函数 第一种:使用误差最大样本做梯度下降 第二种:随机选择一个样本做梯度下降 第三种:使用全部样本做梯度 第四种:min-batch随机梯度下降 第五 ...

最新文章

  1. pytorch的backward
  2. 文本转化工具dos2unix
  3. xdebug影响php运行速度
  4. WHYZOJ-#60 工资(二分)
  5. 用WPF做了几个小游戏
  6. 最短路径次短路径算法
  7. insert_text
  8. 远场语音识别套件评测
  9. 联系人备份--vcf
  10. 文件上传利器SWFUpload入门简易教程(转)
  11. 小程序用php还是java_微信小程序用php开发的可以吗
  12. 标准化建站开拓者王征,教你搭建一个有用的品牌官网
  13. 手游App渠道推广统计
  14. 五.从卡门涡街看FLUENT设置依据
  15. neighbors.kneighbors_graph的原理和应用
  16. C语言作业-小学生测验
  17. openwrt广告屏蔽大师修复补丁luci-app-adbyby plus + lite
  18. 华为nova8计算机功能在,华为nova8隐藏功能怎么开启(华为nova8的隐藏功能)
  19. coreldraw x7 分布_CorelDRAW X7新特性汇总
  20. LYNC 2010 RTM版正式公布

热门文章

  1. 区块链入门-带你搞懂区块链-熊丽兵-专题视频课程
  2. 财税市场进入SaaS时代,云帐房挖掘代账新格局?
  3. 5个能让你快速变强的自学网站,每天学习一点点,进步很明显
  4. finBERT-金融英文情感分析运行介绍
  5. unity中实现镜子效果
  6. 邪恶的大叔(push)
  7. Kubernetes笔记(九) Kubernetes 应用封装与扩展
  8. 2021 SoK: The Progress, Challenges, and Perspectives of Directed Greybox Fuzzing
  9. 智能型水泵控制器,双路排污、稳压控制、带BA接口
  10. 卡罗拉新手详情介绍图解,还没提车的可以先过来看看!