统计机器学习导论第十六章非参数估计——基于高斯KDE的通过似然交叉检验选择带宽

n=500; x=myrand(n); x2=x.^2; hs=[0.01 0.1 0.5]; t=5; 
d2=repmat(x2,[n 1])+repmat(x2',[1 n])-2*x'*x;
v=mod(randperm(n),t)+1;
for i=1:length(hs)
  hh=2*hs(i)^2; P=exp(-d2/hh)/sqrt(pi*hh);
  for j=1:t      
    s(j,i)=mean(log(mean(P(v~=j,v==j))));
  end
end
[dum,a]=max(mean(s)); h=hs(a); hh=2*h^2;
ph=mean(exp(-d2/hh)/(sqrt(pi*hh)));
figure(1); clf; plot(x,ph,'r*'); h

function x=myrand(n)

x=zeros(1,n); u=rand(1,n);
t=(0<=u & u<1/8); x(t)=sqrt(8*u(t));
t=(1/8<=u & u<1/4); x(t)=2-sqrt(2-8*u(t));
t=(1/4<=u & u<1/2); x(t)=1+4*u(t);
t=(1/2<=u & u<3/4); x(t)=3+sqrt(4*u(t)-2);
t=(3/4<=u & u<=1); x(t)=5-sqrt(4-4*u(t));

在这里插入图片描述

这段代码实现了以下功能:

1. 定义了一个变量 `n` 并赋值为 5002. 调用函数 `myrand(n)` 生成一个长度为 `n` 的随机数列,并将结果存储在变量 `x` 中。
3. 将 `x` 的每个元素平方,并将结果存储在变量 `x2` 中。
4. 定义了一个长度为 3 的向量 `hs`,包含元素 `[0.01, 0.1, 0.5]`。
5. 定义了一个变量 `t` 并赋值为 56. 计算了一个距离矩阵 `d2`,其中使用了矩阵运算和重复矩阵的函数 `repmat`。
7. 生成了一个长度为 `n` 的随机排列,并将结果取模 `t` 后加一,得到向量 `v`。
8. 对于 `hs` 中的每个元素,进行以下操作:
   - 计算参数 `hh`。
   - 计算概率矩阵 `P`,其中使用了指数函数 `exp` 和除法运算。
   - 对于 `t` 个取值,在内部循环中进行以下操作:
     - 计算 `s(j, i)`,即平均对数概率。
9. 找到 `s` 中平均值最大的那一列,并将结果存储在变量 `a` 中。
10. 根据 `a` 的值选择对应的 `hs` 中的元素,并将结果存储在变量 `h` 中。
11. 根据 `h` 计算参数 `hh`。
12. 计算概率密度函数 `ph`,其中使用了指数函数 `exp` 和除法运算。
13. 创建一个新的图形窗口,并设定窗口编号为 114. 清除当前图形窗口中的内容。
15. 绘制散点图,其中横轴为 `x`,纵轴为 `ph`,散点标记为红色星形。
16. 打印变量 `h` 的值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值