机器学习(一)梯度下降算法的实现及过程分析

机器学习(一)梯度下降算法

        因为算法最好能应用到实际问题中才会让读者感到它的真实的用处,因此首先我来描述一个实际问题(梯度下降算法用以帮助解决该问题):给定一个指定的数据集,比如由若干某一地区的房屋面积和房屋价格这样的数据对(area, price)组成的集合(吴恩达老师的课程是启蒙课程所以举该例子),我的目标是通过一个学习算法得到一个预测房价和房屋面积之间的函数,然后给定一个新的房屋面积,用这个函数来预测房价。如下图所示:

 

我的解决思路大致如下:

1、我找了一个很小的数据集,有两个特征X1,X2,一个输出Y;

                                        

2、根据我的数据假设我的预测函数是一个线性函数 h(x):

(为什么是线性函数一方面是因为通过我的数据点的分布可以预测我的预测函数模型,另一方面我希望通过一个不是很复杂的函数来帮助我先理解到梯度下降算法到底做了什么,这算一个线性回归问题。)

3、此时我的目标是通过求得函数中的参数来得到预测函数 h (x), 合理的预测函数应该和实际值的差值越小越好,因此如果我能使预测函数值和实际值的差值越小那么说明我的预测函数越好,因此通过求使下面的 cost function J(Θ) 取得最小值的参数组合便能得到我的预测函数 h(x);

4、如何求 J(Θ) 的最小值呢,就是应用阶梯下降算法。对于每一个参数都先设置一个初始点,然后按照下面的原则不断的进行值的更新:

       

从表达式可以看出,通过对J(Θ) 求导,从Θ的初始点开始,相当于每次都朝着一个下降最快的方向更新值,其中 α 是 learning rate, 相当于求导选定下降方向,learning rate 决定下降步长, 从算法实现的结果你会发现不一样的 α 会产生不一样的结果,合适的步长才能得到最好的结果。通过将求导结果代入后得到:

因此接下来我们要做的就是对每个参数都进行迭代更新,直至收敛得到局部最优解:

接下来就是算法的实现了,通过实现得到参数的值然后得到预测函数最后进行预测。

这是我实现这一小块的算法截图:

其中会涉及到一些向量的计算,给定数据集以后将输入 X 和输出 Y 都用向量表示(这可得好好儿学学!)另外其中的 loss 是用来记录每次迭代后得到的预测函数和实际值的差值,gradient 是用来记录每次下降的梯度,这样能更直观的看到这个算法究竟在干啥!值得注意的还有迭代的次数 maxIteration , 它和 α 一起可以得到参数的最优解。

这是我的测试数据集,输入的是X1和X2:

下面是我用不同的 α 值和 maxIteration 值测试后的结果:

α =  0.05,maxIteration = 10;(因为我这次输出的辅助信息多,所以只选了很少的迭代次数,给大家看一下过程)

你会发现,每次的loss值都在变大,参数值也变得越来越离谱,预测结果更是不敢恭维,仅仅10次就这么大了。我又冒死试了一下迭代1000次只输出预测值,别的信息不输出:

结果就是 nan。

然后我改变了一下我的 α 值,α =0.001 迭代10次输出一些辅助信息:

你会清楚的看见 loss 在逐渐变小,gradient 下降的很合理,结果也令人比较满意。迭代1000次看看结果吧:

嗯,可以接受,如果仔细的看看 上上.....图,你会发现 loss 减小的速度很慢,这很有可能证明你的 α 值 太小了,所以逐渐增大 α 值 然后输出结果:

 α = 0.005 ,maxIteration = 1000

 α = 0.01 ,maxIteration = 1000

α = 0.01 ,maxIteration = 2000

α = 0.01 ,maxIteration = 5000

        到这就发现随着迭代次数的增加,输出已经不再改变了,这你应该能证明什么叫收敛了!

        对于大牛们来说这太小儿科了,但是对于新手上路来说,还是很开心的,也觉得很神奇。

        最后如果您有什么建议的话我非常乐意接受,也希望可以一起学习!

      (奥对,如果你也想要和我一起学习算法、机器学习的内容,如果你也有奇思妙想的话,欢迎扫描下面的二维码关注我的公众号“说疯话的小聋瞎”! 嘻嘻!)

注:原始数据集和测试数据集来自https://www.jianshu.com/p/9bf3017e2487#

微信扫一扫
关注该公众号

转载于:https://www.cnblogs.com/elsaSong/p/8620129.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

quick time不可用_那些校园中“不可言说”的鄙视链

原标题:那些校园中“不可言说”的鄙视链俗话说,有人的地方就有江湖,有江湖的地方总有人喜欢论论剑,分个高低,更何况是聚集了五湖四海人群的大学呢!今天小U总结出了一篇高校鄙视链大全,快来看看符…

select怎么设置默认值_20200817:详细说下数据倾斜怎么解决?

