Matlab 为什么我在实现k-最近邻时会遭受如此严重的损失?
我试图在matlab中实现k-NN。我有一个214 x的矩阵,有9列属性,第10列是标签。我想在10个交叉验证测试中使用0-1函数测量损失。我有以下代码: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
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
代码看起来不错。我还没看过你是怎么计算损失的。有什么问题吗?请考虑写这个答案,不要改变你的问题内容。它不能帮助其他可能与你有同样问题的人。