博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习总结:机器学习(三)
阅读量:4952 次
发布时间:2019-06-12

本文共 1749 字,大约阅读时间需要 5 分钟。

最小均方算法(LMS Algorithm)及其matlab代码实现

  线性回归的目的是寻找θ使得J(θ)取得最小值。如何使J(θ)取得最小值,可以采用梯度下降算法逐步逼近。

  算法过程如下:

  (1)初始化一个θ,可以取随机值;

  (2)采用如下公式进行迭代:

      

    其中,θjθ的第j个分量,α是步长,也称为学习速率(Learning rate)。最后那一部分是J(θ)关于θj的导数。

  对于只有一个训练样本的情况,我们有:

      

  由此,可以得到一个训练样本时的更新规则:

      

    这个规则称为LMS更新规则,也叫做Widrow-Hoff学习规则。上标i表示第i个训练样本,不是指数。

  对于一个训练集来说,有两种更新的策略:

    第一种,称之为批量梯度下降法,就是说每一次更新时,都要涉及所有的样本。更新公式如下:

       

    公式中,m为训练样本的数目。参考一个训练样本的更新规则,可以很明显的看到,批量梯度下降算法是在每一轮迭代中,所有的训练样本更新规则相叠加。

    第二种,称之为随机梯度下降法,就是说在每训练一个样本时,都进行一次更新操作。更新操作如下:

        

    随机梯度下降法相对于批量梯度下降算法来说,它不用每次更新都把所有的训练样本都计算一遍,它的更新速度比批量梯度下降算法更快,消耗的内存更少。当然,随机梯度下降法每一次更新完成后,结果不一定会变得更好,甚至会变得更坏,但总体趋势是梯度下降的。当样本的数目m很大时,随机梯度下降法能更好的解决问题。

 

以下是批量梯度下降算法的matlab实现:

%LinRegTrain function is used to train data for linear regression.

%FEATURE is the matrix that composed of features of the training examples.
%VALUE is the matrix that composed of output values of the training
%examples.
%THETA is the parameter of the hypotheses function.
function [theta] = LinRegTrain(feature,value)
length = size(feature,2);
num = size(feature,1);
features = [ones(num,1) feature];
theta = zeros(length + 1,1);
alpha = 0.005/(num*10);
%theta = 1 + rand(1,length + 1);
for i = 1:100000;
  delta = value - features*theta;
%    costvalue = delta'*delta;
%    if costvalue < 1e-10;
%    display 'break the if condition'
%    break;
%    end
  theta = theta + alpha*features'*delta;
%    theta(1) = theta(1) + alpha*sum(delta.*features(:,1));
%    theta(2) = theta(2) + alpha*sum(delta.*features(:,2));
end
hypvalue = features*theta;
plot(feature,hypvalue,'rx-',feature,value,'bo');
end

matlab中有一个regress函数实现线性回归,以上函数是自己写的,不是很严谨,但最终效果勉强能和regress函数差不多。其中最难控制的是其步长alpha,对于最终结果影响甚大。

转载于:https://www.cnblogs.com/guobiao819/p/lms.html

你可能感兴趣的文章
单片机成长之路(51基础篇) - 016 常见总线类型
查看>>
数据结构——Currency System in Geraldion
查看>>
python基础知识三 字典-dict + 菜中菜
查看>>
Java 集合工具类---------- Collections类
查看>>
JS-- this
查看>>
用requests库实现登录遇到的问题
查看>>
[Unity动画]03.动画事件
查看>>
关于IIS6.0里跑fastCGI的一个待解问题
查看>>
几种访问Web Service的方式--适用于任何平台任何客户端
查看>>
南阳275
查看>>
k-means原理、优缺点及改进
查看>>
【适配整理】Android 7.0 调取系统相机崩溃解决android.os.FileUriExposedException
查看>>
GitLab版本管理
查看>>
install mongodb on macos
查看>>
A-Z
查看>>
iOS 代码混淆的简单使用
查看>>
购物车升级版本
查看>>
移动端遇到的问题
查看>>
ES6中变量的解析赋值的用途
查看>>
load()和get()的区别
查看>>