exponenta event banner

designecoc

Матрица кодирования для уменьшения выходного кода с исправлением ошибок до двоичного

Описание

пример

M = designecoc(K,name) возвращает матрицу кодирования M что уменьшает конструкцию выходного кода с исправлением ошибок (ECOC), указанную в name и K классов к двоичной проблеме. M имеет K строки и L столбцы, причем каждая строка соответствует классу, и каждый столбец соответствует двоичному ученику. name и K определить значение L.

Можно просматривать или настраивать M, а затем укажите его в качестве матрицы кодирования для обучения классификатора мультикласса ECOC с использованием fitcecoc.

пример

M = designecoc(K,name,Name,Value) возвращает матрицу кодирования с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары.

Например, можно указать количество испытаний при создании плотной или разреженной матрицы произвольного кодирования.

Примеры

свернуть все

Рассмотрим arrhythmia набор данных. В исследовании 16 классов, 13 из которых представлены в данных. Первый класс указывает, что у субъекта не было аритмии, а последний класс указывает, что состояние аритмии у субъекта не регистрировалось. Предположим, что другие классы являются порядковыми уровнями, указывающими на тяжесть аритмии. Обучение классификатора ECOC с использованием пользовательской схемы кодирования, указанной в описании классов.

Загрузить arrhythmia набор данных.

load arrhythmia
K = 13; % Number of distinct classes

Создайте матрицу кодирования, описывающую природу классов.

OrdMat = designecoc(11,'ordinal');
nOM = size(OrdMat);
class1VSOrd = [1; -ones(11,1); 0];
class1VSClass16 = [1; zeros(11,1); -1];
OrdVSClass16 = [0; ones(11,1); -1];
Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...
    [zeros(1,nOM(2)); OrdMat; zeros(1,nOM(2))]]
Coding = 13×13

     1     1     0     0     0     0     0     0     0     0     0     0     0
    -1     0     1    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1    -1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1     1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1     1     1    -1    -1
      ⋮

Обучение классификатора ECOC с использованием пользовательского проекта кодирования Coding и укажите, что двоичные ученики являются деревьями принятия решений.

Mdl = fitcecoc(X,Y,'Coding',Coding,'Learner','Tree');

Оцените ошибку классификации в выборке.

genErr = resubLoss(Mdl)
genErr = 0.1460

При запросе матрицы случайного кодирования путем указания sparserandom или denserandom, то по умолчанию, designecoc генерирует 10000 случайных матриц. Затем он выбирает матрицу с наибольшими, минимальными, парными расстояниями строк на основе измерения Хэмминга. Можно указать, чтобы создать больше матриц, чтобы увеличить вероятность получения лучшей матрицы, или можно создать несколько кодирующих матриц, а затем посмотреть, какие из них работают лучше всего.

Загрузить arrhythmia набор данных. Зарезервируйте наблюдения, отнесенные к классу 16 (т.е. те, которые не имеют классификации аритмии), в качестве новых данных.

load arrhythmia
oosIdx = Y == 16;
isIdx = ~oosIdx;
Y = categorical(Y(isIdx));
tabulate(Y)
  Value    Count   Percent
      1      245     56.98%
      2       44     10.23%
      3       15      3.49%
      4       15      3.49%
      5       13      3.02%
      6       25      5.81%
      7        3      0.70%
      8        2      0.47%
      9        9      2.09%
     10       50     11.63%
     14        4      0.93%
     15        5      1.16%
K = numel(unique(Y));

Генерируют четыре матрицы проектирования случайного кодирования так, что первые две являются плотными, а вторые две - разреженными. Укажите, чтобы найти лучшие из 20 000 вариантов.

rng(1); % For reproducibility 

Coding = cell(4,1); % Preallocate for coding matrices
CodingTypes = {'denserandom','denserandom','sparserandom','sparserandom'};
for j = 1:4;
    Coding{j} = designecoc(K,CodingTypes{j},'NumTrials',2e4);
end

Coding является массивом ячеек 4 на 1, где каждая ячейка является матрицей дизайна кодирования. Матрицы имеют K строки, но количество столбцов (т.е. двоичных учеников) может варьироваться.

Подготовка и перекрестная проверка классификаторов ECOC с использованием 15-кратной перекрестной проверки. Укажите, что каждый классификатор ECOC должен быть обучен с использованием дерева классификации и матрицы случайного кодирования, сохраненной в Coding.

