通过不均匀地按行分割矩阵来进行矢量化

时间:2017-03-03 02:39:20

标签: matlab performance vectorization document-classification

我有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);

0 个答案:

没有答案