如何选择能够最大限度地提高该行/组合精度的组合?

时间:2017-11-10 15:23:40

标签: matlab

我正在使用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行组合给出了最大总和。每次迭代时,我还会检查精度是否增加,如果减少或保持不变,我将不得不停在这里。在一天结束时,我会考虑手头的组合是最小的可能组合提供最大化准确度。

1 个答案:

答案 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