Mdl = cell(4,1); % Preallocate for the ECOC classifiers
for j = 1:4;
    Mdl{j} = fitcecoc(X(isIdx,:),Y,'Learners','tree',...
        'Coding',Coding{j},'KFold',15);
end
Warning: One or more of the unique class values in GROUP is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of GROUP to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in GROUP is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of GROUP to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in GROUP is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of GROUP to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in GROUP is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of GROUP to obtain nonstratified partitions. For regression problems with continuous response, use N.

Mdl является массивом ячеек 4 на 1 ClassificationPartitionedECOC модели. Некоторые классы имеют низкую относительную частоту в данных, и поэтому существует вероятность того, что во время перекрестной проверки некоторые складки в выборке не будут тренироваться, используя наблюдения из этих классов.

Оцените 15-кратную ошибку классификации для каждого классификатора.

genErr = nan(4,1);
for j = 1:4;
    genErr(j) = kfoldLoss(Mdl{j});
end

genErr
genErr = 4×1

    0.2256
    0.2116
    0.2186
    0.2186

Хотя ошибка обобщения все еще высока, наилучшей моделью, основанной исключительно на ошибке классификации вне выборки, является модель, которая использовала дизайн кодирования. Coding{3}.

Вы можете попытаться улучшить ошибку обобщения, настроив некоторые параметры двоичных учеников. Например, для критерия разделения можно использовать двойное правило или отклонение, а не индекс разнесения Джини по умолчанию. Можно также указать использование суррогатных разбиений, поскольку в данных отсутствуют значения.

Входные аргументы

свернуть все

Число классов, указанное как положительное целое число.

K определяет количество строк матрицы кодирования M.

Типы данных: single | double

Имя проекта кодирования, указанное как значение в следующей таблице. Таблица суммирует схемы кодирования.

СтоимостьЧисло двоичных учениковОписание
'allpairs' и 'onevsone'К (К - 1 )/2Для каждого двоичного ученика один класс является положительным, другой отрицательным, и программное обеспечение игнорирует восстановление.
'binarycomplete'2 (К 1) − 1Эта конструкция разбивает классы на все бинарные комбинации и не игнорирует никакие классы. Для каждого двоичного ученика все назначения класса: -1 и 1 хотя бы с одним положительным и отрицательным классом в назначении.
'denserandom'Случайный, но приблизительно 10 log2KДля каждого двоичного ученика программное обеспечение случайным образом распределяет классы в положительные или отрицательные классы, по крайней мере один из каждого типа. Дополнительные сведения см. в разделе Матрицы проектирования произвольного кодирования.
'onevsall'KДля каждого двоичного ученика один класс является положительным, а остальные - отрицательными. Эта конструкция исчерпывает все комбинации положительных назначений классов.
'ordinal'К - 1Для первого двоичного ученика первый класс отрицательный, а остальные положительные. Для второго двоичного ученика первые два класса отрицательные, остальные положительные и так далее.
'sparserandom'Случайный, но примерно 15 log2KДля каждого двоичного ученика программа случайным образом назначает классы как положительные или отрицательные с вероятностью 0,25 для каждого и игнорирует классы с вероятностью 0,5. Дополнительные сведения см. в разделе Матрицы проектирования произвольного кодирования.
'ternarycomplete'(3K 2 (K + 1) + 1 )/2Эта конструкция разбивает классы на все троичные комбинации. Все назначения классов: 0, -1, и 1 с по меньшей мере одним положительным и одним отрицательным классами в назначении.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'NumTrials',1000 определяет для генерации 1000 случайные матрицы.

Число генерируемых матриц случайного кодирования, указанных как пара, разделенная запятыми, состоящая из 'NumTrials' и положительное целое число.

Программное обеспечение:

  • Производит NumTrials и выбирает одну с максимальным, парным расстоянием строки.

  • Игнорирует NumTrials для всех значений name кроме 'denserandom' и 'sparserandom'.

Пример: 'NumTrials',1000

Типы данных: single | double

Выходные аргументы

свернуть все

Матрица кодирования, которая уменьшает схему ECOC до двоичной, возвращается как числовая матрица. M имеет K строки и столбцы L, где L - количество двоичных учеников. Каждая строка соответствует классу, а каждый столбец - двоичному ученику.

Элементы M являются -1, 0, или 1и значение соответствует дихотомическому присвоению класса. В этой таблице описывается значение M(i,j), то есть класс, который обучается j присваивает наблюдениям в классе i.

