Мне нужно написать код, который сравнивает два вектора - один, содержащий опорные значения, а другой - полученные значения после некоторого процесса классификации - того же размера и приводит к доверительной матрице, которая показывает, какие элементы и сколько из них ошибочно классифицированы. Допустим, что векторы: ref = [3;3;3;4;4;2;1;3]
и obt = [4;2;3;1;1;3;4;3]
Я хочу, чтобы доверие матрица быть: [0 0 0 1; 0 0 1 0;0 1 2 1 ;2 0 0 0]
Как сделать это? БлагодаряСравните два вектора одинакового размера в MATLAB
ответ
Давайте воспользуемся accumarray
и bsxfun
:
Если возможных значений всегда форм
1
,2
,3
...:ref = [3;3;3;4;4;2;1;3]; %// original values obt = [4;2;3;1;1;3;4;3]; %// what the original values have been classified as vals = 1:max([ref(:) obt(:)]); %// all possible values result = accumarray([ref(:) obt(:)],1);
Если значения являются произвольными:
obt = [.1 .1 5.4 5.4 3 2.2 2.2]; %// original values ref = [.1 2.2 2.2 5.4 5.4 3 3]; %// what the original values have been classified as vals = unique([ref(:);obt(:)]); %// all existing values [~, refv] = max(bsxfun(@eq, ref(:).', vals(:))); [~, obtv] = max(bsxfun(@eq, obt(:).', vals(:))); result = accumarray([refv(:) obtv(:)],1);
Входные векторы могут быть строки или столбцы взаимозаменяемо.
vals
содержит все возможные значения ([1 2 3 4]
в вашем примере). result(m,n)
указывает , сколько раз значение vals(m)
было классифицировано как vals(m)
.
Я только что запустил код. Spot on ... – kkuilla
Большое спасибо. Он работает отлично. но есть ли более простой способ сделать это? Я совершенно новый в MATLAB, и ваш код, к сожалению, как-то трудно понять. У меня такое чувство, что цикл цикла с «длиной» и «нахождением» будет работать, но я не могу понять это. – NewProg
@NewProg Конечно, это можно сделать с помощью цикла, который легче понять для начинающих Matlab. Всегда ли ваши значения в форме 1, 2, 3, ...? –
num_classes = max([ref;obt]);
mat_classes = zeros(num_classes);
for i = 1:length(ref)
mat_classes(ref(i),obt(i)) = mat_classes(ref(i),obt(i))+1
end
Это должно сделать то, что вы хотите более простым способом.
Это гораздо более неэффективно, чем реакция Луиса Мендо. Для циклов в Matlab обычно не очень хорошая идея. Если вы планируете часто использовать Matlab, вы должны использовать векторизация.
Проверить это как стартер http://es.mathworks.com/help/matlab/matlab_prog/vectorization.html
Большое вам спасибо, кажется мне более понятным. – NewProg
Вы хотите confusion matrix. Использование Matlab's confusionmat funcion:
>> confusionmat(ref, obt)
ans =
0 0 0 1
0 0 1 0
0 1 2 1
2 0 0 0
- 1. Сравните два 3D-вектора
- 2. Сравните два вектора в R
- 3. Сделайте два элемента одинакового размера
- 4. Сравните, если два вектора одинаковы
- 5. Сравните два разных вектора размера одной и той же структуры
- 6. Создание нескольких переменных одинакового размера в Matlab
- 7. векторизация два вектора в MATLAB
- 8. Matlab: Использование imhist() с ячейками одинакового размера
- 9. WPF - Сделайте два элемента управления одинакового размера
- 10. R: объединить два массива одинакового размера
- 11. Как добавить два бинарных массива одинакового размера?
- 12. Создание вектора одинакового размера в R или AWK
- 13. Numpy Сравните неравные строки и сделайте оба массива одинакового размера.
- 14. Iterate два вектора одинакового размера различных значений с одним ForEach даного в Java
- 15. Балансировка массивов одинакового размера
- 16. Как пометить два вектора в Matlab? .
- 17. surf на двух матрицах одинакового размера в matlab
- 18. Слияние кучи одинакового размера
- 19. Создать кнопки одинакового размера
- 20. Элементы Flexbox одинакового размера
- 21. Как добавить два вектора разного размера VHDL
- 22. R - Plot два вектора разного размера
- 23. Сравните два диапазона в VBA Excel
- 24. Matlab переформатирует два вектора определенным образом
- 25. Как объединить два вектора разного размера в матрицу?
- 26. равномерно распределяют круги одинакового размера внутри квадрата с помощью Matlab
- 27. Два uiview не подходят для всех экранов одинакового размера
- 28. удаление целых строк, чтобы сделать два набора данных одинакового размера
- 29. VTK, два диска одинакового размера, несмотря на разный радиус?
- 30. Создать тензор из n матрицы одинакового размера
Какова формулировка для матрицы доверия? Как вы его вычисляете? – NKN
Я все еще теряюсь в том, как рассчитывалась матрица доверия. – rayryeng
Ничего. Я понял. Каждая пара значений 'ref/obt' представляет собой пару строк/столбцов, которая необходима для доступа к доверительной матрице. Каждый раз, когда вы видите эту пару строк/столбцов, вы подсчитываете счет, который отображается в этой матрице. В будущем, пожалуйста, объясните, как эта матрица рассчитывается в будущем. Это не наша работа, чтобы попытаться угадать или сделать вывод о том, что вы пытаетесь спросить. Мы помогаем вам решать проблемы, но для этого вам необходимо дать нам как можно больше, чтобы понять вашу проблему. – rayryeng