刚学习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
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