2017-04-04 20 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