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

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

因为算法最好能应用到实际问题中才会让读者感到它的真实的用处,因此首先我来描述一个实际问题(梯度下降算法用以帮助解决该问题):给定一个指定的数据集,比如由若干某一地区的房屋面积和房屋价格这样的数据对(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

时间: 2024-08-18 21:35:22

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

机器学习:梯度下降算法原理讲解

背景 学习机器学习时作为基础概念. 转载自: <梯度下降算法原理讲解--机器学习> 1. 概述 梯度下降(gradient descent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值. 本文将从一个下山的场景开始,先提出梯度下降算法的基本思想,进而从数学上解释梯度下降算法的原理,解释为什么要用梯度,最后实现一个简单的梯度下降算法的实例! 2. 梯度下降算法 2.1 场景假设 梯度下降法的基本思想可以类比为

【机器学习】(2):梯度下降算法

上一章中我们简单介绍了机器学习的大概情况,今天我们开始循序渐进地学习机器学习中相关的算法.在接触经典算法之前,我们先来了解下"梯度下降"算法.一.算法背景    作为一个算法演示的背景,我们还是采用上一章中提到的房屋价格和房屋大小的关系问题,不同大小的房屋对应不同的房价,我们要通过分析已有的数据样本,来预 测一个新样本的房价.这里其实是监督式学习中回归问题的简单应用,如果所有的特性因变量都是一次的关系,那么就称之为一个线性回归问题.下面就是我们解决 问题的基本思路:    首先从训练集

斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法

应该是去年的这个时候,我开始接触机器学习的相关知识,当时的入门书籍是<数据挖掘导论>.囫囵吞枣般看完了各个知名的分类器:决策树.朴素贝叶斯.SVM.神经网络.随机森林等等:另外较为认真地复习了统计学,学习了线性回归,也得以通过orange.spss.R做一些分类预测工作.可是对外说自己是搞机器学习的还是不太自信,毕竟和科班出身的各位大牛相比自己对这些模型.算法的理解只能算是“知其然而不知其所以然”,用起来总感觉哪里不对劲. 因此,去年早早地就把网易公开课上Andrew大神的斯坦福CS229课程

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,

Hulu机器学习问题与解答系列 | 十七:随机梯度下降算法之经典变种

这是本周第二篇机器学习,也是Hulu面试题系列的第十七篇了~ 之前的所有内容都可以在菜单栏的"机器学习"中找到,愿你温故,知新. 今天的内容是 [随机梯度下降算法之经典变种] 场景描述 提到Deep Learning中的优化方法,人们都会想到Stochastic Gradient Descent (SGD),但是SGD并不是理想的万金油,反而有时会成为一个坑.当你设计出一个deep neural network时,如果只知道用SGD来训练,不少情况下你得到一个很差的训练结果,于是你放弃

【机器学习】对梯度下降算法的进一步理解

单一变量的线性回归 让我们依然以房屋为例,如果输入的样本特征是房子的尺寸,我们需要研究房屋尺寸和房屋价格之间的关系,假设我们的回归模型训练集如下 其中我们用 m表示训练集实例中的实例数量, x代表特征(输入)变量, y代表目标变量 (x,y)代表实例 根据线性回归模型hΘ(x) = Θ0+Θ1*x1       (Θ是模型参数) 需要找出Θ0,Θ1,使得平均误差最小.J(Θ0,Θ1)称为代价函数. 根据不同的特征值,我们按照如下步骤进行迭代更新,以此来得到不同的Θ: 执行过程中,同步更新Θ0,Θ

机器学习(Andrew Ng)笔记(二):线性回归模型 &amp; 梯度下降算法

线性回归模型 回忆一下第一节课提出的预测房屋每平方单位价格的例子.在这个例子中,我们可以画一条直线,尽量符合数据点的分布趋势.我们已经知道这是一个回归问题,即预测连续值的输出.实际上,这是一个典型的线性回归模型.之所以这样定义,大概是因为回归方程可以用一个线性函数来表示. 我们可以假设这个线性函数为: 这是一个关于x的一元一次方程.其中两个参数的值我们还不知道,要根据训练集中的数据求解出来.这里要定义几个概念,我们已经有的数据,即房屋面积与单价的对应数据对,被称作训练集.x作为房屋面积,称作输入

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

梯度下降算法的一点认识

昨天开始看Ng教授的机器学习课,发现果然是不错的课程,一口气看到第二课. 第一课 没有什么新知识,就是机器学习的概况吧. 第二课 出现了一些听不太懂的概念.其实这堂课主要就讲了一个算法,梯度下降算法.到了教授推导公式的时候感觉有点蒙,不过后来仔细想想,也大概理解了,这个算法并没有想象的晦涩.在这堂课中,梯度下降算法是为了解决线性回归问题的.视频中的例子是给你一堆训练数据,(房子面积和对应房价),如果此时给你一个没有出现过的房子面积数据,您能否给出正确的房价?解决思路是首先要看出来房子面积跟房价之