2012-06-26 4 views
4

Я знаю, что такое матрица замешательства.Как реализовать матрицу путаницы в Matlab?

Дано N классов мы имеем матрицу М NxN, где - каждая строка является одним из классов - каждый столбец является одним из классов

М (X, Y) = количество элементов, которые были классифицированы в классе X и должны были классифицироваться в классе Y (конечно, если X = Y, то правильная классификация).

Теперь у меня есть набор «классы соединений» и ряд переменных классов

  • с «СОЕДИНЕНИЕ» Я имею в виду, что один класс соответствует вектору (из переменной длины). Например, если класс представлен вектором 2 элемента, возможные классы будут:

    [0,0]

    [0,1]

    [1,0]

    [1,1]

Mi цель состоит в том, чтобы определить функцию с:

  • INPUT: матрица NxM (где N = количество классифицированных элементов, M = количество элементов каждого класса) классифицированных элементов, матрица NxM ожидаемого класса для каждого элемента.
  • ВЫХОД: NXN спутанность матрица, соответствующая входных классов

Пример вывода:

[1 0 0] 
[0 2 0] 
[0 1 0] 

Эта матрица является матрицей 3х3.

Это означает, что общее количество классов 3 и количество классифицированных элементов 4:

  • один элемент должен был быть классифицирован в подгруппе 1, и был классифицирован в подгруппе 1
  • два элемент должны были быть классифицированы в классе 2 и были классифицированы в классе 2
  • один элемент должен классифицироваться в классе 3 и классифицирован в классе 2

(неважно, как состоят элементы.Изображение Давайте классы могут быть:

[0,0,1] 
[1,0,1] 
[1,1,1] 

** Пример ввода матрицы (EXPECTEDclasses): **

[0,0,1] 
[1,0,1] 
[1,0,1] 
[1,1,1] 

** Пример входной матрицы (ПОЛУЧЕННЫЕ классы): **

[0,0,1] 
[1,0,1] 
[1,0,1] 
[1,0,1] <-- this is the element(line) incorrectly classified 

Как мне это сделать? (классификация производится сетью персептрона или адалинской нейроны)

Заранее благодарю за любой намек!

+0

Приведите пример того, что вы хотите, чтобы матрица путаницы выглядеть с «классами соединений» – tmpearce

+0

добавил прямо сейчас – dragonmnl

+0

И что пример ВХОД? – tmpearce

ответ

4

Ключ должен использовать ismember в следующей форме: [Lia,Locb] = ismember(A,B,'rows') Второй выходной аргумент указывает, какая строка матрицы B соответствует каждой строке матрицы A. Используйте эту информацию для построения матрицы путаницы (которая является встроенной функцией в панели инструментов статистики).

classes = [0 0 1; 
      1 0 1; 
      1 1 1]; 
expected = [0 0 1; 
      1 0 1; 
      1 0 1; 
      1 1 1]; 
obtained = [0 0 1; 
      1 0 1; 
      1 0 1; 
      1 0 1];  
>> [~, ex] = ismember(expected, classes,'rows')  
ex =  
    1 
    2 
    2 
    3 

>> [~, ob] = ismember(obtained, classes,'rows')  
ob = 

    1 
    2 
    2 
    2 

>> confusionmat(ex,ob,'order',[1 2 3])  
ans = 

    1  0  0 
    0  2  0 
    0  1  0 

Если у вас нет доступа к confusionmat, вы можете использовать accummarray, чтобы сделать это самостоятельно.

num_observations = length(ex); 
num_classes = size(classes,1); 
accumarray([ex,ob],ones(num_observations,1),[num_classes,num_classes]) 
+0

спасибо за хорошее решение. Но есть ли какой-либо способ без использования путаницы? – dragonmnl

+0

отредактирован с альтернативой 'confusionmat' – tmpearce

+0

еще раз спасибо. и что, если «ожидаемый» имеет какой-то другой элемент, чем «полученный»? Например: в «полученном» существует класс, который, как ожидается, не будет существовать – dragonmnl