使用随机梯度算法对高斯核模型进行最小二乘学习法的MATLAB程序源码分析

  1. n=50;N=1000;x=linspace(-3,3,n)';X=linspace(-3,3,N)';
  2. pix=pi*x;y=sin(pix)./(pix)+0.1*x+0.05*randn(n,1);
  3. hh=2*0.3^2; t0=randn(n,1);e=0.1;
  4. for o=1:n*1000
  5. i=ceil(rand*n);
  6. ki=exp(-(x-x(i)).^2/hh);t=t0-e*ki*(ki'*t0-y(i));
  7. if(norm(t-t0)<0.000001),break,end
  8. t0=t;
  9. end
  10. K=exp(-(repmat(X.^2,1,n)+repmat(x.^2',N,1)-2*X*x')/hh);
  11. F=K*t;
  12. figure(1);clf;hold on;axis([-2.8 2.8 -0.5 1.2]);
  13. plot(X,F,'g-');plot(x,y,'bo');



刚学习MATLAB,看到书上这段源码试着研究了一下。原书(图解机器学习)中第七行if语句有点印刷错误。


第一行:此行主要是为了生成50个随机样本点和1000个测试点的x值(n=50;N=1000;x=linspace(-3,3,n)';X=linspace(-3,3,N)';)


linspace是Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。
linspace后的单引号表示转置


第二行:此行主要是为了生成50个随机样本点的y值(pix=pi*x;y=sin(pix)./(pix)+0.1*x+0.05*randn(n,1);)

MATLAB中 /是传统意义上的矩阵的除法,而./是两个矩阵的对应元素相除  乘法、次方同理

randn(N,1)就是产生服从方差为1,均值为0 ( 即N(0,1) )的Gaussian分布的随机噪音


 

第三行:hh是高斯核模型(K(x,c)=exp(-||x-c||^2/2h^2))的分母   t0=randn(n,1); 初始化t0      e=0.1;设定梯度下降的步幅为0.1

 

第四行:进入循环体


第五行:ceil(x):大于x 的最小整数

1,rand  生成均匀分布的伪随机数。分布在(0~1)之间
   主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
             rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
             rand(RandStream,m,n)利用指定的RandStream(随机种子)生成伪随机数


2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)
   主要语法:和上面一样


3,randi 生成均匀分布的伪随机整数

主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
 r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵


第六行:计算t直到满足第七行要求norm(t-t0)<0.000001

exp(x):e的x次方

第七行:满足则退出循环,否则继续

1、如果A为矩阵
n=norm(A) 
返回A的最大奇异值,即max(svd(A))
n=norm(A,p) 
根据p的不同,返回不同的值
p返回值

1     返回A中最大一列和,即max(sum(abs(A)))

2      返回A的最大奇异值,和n=norm(A)用法一样

inf    返回A中最大一行和,即max(sum(abs(A’)))

fro   A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A'*A)))


2、如果A为向量
norm(A,p)
返回向量A的p范数。即返回 sum(abs(A).^p)^(1/p),对任意 1<p<+∞.
norm(A)
返回向量A的2范数,即等价于norm(A,2)。
norm(A,inf) 
返回max(abs(A))
norm(A,-inf) 
返回min(abs(A))

第七行if语句写错了,应该是if(norm(t-t0)<0.000001),break,end

 

第八行:刷新t0,继续下降


第九行:结束循环体

第十行:

repmat(A,m,n):处理大矩阵且内容有重复时使用,其功能是以A的内容堆叠在(MxN)的矩阵B中,B矩阵的大小由MxN及A矩阵的内容决定,如果A是一个3x4x5的矩阵,有B = repmat(A,2,3)则最后的矩阵是6x12x5

 

第十一行:


第十二行:设定绘制区域

第十三行:绘制N,绘制n


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 最小二乘高斯牛顿迭代是一种数值优化算法,常用于解决非线性最小二乘问题。它通过迭代求解方程组的方式,不断逼近最优解。 在matlab中,可以使用lsqnonlin函数实现最小二乘高斯牛顿迭代。该函数需要提供目标函数和初始猜测值,并返回最优解及其标准误差。 首先,需要定义目标函数,即希望最小化的非线性方程组。假设目标函数为f(x),其中x是待求解参数向量。然后,需要提供初始猜测值x0。 然后,可以调用lsqnonlin函数来进行最小二乘高斯牛顿迭代。函数的调用形式为[x,resnorm,residual,exitflag,output,lamda,jacobian] = lsqnonlin(fun,x0),其中fun是自定义函数的句柄,x0是初始猜测值。 lsqnonlin函数会返回求解得到的最优解x,残差平方和resnorm,残差向量residual,迭代退出标志exitflag,迭代输出信息output,拉格朗日乘子向量lambda以及雅可比矩阵jacobian。 最后,可以根据需要使用最优解x和相关结果进行进一步的分析和处理。在使用lsqnonlin函数时,需要注意选择合适的求解选项、设置迭代停止准则、处理迭代结果等。 总之,最小二乘高斯牛顿迭代是一种非常有效的求解非线性最小二乘问题的方,在matlab中可以通过lsqnonlin函数来实现。 ### 回答2: 最小二乘高斯牛顿迭代是一种在数值优化中常用的算法,用于解决非线性最小二乘问题。在MATLAB中,可以通过以下步骤来实现该算法: 1. 定义问题:首先,需要定义待优化的目标函数和约束条件。对于最小二乘问题,目标函数通常是一个多元函数,将其定义为一个MATLAB函数。 2. 设置初始点:选择一个合适的初始点作为算法的起始点。这个初始点可以是问题的一个合理猜测。 3. 进行迭代:通过迭代更新变量的值来优化目标函数的取值。在每一次迭代中,通过高斯牛顿方计算出目标函数在当前点的梯度和海森矩阵。然后,使用这些信息来调整变量的值,使得目标函数得到优化。 4. 停止准则:设置一个停止准则,判断算法是否已经收敛。例如,可以通过判断目标函数的变化是否足够小来决定是否停止迭代。 5. 输出结果:当算法收敛后,输出最优值以及达到该值的变量取值。 需要注意的是,最小二乘高斯牛顿迭代算法在一些问题中可能会陷入局部最优解,因此在实际应用中,可能需要进行多次迭代,以找到全局最优解。 总的来说,通过MATLAB中的最小二乘高斯牛顿迭代算法,我们可以有效地解决非线性最小二乘问题,并获得问题的最优解。 ### 回答3: 最小二乘高斯牛顿迭代是一种常用的非线性最小二乘问题求解方。在MATLAB中,可以通过以下步骤实现该算法: 1. 定义目标函数: 首先,需要定义问题的目标函数。对于最小二乘问题,目标函数一般为残差平方和。可以使用MATLAB中的函数来表示。 2. 初始化参数: 在进行迭代之前,需要对参数进行初始化。可以使用初始猜测值或者其他方来设置初始参数。 3. 进行迭代: 在迭代过程中,需要利用高斯牛顿方不断更新参数值。具体步骤如下: a) 计算雅可比矩阵:根据目标函数,计算当前参数值下的雅可比矩阵。 b) 计算梯度矩阵:根据雅可比矩阵和残差向量,计算该轮迭代的梯度矩阵。 c) 计算海塞矩阵:进一步根据雅可比矩阵计算海塞矩阵,即梯度矩阵的乘积。 d) 更新参数:根据当前参数值、梯度矩阵和海塞矩阵,通过牛顿迭代计算新的参数值。 e) 判断终止条件:如果满足预设终止条件,则停止迭代;否则,返回第a)步计算雅可比矩阵,继续进行迭代。 4. 得到最优解: 当迭代终止时,得到的最后一组参数值即为最优解。可以将其作为问题的最小二乘解。 最小二乘高斯牛顿迭代方是一种有效的非线性最小二乘问题求解方,在MATLAB中可以通过以上步骤进行实现。根据实际问题的特点,需要根据具体情况调整迭代次数和终止条件,以得到更准确的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值