在matlab中使用特定数据集实现K-nn

时间:2017-04-04 03:26:45

标签: matlab repository knn

晚安!我正在尝试使用K-nn实现分类,而不使用任何工具箱,但是现在我使用Matlab非常无知,所以我不知道该怎么做。我正在尝试从加州大学机器学习库中对数据集教学助理评估进行分类。现在,我刚刚设法划分我的训练集,标签集和测试集,并用工具箱对它们进行分类,但没有它我完全迷失了。 你能帮我解释一下如何开始吗?我一直在寻找模板或基本代码,但对我来说都不是可以理解的。提前,谢谢!

1 个答案:

答案 0 :(得分: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