摘要
k-NN:
k-最近邻算法进行分类或者预测,搜索方法是欧氏距离。
k:最近邻居个数;
数据1:(NxD)训练数据:N为样本数量,D为每个数据点的维数;
标签1:标签;
数据2:(MxD)测试数据:M是数据点的个数,D是每个数据点的维数;
数据2:标签。
代码功能: 单点分类预测中提供两种方法,一种是matlab内部函数,另一种是自定义函数,自定义函数经过matlab内部函数验证无误。
主函数
clc;clear;close all;
% 单点分类预测
Train_Data = [1.0,2.0;
1.2,0.1;
0.1,1.4;
0.3,3.5];
Train_Label = [1.0,1.0,2.0,2.0];
test_data = [0.5,2.3];
% 方法1
k1=knnclassify(test_data,Train_Data,Train_Label,3,'euclidean','random');% matlab内部函数
% 方法2
k2 = FUNKNN(Train_Data,Train_Label,test_data,3);
FUNKNN函数
function [ idx ] = FUNKNN( trainData,trainClass,testData,K )
% UNTITLED Summary of this function goes here
% Detailed explanation goes here
[N,M]=size(trainData);
% 计算训练数据集与测试数据之间的欧氏距离dist
dist=zeros(N,1);
for i=1:N
dist(i,:)=norm(trainData(i,:)-testData);
end
% 将dist从小到大进行排序
[Y,I]=sort(dist,1);
K=min(K,length(Y));
%将训练数据对应的类别与训练数据排序结果对应
labels=trainClass(I);
%确定前K个点所在类别的出现频率
idx=mode(labels(1:K));%mode函数求众数
fprintf('该测试数据属于类 %d ',idx);
end