机器学习笔记 1 LMS和梯度下降(批梯度下降) 20170617
https://www.cnblogs.com/alexYuin/p/7039234.html
# 概念
LMS(least mean square):(最小均方法)通过最小化均方误差来求最佳参数的方法。
GD(gradient descent) : (梯度下降法)一种参数更新法则。可以作为LMS的参数更新方法之一。
The normal equations : (正则方程式,将在下一篇随笔中介绍)一种参数更新法则。也可以作为LMS的参数更新方法之一。
三者的联系和区别:LMS是一种机器学习算法。但是最小化均方误差的方法不唯一,采用GD或者正则方程式都是方法之一。
# 准备样本
必须要先理解样本集X的排布:
为了方便叙述,我们定义样本特指一个样本,样本集特指一整个样本矩阵。
大写 X 表示样本集矩阵。排布:一行是一个样本。
小写 x 表示样本集矩阵的元素。x的上标:样本序号(这个括号只是为了区别于指数,记号而已);x的下标:样本的维度。
这个样本集有3个样本,每个样本2维。
* 样本的维度和所需要拟合的参数个数相同。(后续会说明,先不急提问)
大写Y表示所有样本的结果的集合的矩阵。
小写y的上标:第i个样本的结果。
* 样本的结果,也就是Y矩阵的元素数量和样本的数量相同.
X和Y的关系:从一个样本来看,一个样本(2维度)通过映射得到y。
LMS的目的:通过假设这种映射关系为如下,估计出最匹配的参数theta。至于该怎么更新参数,就是GD和正则方程的任务了。
式中的h就是样本估计值(y是样本的实际值);matrixθ是参数θ组成的列矩阵;matrixX是样本按列排的矩阵,亦即以上的大写X。
没有和吴恩达大神的讲义一致,但是我觉的h的公式应该是没问题的,mX是行,mθ是行。这点欢迎大家讨论,我也有点困惑。
使用 n 表示样本的维度
使用 m 表示样本的数量
# 数学说明
LMS表示:最小化均方误差求参数的方法,首先要给出均方误差的定义
1. 均方误差
参数说明:
m 是样本的数量
i 是样本的数量,样本总数是m,参见样本X的说明
J 是cost function ,损失函数。J的形式就是“均方”。
h 就是估计的映射关系(但是自变量其实是一个行矩阵),自变量x加上标:表示的是第i个样本,行矩阵输入到h中。h(x)得到是一个值。
y 加上标:表示第i个样本的实际输出值
LMS的目的:就是找到使得J最小的参数θ(矩阵),认为这就是h的最优参数,此时的h最接近样本的真实输出y。
问题转化为:求最小化J的参数θ(矩阵),θ的最优解问题。
方法之一:梯度下降。实际上是:在每次迭代中,提出了一种θ的更新法则
2. 梯度下降的应用
梯度下降的表达式:
头晕了,来,解释一下。
(1)是梯度下降的定义式,其中α表示学习率,根据经验设置(后面的例子中,设置为0.01)。θ这里是矩阵,带下标的是θ内的元素,可参看(2)。
(2)是梯度的计算过程。将J的定义代入,m表示样本数量。下标 j 表示的是维度的序号,这里表示的是参数的序号。参数的序号和维度序号,这里讲解一下:
注意,这里样本增加了一维x0,原因参见#样本准备
为了满足h的形式,所以我们设置参数θ的矩阵为[θ0,θ1,θ2]。
这里x的上标是为了强调这是第i个样本。x的下标是维度。
参数的数量和样本维度一致,这样看起来就显然啦。
这里就注意到了,式中 x上标i 就是矩阵,θ这里也是矩阵。
这里也没有吴恩达大神的讲义一致。
(3)计算偏微分,求和号要是不理解,写两项算一下就知道了。y上标i 是数值,对θ下标j求导为零。h对θ下标j求导得x下标j上标i。
(4)(5)就是最后的结果,其中(5)是每项θ下标j的更新法则。
数学推导的(5)一般不直接拿来写成代码,因为代码实现上,矩阵形式更有优势。
3. 梯度下降的矩阵表达式
其中:θ和 x上标i 是矩阵,定义参见2(2);X和Y也是矩阵,参见#准备样本;
矩阵形式的好处是,求和过程被简单的表达(行矩阵*列矩阵=值),代码实现就方便了。
每次迭代,自变量就是第i个样本(x上标i),因变量就是参数矩阵(θ)。
至此,就可以准备开始写代码了。
# matlab例程

