Matlab 为什么我在实现k-最近邻时会遭受如此严重的损失?

Matlab 为什么我在实现k-最近邻时会遭受如此严重的损失?,matlab,machine-learning,nearest-neighbor,Matlab,Machine Learning,Nearest Neighbor,我试图在matlab中实现k-NN。我有一个214 x的矩阵,有9列属性,第10列是标签。我想在10个交叉验证测试中使用0-1函数测量损失。我有以下代码: 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 = me

我试图在matlab中实现k-NN。我有一个214 x的矩阵,有9列属性,第10列是标签。我想在10个交叉验证测试中使用0-1函数测量损失。我有以下代码:

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几乎没有关联,我肯定这里有问题,但我不太确定


任何帮助都将不胜感激

kNN要求您选择数据集中与查询点相关的
k
最近点。我在你的代码中根本看不到。。。。实际上,我根本不太明白你的
knn
代码在做什么。谢谢你,我复制粘贴错误了,我会修复它。谢谢你。好的,您的
knn
代码看起来不错。我还没看过你是怎么计算损失的。有什么问题吗?请考虑写这个答案,不要改变你的问题内容。它不会帮助其他可能与您有相同问题的人。kNN要求您选择数据集中与查询点相关的
k
最近点。我在你的代码中根本看不到。。。。实际上,我根本不太明白你的
knn
代码在做什么。谢谢你,我复制粘贴错误了,我会修复它。谢谢你。好的,您的
knn
代码看起来不错。我还没看过你是怎么计算损失的。有什么问题吗?请考虑写这个答案,不要改变你的问题内容。它不能帮助其他可能与你有同样问题的人。