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 генерирует 10 000 случайных матриц. Затем это выбирает матрицу с самыми большими, минимальными, попарными расстояниями строки на основе меры Хэмминга. Можно задать, чтобы сгенерировать больше матриц, чтобы увеличить шанс получения лучшего, или можно сгенерировать несколько матриц кодирования, и затем видеть, который выполняет лучше всего.

Загрузите 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 folds do not contain points from all the groups.
Warning: One or more folds do not contain points from all the groups.
Warning: One or more folds do not contain points from all the groups.
Warning: One or more folds do not contain points from all the groups.

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

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

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

genErr
genErr = 4×1

    0.2279
    0.2209
    0.2256
    0.2233

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

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

Входные параметры

свернуть все

Количество классов, заданных как положительное целое число.

K задает количество строк кодирующего матричного M.

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

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

ЗначениеКоличество бинарных учениковОписание
'allpairs' и 'onevsone'K (K – 1)/2Для каждого бинарного ученика один класс положителен, другой отрицателен, и программное обеспечение игнорирует остальных. Этот проект исчерпывает все комбинации присвоений пары класса.
'binarycomplete'2(K1)1Этот проект делит классы во все бинарные комбинации и не игнорирует классов. Для каждого бинарного ученика всеми присвоениями класса является -1 и 1 по крайней мере с одним положительным и отрицательным классом в присвоении.
'denserandom'Случайный, но приблизительно 10 log2KДля каждого бинарного ученика программное обеспечение случайным образом присваивает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования.
'onevsall'KДля каждого бинарного ученика один класс положителен, и остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений класса.
'ordinal'K 1Для первого бинарного ученика первый класс отрицателен, и остальные положительные. Для второго бинарного ученика первые два класса отрицательны, остальные положительные, и так далее.
'sparserandom'Случайный, но приблизительно 15 log2KДля каждого бинарного ученика программное обеспечение случайным образом присваивает классы как положительные или отрицательные с вероятностью 0.25 для каждого, и игнорирует классы с вероятностью 0.5. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования.
'ternarycomplete'(3K2(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.

ЗначениеДихотомическое присвоение класса
–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 не могут быть разделены проектом. Например, в проекте кодирования

    [10100101]

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

Случайные матрицы проекта кодирования

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

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

    1. Плотный случайный — программное обеспечение присваивает 1 или –1 с равной вероятностью к каждому элементу K-by-Ld кодирующий матрицу проекта, где Ld10журнал2K.

    2. Разреженный случайный — программное обеспечение присваивает 1 каждому элементу K-by-Ls кодирующий матрицу проекта с вероятностью 0.25, –1 с вероятностью 0.25, и 0 с вероятностью 0.5, где Ls15журнал2K.

  2. Если столбец не содержит по крайней мере один 1 и по крайней мере один –1, то программное обеспечение удаляет тот столбец.

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

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

Δ(k1,k2)=0.5l=1L|mk1l||mk2l||mk1lmk2l|,

где mkjl является элементом кодирования матрицы проекта j.

Ссылки

[1] Fürnkranz, Иоганнес. “Круговая Классификация”. Дж. Мах. Учиться. Res., Издание 2, 2002, стр 721–747.

[2] Escalera, S., О. Пуджол и П. Радева. “Отделимость троичных кодов для разреженных проектов выходных кодов с коррекцией ошибок”. Перевинтик шаблона. Латыш., Издание 30, Выпуск 3, 2009, стр 285–297.

Смотрите также

|

Введенный в R2014b