function LMS_GD()
% 参数准备 m表示矩阵
% mX每行是一个样本,样本按照列排列
% mY是每个样本的输出值,按列排列
% mTheta是参数矩阵,按照行排列,参数数量=样本维度
% alpha是学习率
mX = [1,1; 1,2; 1,3; 1,4; 1,5; 1,6; 1,7; 1,8; 1,9];
mY = [1.1; 1.5; 2.1; 2.9; 3.5; 4.4; 5.1; 6.7; 8.3];
mThetas = [0.1, 0.1];
alpha = 0.001; % 应该注意,超过二维的样本及其输出结果是画不出来的。
% mX的第一列是x下标0,令其等于1,为了形式统一。要是为了简单,去掉也可以
% 那mX就变成了一维的
% 本例,使用mX的第二列作为x坐标,mY为y坐标绘制图形。
plot(mX(:,2),mY,'o');
hold on; % 以下的计算过程,在上面的讲解中已经很详细了,来一个万恶的字...
% 略。
error = 1.0;
for i = 1:1000
i % 为了显示
mTemp = (mY - mX*mThetas');
mThetas = mThetas + alpha * mTemp'*mX; lasterror = error;
error = 0.5*mTemp'*mTemp if(abs(error-lasterror) < 0.1)
break;
end
end mNewY = mX*mThetas';
plot(mX(:,2), mNewY,'r'); end

# Python例程(3.5)
需要numpy库的支持(free and easy to install)
需要matplotlib库的支持(free and easy to install)

from numpy import *
import matplotlib.pyplot as plt def LMS_GD() :
# 准备样本
mX = mat([[1,1], [1,2], [1,3], [1,4], [1,5], [1,6], [1,7], [1,8], [1,9]])
mY = mat([1.1, 1.5, 2.1, 2.9, 3.5, 4.4, 5.1, 6.7, 8.3])
mY = mY.T # 转置
mThetas = mat([0.1, 0.1])
alpha = 0.001 # 太大可能造成不收敛,太小速度太慢 # 显示
mlx = mX[0:,1] # 取第二列(序号0初始)
lx = mlx.tolist();
ly = mY.tolist();
plt.plot(lx, ly, 'ro');
# plt.show() # 迭代
error = 1.0
for i in range(1000) :
print('run %d times: error = %d' % (i, error)) mTemp = (mY - mX*mThetas.T)
mThetas = mThetas + alpha * mTemp.T * mX lasterror = error;
error = 0.5*mTemp.T * mTemp if abs(error-lasterror) < 0.1 :
break; # 显示
mNewY = mX*mThetas.T
ly = mNewY.tolist()
plt.plot(lx, ly,)
plt.show() return True

Bingo!
以上。
机器学习笔记 1 LMS和梯度下降(批梯度下降) 20170617的更多相关文章
- 梯度下降&随机梯度下降&批梯度下降
梯度下降法 下面的h(x)是要拟合的函数,J(θ)损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(θ)就出来了.其中m是训练集的记录条数,j是参数的个数. 梯 ...
- 监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)
线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...
- 监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)
线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...
- 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
版权声明: 本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 前言: ...
- 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火
神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...
- 机器学习算法整理(一)线性回归与梯度下降 python实现
回归算法 以下均为自己看视频做的笔记,自用,侵删! 一.线性回归 θ是bias(偏置项) 线性回归算法代码实现 # coding: utf-8 get_ipython().run_line_mag ...
- Python机器学习笔记:不得不了解的机器学习知识点(2)
之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...
- 机器学习笔记(四)Logistic回归模型实现
一.Logistic回归实现 (一)特征值较少的情况 1. 实验数据 吴恩达<机器学习>第二课时作业提供数据1.判断一个学生能否被一个大学录取,给出的数据集为学生两门课的成绩和是否被录取 ...
- Python机器学习笔记:使用Keras进行回归预测
Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...
随机推荐
- js动态规划---最少硬币找零问题
给定钱币的面值 1.5.10.25 需要找给客户 36 最少找零数为: 1.10.25 function MinCoinChange(coins){ var coins = coins; var ca ...
- nodejs+websocket聊天工具
该聊天工具,使用nodejs起服务,websocket前端页面,聊天工具,,可以有任意多的人数参与聊天,里面的用户ID为模拟ID. 先上图 文件夹结构, 1.安装ws模块,npm install ws ...
- 解决PuTTY中文乱码
转载:http://lhdeyx.blog.163.com/blog/static/3181969720091115113716947/ 打开putty,选择 Category中的Windows--- ...
- ubuntu下ldd,查看程序动态库信息
ldd list, dynamic, dependencies linux-vdso.so. => (0x00007ffe9d9b6000) libstdc++.so. => /usr/ ...
- php 下载完成后删除文件
最近遇到一个需求:下载用户上传的图片,但是图片不断更新. 1.需要将图片从图片服务器下载到网站后台服务器 2.压缩文件夹生成zip压缩包 3.下载压缩包 4.删除压缩包和临时文件夹 其中遇到了一个问题 ...
- vue中上传图片至阿里云oss
1.开通阿里云的oss服务这些这里就不多做介绍了 2.登入阿里云的后台管理系统创建一个Bucket 3.在后台管理系统中进入访问控制 4.点击用户管理->新建用户->填写相关信息,就生成了 ...
- EF或LINQ 查询时使用IN并且根据列表自定义排序方法
EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很多人不熟,经常会碰到一些写SQL语句时经常会用到的一些方法,而使用EF或LINQ ...
- JavaScript(四):运算符&数据类型转换
+:算符的加法:连接字符串 加法会将其它类型的值,自动转为字符串,然后再进行连接运算! var a=1+2; console.log('first: '+a); var a=1+2+'3';//先计算 ...
- Swift闭包(I) @autoclosure和@escaping的区别
1. 参考资料 https://www.cnblogs.com/sgxx/p/6209944.html https://www.jianshu.com/p/99ade4feb8c1
- this上下文一致
什么是this对象 先来说说什么是this对象吧,每个函数在调用的时候都会自动获取两个特殊变量:this和arguments对象.this值具体是指哪个对象是和该函数的执行环境相关的.如果是作为对象的 ...