2017-04-04 33 views
-1

晚安!我试图通过K-nn来实现分类,而不使用任何工具箱,但现在我很难用Matlab来进行分类,所以我不知道该怎么做。我试图对加利福尼亚大学机器学习资源库中的数据集助教评估进行分类。现在,我设法划分了我的训练集,标签集和测试集,并将它们与工具箱分类,但没有它,我完全失去了知识。 你能帮我一下如何开始的想法吗?我一直在寻找一个模板或一个基本代码,但是他们都不能理解我。提前,谢谢!使用特定数据集在matlab中实现K-nn

回答

0

这是欧氏距离KNN,你可以通过你的需求改变距离的定义:

% generate data 
dim = 2; 
K = 3; 
ntest = 10; 
ntrain = 100; 
nlabels = 3; 
traindata = rand(ntrain,dim); 
trainlabel = randi(nlabels,[ntrain 1]); 
testdata = rand(ntest,dim); 
testlabel = zeros(ntest,1); 
for ii = 1:ntest 
    % compute euclidean distances 
    dists = sum(bsxfun(@minus,traindata,testdata(ii,:)).^2,2); 
    % take the closest neighbors' label 
    [~,idxs] = sort(dists); 
    labels = trainlabel(idxs(1:K)); 
    % majority vote 
    testlabel(ii) = mode(labels); 
end 
% plotting 
scatter(traindata(:,1),traindata(:,2),50,trainlabel); 
hold on 
scatter(testdata(:,1),testdata(:,2),50,testlabel,'filled'); 
hold off 
colormap('jet') 
legend('train data','test data') 

enter image description here