我有X_test
这是一个大小为967874 x 3
的矩阵,其中的列为:doc#, wordID, wordCount
,其中有7505个唯一的doc#({{} 1}})。矩阵行也已根据doc#的列进行排序。
我还有一个大小为length(unique(X_test(:,1))) == length(Y_test) == 7505
的{{1}}矩阵,其中的行都是可能的wordID,列是不同的类(likelihoods
)
我尝试获取的结果是一个大小为61188 x 20
的矩阵,其中每一行表示不同的文档,并且对于每个类(列),包含似然矩阵行中的值的wordCounts,对应于该文档的wordIDs(试图想出更好的措辞......)
我的第一个想法是根据doc#s将这个2D矩阵重新排列成一个3D矩阵,但每个唯一doc#的行数是不相等的。我还认为制作7505矩阵的单元阵列并不是一个好主意,但可能是错误的。
如果我只显示我的代码,那可能更具说明性,但由于它遍历每个7505文档,因此速度很慢:
length(unique(Y_test))==20
对于上下文,这是我使用概率矩阵:
7505 x 20
编辑:所以我根据文档#将矩阵分成了一个单元格数组,但是不知道如何将probabilities = zeros(length(Y_test),nClasses); % 7505 x 20
for n=1:length(Y_test) % 7505 iterations
doc = X_test(X_test(:,1)==n,:);
result = bsxfun(@times, doc(:,3), log(likelihoods(doc(:,2),:)));
% result ends up size length(doc) x 20
probabilities(n,:) = sum(result);
end
应用到所有数组中一个单元格同时出现。
% MAP decision rule
probabilities = bsxfun(@plus, probabilities, logpriors'); % add priors
[~,predictions] = max(probabilities,[],2);
CCR = sum(predictions==Y_test)/length(Y_test); % correct classification rate
fprintf('Correct classification percentage: %0.2f%%\n\n', CCR*100);