讨厌死matlab了,呵呵其实是不经常用导致简单的语法结构都忘了每次都要查来查去的。我今天差点就想改下我以前c++的那个算了,后来想这样可不好,不能因为惧怕而放弃。有什么嘛,就是多费点时间而已啊。还好今天写了不到3个小时搞定了。晚上的时候还有个朋友让过去帮看个神经网络的程序,头大呵呵,早就忘光光了,不过还是硬着头皮过去了,凭着仅有的一丁点的记忆,加上比较嘿嘿瞎猫碰到死老鼠竟然蒙过去了,不过为了负责起见自己回来又找了点内容看看。咦,模式识别还有作业看都没看呢,我干什么去了呢?管它呢,最后一天再看嘻嘻!真是欠扁。嗯,不废话了贴code吧。(前提是有hw3.mat数据集哦)
%调入数据文件
load hw3;
%查看数据
whos;
m=500;
n=2;
%当k=1时分类结果total_error =50 right1 =497 right2 =477 right3 = 476
%当k=50时分类结果total_error =47 right1 =494 right2 =470 right3 = 489
%当k=10时分类结果total_error =39 right1 =495 right2 =477 right3 = 489
%当k=18,19,20时分类结果total_error =37 right1 =495 right2 =477 right3 = 491
%当k=16,17时分类结果total_error =35 right1 =495 right2 =479 right3 = 491
k=16;
sum11=distance(m,n,t1,c1,k);%计算出t1中的样本和c1样本的欧式距离最近的前k个值
sum12=distance(m,n,t1,c2,k); %计算出t1中的样本和c2样本的欧式距离最近的前k个值
sum13=distance(m,n,t1,c3,k); %计算出t1中的样本和c3样本的欧式距离最近的前k个值
sum21=distance(m,n,t2,c1,k); %计算出t2中的样本和c1样本的欧式距离最近的前k个值
sum22=distance(m,n,t2,c2,k); %计算出t2中的样本和c2样本的欧式距离最近的前k个值
sum23=distance(m,n,t2,c3,k); %计算出t2中的样本和c3样本的欧式距离最近的前k个值
sum31=distance(m,n,t3,c1,k); %计算出t3中的样本和c1样本的欧式距离最近的前k个值
sum32=distance(m,n,t3,c2,k); %计算出t3中的样本和c2样本的欧式距离最近的前k个值
sum33=distance(m,n,t3,c3,k); %计算出t3中的样本和c3样本的欧式距离最近的前k个值
type1=classfy(sum11,sum12,sum13,k);%对t1中的样本进行分类
type2=classfy(sum21,sum22,sum23,k);%对t2中的样本进行分类
type3=classfy(sum31,sum32,sum33,k);%对t3中的样本进行分类
right1=class_right(type1,1,m) %t1中正确分类的样本数
right2=class_right(type2,2,m) %t2中正确分类的样本数
right3=class_right(type3,3,m) %t3中正确分类的样本数
total_error=m*3-right1-right2-right3%总的分错样本数
%计算欧式距离(测试样本中的每个点距离每个训练样本的距离)
function [sum]=distance(m,n,test,c,k)
sum=zeros(m,m);
for i=1:1:m
for t=1:1:m
for j=1:1:n
sum(i,t)=sum(i,t)+[test(i,j)-c(t,j)]*[test(i,j)-c(t,j)];
end
sum(i,t)=sqrt(sum(i,t));
end
end
%并且进行排序得到距离较短的k个点来
for i=1:1:m
for t=1:1:k
min=t;
for j=t+1:1:m
if sum(i,j)<sum(i,min)
min=j;
end
end
temp=sum(i,t);
sum(i,t)=sum(i,min);
sum(i,min)=temp;
end
end
function[right]=class_right(type,t,m)
right=0;
for i=1:1:m
if type(i)==t
right=right+1;
end
end
%分类器,判断测试样本属于真实分类的数目
function [type]=classfy(sum1,sum2,sum3,k)
m=500;
min11=zeros(m,1);
min12=zeros(m,1);
min13=zeros(m,1);
type=zeros(m,1);
for i=1:1:m
for j=1:1:k
for t=1:1:k
if sum1(i,j)<sum2(i,t)&&sum1(i,j)<sum3(i,t)
min11(i)=min11(i)+1;
else if sum2(i,t)<sum1(i,j)&&sum2(i,t)<sum3(i,t)
min12(i)=min12(i)+1;
else
min13(i)=min13(i)+1;
end
end
end
end
if min11(i)>min12(i)&&min11(i)>min13(i)
type(i)=1;
else if min12(i)>min11(i)&&min12(i)>min13(i)
type(i)=2;
else
type(i)=3;
end
end
end
分享到:
相关推荐
模式识别中的KNN算法实现,基于Matlab的实现,以及剪辑近邻法的matlab实现。
用matlab实现KNN算法 用matlab实现KNN算法 用matlab实现KNN算法
基于MATLAB的KNN算法实现多分类
KNN算法通过matlab得简单实现。
对4组不同的信号分别采集20组,总共80组,然后经过特征提取(特征数量为8个),得到80x8的矩阵。 划分数据集:将64组数据作为...源程序是利用KNN算法对训练集和测试集整体归一化后的测试数据进行分类,得到分类准确率。
matlab knn算法 iris数据集
邻近算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据...
knn算法matlab实现,较简单,大家多指导指导
Matlab实现knn+optics算法
该代码编写了KNN算法的原理,包括matlab、python的代码,应用在电影分类和约会配对的应用
KNN算法的matlab实现,包含原始数据
采用KNN(K邻近算法),用matlab平台实现的分类预测算法
这个是一个matlab knn 算法。很好的,可以跑的。
knn算法是数据挖掘中的一个常用算法。改算法能够实现分类和聚类。这个程序是KNN算法的一个演示程序,希望对数据挖掘的学习有所帮助。
KNN分类算法,当K=1时,计算最相似的一个点。 输入需为csv文件
在matlab中实现KNN分类器和LLE局部线性嵌入算法的实现
一个很好的KNN算法的matlab程序,供参考
用Matlab实现了KNN算法中最近邻元素的查找,算出的结果与Spss完全一致
该算法用matlab实现了knn分类,knn分类是数据挖掘中很经典的算法之一