模式分类实验三Parzen窗和K-近邻

这次机器学习的实验是第四章非参数技术课后上机题,4.3和4.4 下面从实验报告中截取代码及部分运行结果

工具:matlab

4.3

2. 考虑对于表格中的数据进行Parzen窗估计和设计分类器。窗函数为一个球形的高斯函数,如下所示:

(a) 编写程序,使用Parzen窗估计方法对一个任意的测试样本点x进行分类。对分类器的训练则使用表格中的三维数据。同时令h=1,分类样本点为(0.5,1.0,0.0t,(0.31,1.51,-0.5)t,(-0.3,0.44,-0.1)t.

(b) 现在我们令h=0.1,重复(a)。

4.4

3. 考虑不同维数的空间中,使用k-近邻概率密度估计方法的效果。

(a)编写程序。对于一维的情况,当有n个数据样本点时,进行k-近邻概率密度估计。对表格中的类别ω3中的特征,x1,用程序画出当k=1,3,5时的概率密度估计结果。

(b)编写程序,对于二维的情况,当有n个数据样本点时,进行k-近邻概率密度估计。对表格中的类别ω2中的特征(x1x2t用程序画出当k=1,3,5时的概率密度估计结果。

(c)对表格中的3个类别的三维特征,使用k-近邻概率密度估计方法。并且对下列点处的概率密度进行估计:-0.410.820.88t,(0.140.724.1t,(-0.810.61-0.38t

4.3(a)因为是三维样本点,所以模式分类实验三Parzen窗和K-近邻_第1张图片

同时由于所以将30个样本数据和已经给定的h带入公式,分别算出p(w1),p(w2),p(w3)即可。

function p = parzen(m,h,x)%m是30个样本点的矩阵 h是给定的边长,x是测试样本向量
p=zeros(3,1);%概率密度向量
px=0;%中间变量,用于存储结果
for i=1:10
    hn=h/sqrt(i);
    px=px+exp(-((x-m(i,:))*(x-m(i,:))')/2*hn*hn)/sqrt(2*pi)/(hn*hn*hn);
end
p(1,1)=px/10;
%第一维概率密度求解结束
px=0;
for i=11:20
    hn=h/sqrt(i-10);
    px=px+exp(-((x-m(i,:))*(x-m(i,:))')/2*hn*hn)/sqrt(2*pi)/(hn*hn*hn);
end
p(2,1)=px/10;
%第二维概率密度求解结束
px=0;
for i=21:30
    hn=h/sqrt(i-20);
    px=px+exp(-((x-m(i,:))*(x-m(i,:))')/2*hn*hn)/sqrt(2*pi)/(hn*hn*hn);
end
p(3,1)=px/10;
%第三维概率密度求解结束
end

部分实验结果:模式分类实验三Parzen窗和K-近邻_第2张图片

模式分类实验三Parzen窗和K-近邻_第3张图片

4.4

Knn估计法是说对于一个样本点,我们固定它周围的样本个数k,然后从最小距离开始找,直到找出k个样本点为止。然后以第k个(也就是最远的那个)样本到测试样本的距离为体积的单位长度,可以包含这k个样本点,也就可以算出公式里的Vn

 

最后把kNVn全部代入公式即可求出pn

(a)
function p = knn1d(m,k)
testm=sort(randn(200,1));%已经排好序的随机数据,200行 一列,共200个
dist=zeros(200,10);%距离矩阵,200个测试样本和10个训练样本的距离
for i=1:200
    for j=1:10
        dist(i,j)=abs(testm(i)-m(j)); %一维就是单纯的取绝对值
    end
end
distsort=sort(dist,2);%每行升序排序
p=zeros(200,1);
for i=1:200
    p(i)=k/200/(distsort(i,k)/2);%一维的“体积”是距离乘2
end
plot(testm,p);
End

部分实验结果:

模式分类实验三Parzen窗和K-近邻_第4张图片


(b)

%与knn1d基本相似,唯一不同的是Vn的计算和距离的计算。距离是欧式距离,Vn二维情况是一个圆形的计算,

function p = knn2d(m,k)
testm=sort(randn(200,2));
dist=zeros(200,10);
for i=1:200
    for j=1:10
        dist(i,j)=sqrt((testm(i)-m(j))*(testm(i)-m(j))');
    end
end
distsort=sort(dist,2);
p=zeros(200,1);
for i=1:200
    p(i)=k/200/pi/(distsort(i,k).^2);
end
plot3(testm(:,1),testm(:,2),p);
end

(c)

三维情况下,距离还是欧式距离的算法,体积就变成了球形,

function p = knn3d(m,k,x)%m是30个样本矩阵,x是测试样本。
p=zeros(3,1);
dist=zeros(3,10);
for i=1:3
    for j=1:10
    dist(i,j)=sqrt((x-m(j+(i-1)*10,:))*(x-m(j+(i-1)*10,:))');
    end
end
distsort=sort(dist,2);
for i=1:3
    p(i)=k/10/(4*pi*(dist(i,k).^3)/3);
end
End
模式分类实验三Parzen窗和K-近邻_第5张图片


最后附上3个数据矩阵 data w1 w2  parzen函数用data,knn1d函数用w1,knn2d函数用w2,knn3d函数用data。

错误之处在所难免,欢迎指出。




模式分类实验三Parzen窗和K-近邻_第6张图片模式分类实验三Parzen窗和K-近邻_第7张图片模式分类实验三Parzen窗和K-近邻_第8张图片

你可能感兴趣的:(机器学习,机器学习)