我正在使用R2015a。我有这个函数,它使用knnclassify函数给出了预测类的准确性。
function [acc]=knnAccuracy(sample,training,group,actual,z)
result = knnclassify(sample, training, group, z);
t = result';
a = actual';
count=1;
correct=0;
while count<=size(t)
for i=t
k = a(count);
if isequal(i,k);
correct=correct+1;
end
count=count+1;
end
end
b=correct(end);
accuracy=((b./size(t))*100);
acc=accuracy(end);
end
这里,样本训练是矩阵,具有相同的行数。该组是与每列see knnclassify() for detalis相关的关联类。此函数将knnclassify的结果与函数中给出的实际单元格数组进行比较,并计算精度。
现在,我有这个代码,它给出了矩阵inMat中行的所有可能组合,如下所示。
inMat = magic(5); % this represent your input
for n = 1:length(inMat)
rowsCell = num2cell(inMat,2);
r = nchoosek(1:size(inMat,1),n);
out = cell2mat(reshape(rowsCell(r.',:).',n,1,[]))
end
在第一次迭代时,它给出了我只有1行的组合,而不是它给出了2行的组合,依此类推。现在在第一次迭代中,我将对所有组合应用knnaccuracy,然后我想选择那个给我最大精度的行/组合,然后我需要该矩阵与该特定行的所有可能的2行组合我们刚刚发现它给了我们最大的准确度。继续前进我需要所有三行组合,我们之前发现的特定的2行组合给出了最大总和。每次迭代时,我还会检查精度是否增加,如果减少或保持不变,我将不得不停在这里。在一天结束时,我会考虑手头的组合是最小的可能组合提供最大化准确度。
答案 0 :(得分:1)
当我以正确的方式解释你的问题时,你正在寻找这样的事情。第一个输入参数是您的矩阵,第二个输入是您想要组合的行数。
rowComb = getMaxSumCombination(inMat, 2);
function rowComb = getMaxSumCombination(inMat, nrRows)
rowSums = sortrows([(1:size(inMat,1)).', sum(inMat, 2)], 2, 'descend');
rowComb = inMat(rowSums(1:nrRows, 1), :);
end