Почему я получаю такую ​​большую потерю в своей реализации k-Nearest Neighbor?

Я пытаюсь реализовать K-NN в Matlab. У меня есть матрица из 214 х, которые имеют 9 столбцов атрибутов, а 10-й столбец является меткой. Я хочу измерить потери с помощью функции 0-1 на 10 перекрестных проверочных тестах. У меня есть следующий код:

function q3(file)
data = knnfile(file);

loss(data(:,1:9),'KFold',data(:,10))

losses = zeros(25,3);
new_data = data;

new_data(:,10) = [];

sdd = std(new_data);
meand = mean(new_data);

    for s = 1:214
   for q = 1:9
       new_data(s,q) = (new_data(s,q) - meand(q)) / sdd(q);
   end
end

new_data = [new_data data(:,10)];

for k =  1:25
    loss1 = 0;
    loss2 = 0;
    for j = 0:9
        index = floor(214/10)*j+1;
        curd1 = data([1:index-1,index+21:end],:);
        curd2 = new_data([1:index-1,index+21:end],:);
        for l = 0:20
           c1 = knn(curd1,k,data(index+l,:));
           c2 = knn(curd2,k,new_data(index+l,:));

       loss1 = loss1 + (c1 ~= data(index+l,10));
       loss2 = loss2 + (c2 ~= new_data(index+l,10));


        end
    end
    losses(k,1) = k;
    losses(k,2) = 100*loss1/210;
    losses(k,3) = 100*loss2/210;
end


function cluster = knn(Data,k,x)

distances = zeros(193,2);
for i = 1:size(Data,1)
    row = Data(i,:);
    d = norm(row(1:size(row,2)-1) - x(1:size(x,2)-1));
    distances(i,:) = [d row(10)];
end

distances = sortrows(distances,1);
cluster = mode(distances(1:k,2));

Я получаю 40%+ потери почти без корреляции с k, и я уверен, что здесь что-то не так, но я не совсем уверен.

Любая помощь будет оценена!

0 ответов

Другие вопросы по тегам