Problem:
开发的knn算法通过计算TestData中每一个观察点和TrainningData中的观察点的距离,得到k个最近距离的索引,然后统计其中频次最高的Class,并将这个Class作为该TestData的Class值。
knn算法的Matlab源代码:
function [OutputClass] = myKNN(TestData,TrainningData,Group,K) [M,N] = size(TrainningData); [R,C] = size(TestData); OutputClass=[]; for i=1:R diff=TrainningData-repmat(TestData(i,:),M,1); dist=diff.*diff; [DistSort,Index]=sort(sum(dist,2),'descend'); N=hist(Group(Index(1:K),:),3);%histgram of class [MaxClassSort,MaxSort]=sort(N,'descend'); %MaxSort MaxClass=MaxSort(1); OutputClass(end+1)=MaxClass; end OutputClass=OutputClass'; save('knn.mat');
通过观察PCA处理之后的特征值,发现只有6个特征值不为0,这样采用PCA降维的方法实现的将源数据13维降为6维之后没有损失能量,所以最后直接进行KNN分类的结果和采用PCA分类的结果是一致的,数据处理的难度却下降了。并且当K=1的时候准确率最高。
MaxAccuracy= 0.7525 when k=1 (KNN&PCA+KNN)
PCA算法处理之后的特征值 |
|||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
99202 |
173 |
9 |
5 |
1 |
1 |
0 |
0 |
0 |
…… |