福哥答案2020-08-17:数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。很可能有几周甚至几月都要头疼于数据倾斜导致的各类诡异的问题。数据倾斜是指:…

邢不行python资源_邢不行—数字货币python量化投资

本帖最后由 ynjie 于 2020-10-14 21:39 编辑课时1.1 什么是量化投资.mp4课时1.2 数字货币市场特点.mp4课时1.3 2018量化炒币7大玩法复盘.mp4课时1.4 量化策略案例:Excel演示定投策略.mp4课时1.5 量化策略案例:Python演示定投策略.mp4课时1.6 量化策略案例…

数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...

移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响…

ASP.NET Core Docker Jenkins 零基础持续集成实战

一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker 二.git管理软件的选择 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置。采用go语言开发的gogs来代替,搭建方便(不到10分…

vs 启动调用的目标发生异常_协程中的取消和异常 | 取消操作详解

在日常的开发中,我们都知道应该避免不必要的任务处理来节省设备的内存空间和电量的使用——这一原则在协程中同样适用。您需要控制好协程的生命周期,在不需要使用的时候将它取消,这也是结构化并发所倡导的,继续阅读本文来了解有关…

java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下:HttpURLConnection文件上传HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器上传代码如下:package com.util;import java…

mkdir-yum-tree命令应用案例

案例: 请用一条命令完成目录创建/hello/world/test 解答: mkdir -p /hello/world/test -p 递归创建目录,没有子目录创建。 案例: 打印hello/目录的结构 [roothello110 ~]# tree hello/ -bash: tree: command not found 发…

pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...

作者:陈洪瀚 /洪瀚笔记知乎专栏摘要:介绍了使用PyTorch和torchvision加载训练好的全卷积网络FCN或DeepLab模型,并对PASCAL VOC图像进行分割并显示结果。网址:github代码链接, 码云代码链接陈洪瀚​www.zhihu.com一. 准备实验数据下…

python selenium chrome获取每个请求内容_python+selenium调用chrome打开网址获取内容

通过selenium库,python可以调用chrome打开指定网页并获取网页内容或者模拟登陆获取网页内容1,安装selenium和配置chromedriver安装seleniumC:\Users\cord> pip install selenium配置chromedriver该下载什么版本根据浏览器版本以及附录的版本对照表下载…

系统目录结构 ls命令 文件类型 alias命令

2019独角兽企业重金招聘Python工程师标准>>> 2.1/2.2 系统目录结构 /bin:bin是Binary的缩写,该目录下存放的是最常用的命令。 /boot:该目录下存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 …

运维老鸟教你安装centos6.5如何选择安装包

原文:http://oldboy.blog.51cto.com/2561410/1564620 ------------------------------------------------------------------------------ 近来发现越来越多的运维小伙伴们都有最小化安装系统的洁癖,因此,找老男孩来咨询,这个“洁癖”好习惯…

服务器centos怎么部署_我什么都不会,怎么拥有自己的个人博客呢

博客每个人都想拥有一个属于自己的博客,可以分享自己的心得、技术等,可以很好地展示自己的作品,但是自己又什么都不会怎么才能拥有自己的个人博客呢?一、搭建个人博客需要什么呢(1)购买服务器,个人博客可以购买香港服务…

java 过滤器 过滤文件中的文件_Java 使用FileFilter过滤器对文件进行搜索

FileFilter概述java.io.FileFilter是一个接口,是File的过滤器。该接口的对象可以传递给File类的listFiles(FileFilter filter)作为参数,FileFilter接口中只有一个方法。boolean accept(File pathname):测试pathname是否应该包含在当前File目录中&#xf…

修改yum的镜像服务器为阿里云

1、进入阿里云镜像网站 http://mirrors.aliyun.com/ 2、选择centos---help 3、安装help里的步骤进行操作 1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /e…

面试记录

东信北邮 智能终端开发工程师 笔试部分 首先去做了一套笔试题,前面选择题都是android基础,后面是sql语句。 有一个问题说的是runtime exception,有四个选项: a. ArithmeticException b. lllegalArgumentException c. NullPointerE…

python有类似mybatis的框架_为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子?...

892019-03-30 21:23:21 08:00 1看了这么多回复。忍不住了!1. hibernate 历史悠久并不代表过时,mybatis 这种方式就是未来吗?肯定不是。数据库就是用来存数据的,联表查询一大堆只能说明数据结构设计是有问题的,只是不…

c# 模拟登陆 webbrowser 抓取_《VR+电力——更换绝缘子培训》已登陆Pico Neo 2

原标题:《VR电力——更换绝缘子培训》已登陆Pico Neo 2

java instanceof 继承_Java中的instanceof关键字

Java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。也就是说:使用…

中文导致Mybatis无效的列索引

<!-- 普铁 --><select id"selectTrainSceneThrough" parameterType"HashMap" resultType"HashMap">select ROUND(("普铁用户专网总流量KB""普铁用户公网总流量KB")/1024/1024,3) as total_dataflow,"普铁用…