СтоимостьНазначение класса Dichotomous
–1Ученик j назначает наблюдения в классе i отрицательному классу.
0Перед началом обучения учащийся j удаляет наблюдения в классе i из набора данных.
1Ученик j назначает наблюдения в классе i к положительному классу.

Двоичные обучающиеся для проектов denserandom, binarycomplete, и onevsall не назначать 0 к наблюдениям в любом классе.

Совет

  • Число двоичных учеников растет с количеством классов. Для проблемы со многими классами, binarycomplete и ternarycomplete конструкции кодирования неэффективны. Однако:

    • Если K ≤ 4, то используйте ternarycomplete проект кодирования, а не sparserandom.

    • Если K ≤ 5, то используйте binarycomplete проект кодирования, а не denserandom.

    Можно просмотреть матрицу проектирования кодирования обученного классификатора ECOC путем ввода Mdl.CodingMatrix в окне команд.

  • Вы должны сформировать матрицу кодирования, используя глубокое знание приложения и принимая во внимание вычислительные ограничения. Если у вас достаточно вычислительной мощности и времени, попробуйте несколько матриц кодирования и выберите одну с наилучшей производительностью (например, проверьте матрицы путаницы для каждой модели с помощью confusionchart).

  • Перекрестная проверка «оставить один» (Leaveout) неэффективно для наборов данных с множеством наблюдений. Вместо этого используйте k-кратную перекрестную проверку (KFold).

Алгоритмы

свернуть все

Матрицы дизайна пользовательского кодирования

Пользовательские матрицы кодирования должны иметь определенную форму. Программное обеспечение проверяет пользовательские матрицы кодирования, обеспечивая:

  • Каждый элемент имеет значения -1, 0 или 1.

  • Каждый столбец содержит как минимум один -1 и один 1.

  • Для всех отдельных векторов столбцов u и v, uv и u ≠ -v.

  • Все векторы строк уникальны.

  • Матрица может разделять любые два класса. То есть можно переходить из любой строки в любую другую строку, следуя следующим правилам:

    • Можно перемещаться по вертикали от 1 к -1 или от -1 к 1.

    • Можно перемещаться по горизонтали от ненулевого элемента к другому ненулевому элементу.

    • Столбец матрицы можно использовать для вертикального перемещения только один раз.

    Если с помощью этих правил невозможно перейти из строки i в строку j, то классы i и j не могут быть разделены конструкцией. Например, в проекте кодирования

    [10−10010−1]

    классы 1 и 2 нельзя отделять от классов 3 и 4 (то есть нельзя перемещаться горизонтально от -1 в строке 2 к столбцу 2, так как в этой позиции находится 0). Поэтому программное обеспечение отклоняет эту схему кодирования.

Матрицы проектирования случайного кодирования

Для заданного числа классов K программное обеспечение генерирует матрицы проектирования случайного кодирования следующим образом.

  1. Программное обеспечение генерирует одну из следующих матриц:

    1. Плотное случайное - программа присваивает 1 или -1 с равной вероятностью каждому элементу матрицы проектирования кодирования K-by-Ld, где Ld≈⌈10log2K ⌉.

    2. Разреженное случайное - программа присваивает 1 каждому элементу матрицы проектирования кодирования K-by-Ls с вероятностью 0,25, -1 с вероятностью 0,25 и 0 с вероятностью 0,5, где Ls≈⌈15log2K ⌉.

  2. Если столбец не содержит хотя бы один столбец 1 и хотя бы один столбец -1, то программа удаляет этот столбец.

  3. Для отдельных столбцов u и v, если u = v или u = -v, программное обеспечение удаляет v из матрицы проектирования кодирования.

По умолчанию программное обеспечение случайным образом генерирует 10 000 матриц и сохраняет матрицу с наибольшим, минимальным, расстоянием попарной строки на основе измерения Хэмминга ([4]), заданного

Δ (к1, к2) =0.5∑l=1L'mk1l||mk2l||mk1l−mk2l|,

где mkj1 - элемент матрицы j дизайна кодирования.

Ссылки

[1] Фюрнкранц, Йоханнес. «Циклическая классификация». Дж. Мач. Рес., т. 2, 2002, стр. 721-747.

[2] Эскалера, С., О. Пужоль и П. Радева. «Разделяемость троичных кодов для разреженных конструкций выходных кодов с исправлением ошибок». Запись шаблона. Лет., том 30, выпуск 3, 2009, стр. 285-297.

См. также

|

Представлен в R2014b