exponenta event banner

fitcecoc

Подгонка многоклассовых моделей для вспомогательных векторных машин или других классификаторов

Описание

Mdl = fitcecoc(Tbl,ResponseVarName) возвращает полную, обученную, многоклассовую модель выходных кодов с исправлением ошибок (ECOC) с использованием предикторов в таблице Tbl и метки классов в Tbl.ResponseVarName. fitcecoc использует модели K (K-1 )/2 двоичных векторных машин поддержки (SVM), используя конструкцию кодирования «один против одного», где K - количество уникальных меток класса (уровней ).Mdl является ClassificationECOC модель.

Mdl = fitcecoc(Tbl,formula) возвращает модель ECOC с использованием предикторов в таблице Tbl и этикетки классов. formula является пояснительной моделью ответа и подмножеством переменных предиктора в Tbl используется для обучения.

Mdl = fitcecoc(Tbl,Y) возвращает модель ECOC с использованием предикторов в таблице Tbl и метки класса в векторе Y.

пример

Mdl = fitcecoc(X,Y) возвращает обученную модель ECOC с использованием предикторов X и метки классов Y.

пример

Mdl = fitcecoc(___,Name,Value) возвращает модель ECOC с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы, использующие любой из предыдущих синтаксисов.

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

[Mdl,HyperparameterOptimizationResults] = fitcecoc(___,Name,Value) также возвращает сведения об оптимизации гиперпараметров при указании OptimizeHyperparameters аргумент пары имя-значение и использовать линейные или двоичные ученики ядра. Для других Learners, HyperparameterOptimizationResults имущество Mdl содержит результаты.

Примеры

свернуть все

Обучение модели многоклассных выходных кодов с исправлением ошибок (ECOC) с использованием двоичных обучающихся вспомогательных векторных машин (SVM).

Загрузите набор данных радужки Фишера. Укажите данные предиктора X и данные ответа Y.

load fisheriris
X = meas;
Y = species;

Обучайте мультиклассную модель ECOC с помощью опций по умолчанию.

Mdl = fitcecoc(X,Y)
Mdl = 
  ClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
               CodingName: 'onevsone'


  Properties, Methods

Mdl является ClassificationECOC модель. По умолчанию fitcecoc использует двоичных учеников SVM и схему кодирования «один против одного». Вы можете получить доступ Mdl с использованием точечной нотации.

Отображение имен классов и матрицы проектирования кодирования.

Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

Схема кодирования «один против одного» для трех классов дает трех двоичных учеников. Столбцы CodingMat соответствуют ученикам, а строки - классам. Порядок классов совпадает с порядком в Mdl.ClassNames. Например, CodingMat(:,1) является [1; –1; 0] и указывает, что программное обеспечение обучает первого двоичного ученика SVM, используя все наблюдения, классифицированные как 'setosa' и 'versicolor'. Поскольку 'setosa' соответствует 1, это положительный класс; 'versicolor' соответствует –1так что это отрицательный класс.

Доступ к каждому двоичному ученику можно получить с помощью индексации ячеек и точечной нотации.

Mdl.BinaryLearners{1}   % The first binary learner
ans = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: 'none'
                     Beta: [4x1 double]
                     Bias: 1.4492
         KernelParameters: [1x1 struct]


  Properties, Methods

Вычислите ошибку классификации повторной выборки.

error = resubLoss(Mdl)
error = 0.0067

Ошибка классификации данных обучения невелика, но классификатор может быть переоборудованной моделью. Можно выполнить перекрестную проверку классификатора с помощью crossval и вычислить ошибку классификации перекрестной проверки.

Обучение модели ECOC, состоящей из нескольких бинарных линейных классификационных моделей.

Загрузите набор данных NLP.

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.

Создайте шаблон модели линейной классификации по умолчанию.

t = templateLinear();

Сведения о настройке значений по умолчанию см. в разделе Аргументы пары «имя-значение» на templateLinear страница.

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

X = X';
rng(1); % For reproducibility 
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [1x13 categorical]
    ScoreTransform: 'none'
    BinaryLearners: {78x1 cell}
      CodingMatrix: [13x78 double]


  Properties, Methods

Можно также обучить модель ECOC, состоящую из моделей линейной классификации по умолчанию, используя 'Learners','Linear'.

Чтобы сохранить память, fitcecoc возвращает обученные модели ECOC, состоящие из учащихся линейной классификации в CompactClassificationECOC объекты модели.

Перекрестная проверка классификатора ECOC с двоичными учениками SVM и оценка обобщенной ошибки классификации.

Загрузите набор данных радужки Фишера. Укажите данные предиктора X и данные ответа Y.

load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility

Создайте шаблон SVM и стандартизируйте предикторы.

t = templateSVM('Standardize',true)
t = 
Fit template for classification SVM.

                     Alpha: [0x1 double]
             BoxConstraint: []
                 CacheSize: []
             CachingMethod: ''
                ClipAlphas: []
    DeltaGradientTolerance: []
                   Epsilon: []
              GapTolerance: []
              KKTTolerance: []
            IterationLimit: []
            KernelFunction: ''
               KernelScale: []
              KernelOffset: []
     KernelPolynomialOrder: []
                  NumPrint: []
                        Nu: []
           OutlierFraction: []
          RemoveDuplicates: []
           ShrinkagePeriod: []
                    Solver: ''
           StandardizeData: 1
        SaveSupportVectors: []
            VerbosityLevel: []
                   Version: 2
                    Method: 'SVM'
                      Type: 'classification'

t является шаблоном SVM. Большинство свойств объекта шаблона пусты. При обучении классификатору ECOC программное обеспечение устанавливает соответствующие свойства для их значений по умолчанию.

Выполните обучение классификатора ECOC и укажите порядок классов.

Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

Mdl является ClassificationECOC классификатор. Доступ к его свойствам можно получить с помощью точечной нотации.

Перекрестная проверка Mdl с использованием 10-кратной перекрестной проверки.

CVMdl = crossval(Mdl);

CVMdl является ClassificationPartitionedECOC перекрестно проверенный классификатор ECOC.

Оцените обобщенную ошибку классификации.

genError = kfoldLoss(CVMdl)
genError = 0.0400

Обобщённая ошибка классификации составляет 4%, что указывает на то, что классификатор ECOC достаточно хорошо обобщается.

Обучение классификатора ECOC с использованием двоичных учеников SVM. Сначала спрогнозируйте метки тренировочной выборки и апостериорные вероятности классов. Затем предсказать максимальную апостериорную вероятность класса в каждой точке сетки. Визуализация результатов.

Загрузите набор данных радужки Фишера. Укажите размеры лепестков в качестве предикторов и названия видов в качестве ответа.

load fisheriris
X = meas(:,3:4);
Y = species;
rng(1); % For reproducibility

Создайте шаблон SVM. Стандартизируйте предикторы и укажите гауссово ядро.

t = templateSVM('Standardize',true,'KernelFunction','gaussian');

t является шаблоном SVM. Большинство его свойств пусты. Когда программное обеспечение обучает классификатор ECOC, оно устанавливает соответствующие свойства для их значений по умолчанию.

Обучение классификатора ECOC с использованием шаблона SVM. Преобразовать оценки классификации в апостериорные вероятности класса (которые возвращаются predict или resubPredict) с использованием 'FitPosterior' аргумент пары имя-значение. Укажите порядок классов с помощью 'ClassNames' аргумент пары имя-значение. Отображение диагностических сообщений во время обучения с помощью 'Verbose' аргумент пары имя-значение.

Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,...
    'ClassNames',{'setosa','versicolor','virginica'},...
    'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 2
Positive class indices: 1

Fitting posterior probabilities for learner 1 (SVM).
Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 1

Fitting posterior probabilities for learner 2 (SVM).
Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 2

Fitting posterior probabilities for learner 3 (SVM).

Mdl является ClassificationECOC модель. Один и тот же шаблон SVM применяется к каждому двоичному ученику, но можно настроить параметры для каждого двоичного ученика, передав вектор ячеек шаблонов.

Предсказать метки обучающей выборки и апостериорные вероятности класса. Отображать диагностические сообщения при вычислении меток и апостериорных вероятностей классов с помощью 'Verbose' аргумент пары имя-значение.

[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);
Predictions from all learners have been computed.
Loss for all observations has been computed.
Computing posterior probabilities...
Mdl.BinaryLoss
ans = 
'quadratic'

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

Отображение случайного набора результатов.

idx = randsample(size(X,1),10,1);
Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

table(Y(idx),label(idx),Posterior(idx,:),...
    'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
      TrueLabel         PredLabel                     Posterior               
    ______________    ______________    ______________________________________

    {'virginica' }    {'virginica' }     0.0039322      0.003987       0.99208
    {'virginica' }    {'virginica' }      0.017067      0.018263       0.96467
    {'virginica' }    {'virginica' }      0.014948      0.015856        0.9692
    {'versicolor'}    {'versicolor'}    2.2197e-14       0.87318       0.12682
    {'setosa'    }    {'setosa'    }         0.999    0.00025092    0.00074638
    {'versicolor'}    {'virginica' }    2.2195e-14       0.05943       0.94057
    {'versicolor'}    {'versicolor'}    2.2194e-14       0.97001      0.029985
    {'setosa'    }    {'setosa'    }         0.999    0.00024991     0.0007474
    {'versicolor'}    {'versicolor'}     0.0085642       0.98259     0.0088487
    {'setosa'    }    {'setosa'    }         0.999    0.00025013    0.00074717

Столбцы Posterior соответствуют порядку классов Mdl.ClassNames.

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

xMax = max(X);
xMin = min(X);

x1Pts = linspace(xMin(1),xMax(1));
x2Pts = linspace(xMin(2),xMax(2));
[x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts);

[~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

Для каждой координаты на сетке постройте график максимальной апостериорной вероятности класса среди всех классов.

contourf(x1Grid,x2Grid,...
        reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2)));
h = colorbar;
h.YLabel.String = 'Maximum posterior';
h.YLabel.FontSize = 15;

hold on
gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8);
gh(2).LineWidth = 2;
gh(3).LineWidth = 2;

title('Iris Petal Measurements and Maximum Posterior')
xlabel('Petal length (cm)')
ylabel('Petal width (cm)')
axis tight
legend(gh,'Location','NorthWest')
hold off

Figure contains an axes. The axes with title Iris Petal Measurements and Maximum Posterior contains 4 objects of type contour, line. These objects represent setosa, versicolor, virginica.

Обучение классификатора ECOC «один против всех» с помощью GentleBoost ансамбль деревьев решений с суррогатными расколами. Чтобы ускорить обучение, используйте числовые предикторы и параллельные вычисления. Binning допустим только тогда, когда fitcecoc использует учащегося дерева. После обучения оцените ошибку классификации, используя 10-кратную перекрестную проверку. Обратите внимание, что параллельные вычисления требуют Toolbox™ параллельных вычислений.

Загрузить данные образца

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

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

Набор данных содержит 279 предикторы и размер выборки 452 относительно невелик. Из 16 различных меток только 13 представлены в ответе (Y). Каждая метка описывает различные степени аритмии, и 54,20% наблюдений находятся в классе 1.

Классификатор ECOC по принципу «один против всех»

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

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble является объектом шаблона. Большинство его свойств пусты, но программа заполняет их значениями по умолчанию во время обучения.

Обучение классификатора ECOC «один против всех» с использованием ансамблей деревьев решений в качестве двоичных учеников. Для ускорения обучения используйте binning и параллельные вычисления.

  • Биннинг ('NumBins',50) - При наличии большого набора данных обучения можно ускорить обучение (потенциальное снижение точности) с помощью 'NumBins' аргумент пары имя-значение. Этот аргумент допустим только в том случае, если fitcecoc использует учащегося дерева. При указании 'NumBins' затем программное обеспечение помещает каждый числовой предиктор в заданное количество четких ячеек, а затем выращивает деревья на индексах ячеек вместо исходных данных. Вы можете попробовать 'NumBins',50 сначала, а затем измените 'NumBins' значение в зависимости от точности и скорости тренировки.

  • Параллельные вычисления ('Options',statset('UseParallel',true)) - С помощью лицензии Parallel Computing Toolbox можно ускорить вычисления, используя параллельные вычисления, которые отправляют каждого двоичного ученика работнику в пуле. Количество работников зависит от конфигурации системы. Когда вы используете деревья принятия решений для двоичных учеников, fitcecoc параллельное обучение с использованием стандартных блоков Intel ® Threading Building Blocks (TBB) для двухъядерных систем и выше. Поэтому указание 'UseParallel' не полезен на одном компьютере. Используйте этот параметр в кластере.

Дополнительно укажите, что предшествующие вероятности являются 1/K, где K = 13 - количество отдельных классов.

options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Mdl является ClassificationECOC модель.

Перекрестная проверка

Перекрестная проверка классификатора ECOC с использованием 10-кратной перекрестной проверки.

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdl является ClassificationPartitionedECOC модель. Предупреждение указывает на то, что некоторые классы не представлены, в то время как программное обеспечение работает, по крайней мере, в один раз. Поэтому эти складки не могут предсказать метки для отсутствующих классов. Результаты гибки можно проверить с помощью индексации ячеек и точечной нотации. Например, для получения доступа к результатам первого сворачивания введите CVMdl.Trained{1}.

Используйте перекрестно проверенный классификатор ECOC для прогнозирования кратных меток проверки. Матрицу путаницы можно вычислить с помощью confusionchart. Переместите и измените размер диаграммы, изменив свойство внутренней позиции, чтобы проценты отображались в сводке строк.

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

Воспроизведение привязанных данных

Воспроизвести привязанные данные предиктора с помощью BinEdges свойство обучаемой модели и discretize функция.

X = Mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = Mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x)
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]);
    Xbinned(:,j) = xbinned;
end

Xbinned содержит индексы ячеек в диапазоне от 1 до числа ячеек для числовых предикторов. Xbinned значения 0 для категориальных предикторов. Если X содержит NaNs, затем соответствующее Xbinned значения NaNs.

Автоматическая оптимизация гиперпараметров с помощью fitcecoc.

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

load fisheriris
X = meas;
Y = species;

Найдите гиперпараметры, которые минимизируют пятикратные потери при перекрестной проверке, используя автоматическую оптимизацию гиперпараметров. Для воспроизводимости задайте случайное начальное число и используйте 'expected-improvement-plus' функция приобретения.

rng default
Mdl = fitcecoc(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|    1 | Best   |     0.10667 |      1.4019 |     0.10667 |     0.10667 |     onevsone |       5.6939 |       200.36 |
|    2 | Best   |    0.066667 |      4.3304 |    0.066667 |    0.068735 |     onevsone |       94.849 |    0.0032549 |
|    3 | Accept |        0.08 |      0.4065 |    0.066667 |    0.066837 |     onevsall |      0.01378 |     0.076021 |
|    4 | Accept |        0.08 |     0.33179 |    0.066667 |    0.066676 |     onevsall |          889 |       38.798 |
|    5 | Best   |        0.04 |       0.422 |        0.04 |    0.040502 |     onevsone |     0.021561 |      0.01569 |
|    6 | Accept |        0.04 |     0.33279 |        0.04 |    0.039999 |     onevsone |      0.48338 |      0.02941 |
|    7 | Accept |        0.04 |     0.35478 |        0.04 |    0.039989 |     onevsone |       305.45 |      0.18647 |
|    8 | Best   |    0.026667 |     0.31222 |    0.026667 |    0.026674 |     onevsone |    0.0010168 |      0.10757 |
|    9 | Accept |    0.086667 |     0.29807 |    0.026667 |    0.026669 |     onevsone |     0.001007 |       0.3275 |
|   10 | Accept |    0.046667 |      1.3637 |    0.026667 |    0.026673 |     onevsone |       736.18 |     0.071026 |
|   11 | Accept |        0.04 |     0.33235 |    0.026667 |    0.035679 |     onevsone |       35.928 |      0.13079 |
|   12 | Accept |    0.033333 |     0.27242 |    0.026667 |    0.030065 |     onevsone |    0.0017593 |      0.11245 |
|   13 | Accept |    0.026667 |     0.26702 |    0.026667 |    0.026544 |     onevsone |    0.0011306 |     0.062222 |
|   14 | Accept |    0.026667 |     0.24452 |    0.026667 |    0.026089 |     onevsone |    0.0011124 |     0.079161 |
|   15 | Accept |    0.026667 |      0.2858 |    0.026667 |    0.026184 |     onevsone |    0.0014395 |     0.073096 |
|   16 | Best   |        0.02 |     0.32467 |        0.02 |    0.021144 |     onevsone |    0.0010299 |     0.035054 |
|   17 | Accept |        0.02 |       0.319 |        0.02 |    0.020431 |     onevsone |    0.0010379 |      0.03138 |
|   18 | Accept |    0.033333 |     0.27855 |        0.02 |    0.024292 |     onevsone |    0.0011889 |      0.02915 |
|   19 | Accept |        0.02 |     0.24725 |        0.02 |    0.022327 |     onevsone |    0.0011336 |     0.042445 |
|   20 | Best   |    0.013333 |     0.30737 |    0.013333 |    0.020178 |     onevsone |    0.0010854 |     0.048345 |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Accept |         0.5 |       14.32 |    0.013333 |    0.020718 |     onevsall |       689.42 |     0.001007 |
|   22 | Accept |     0.33333 |     0.24297 |    0.013333 |    0.018299 |     onevsall |    0.0011091 |       1.2155 |
|   23 | Accept |     0.33333 |     0.25919 |    0.013333 |    0.017851 |     onevsall |       529.11 |       372.18 |
|   24 | Accept |        0.04 |     0.24993 |    0.013333 |    0.017879 |     onevsone |       853.41 |       22.141 |
|   25 | Accept |    0.046667 |     0.29265 |    0.013333 |    0.018114 |     onevsone |       744.03 |       6.3339 |
|   26 | Accept |     0.10667 |     0.28146 |    0.013333 |    0.018226 |     onevsone |    0.0010775 |       999.54 |
|   27 | Accept |        0.04 |     0.33384 |    0.013333 |    0.018557 |     onevsone |    0.0020893 |     0.001005 |
|   28 | Accept |     0.10667 |      0.2509 |    0.013333 |    0.019634 |     onevsone |    0.0010666 |       12.404 |
|   29 | Accept |        0.32 |      13.874 |    0.013333 |    0.018352 |     onevsall |        951.6 |     0.027202 |
|   30 | Accept |        0.04 |     0.26214 |    0.013333 |    0.018597 |     onevsone |       936.87 |       1.7813 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 68.6281 seconds
Total objective function evaluation time: 42.7994

Best observed feasible point:
     Coding     BoxConstraint    KernelScale
    ________    _____________    ___________

    onevsone      0.0010854       0.048345  

Observed objective function value = 0.013333
Estimated objective function value = 0.018594
Function evaluation time = 0.30737

Best estimated feasible point (according to models):
     Coding     BoxConstraint    KernelScale
    ________    _____________    ___________

    onevsone      0.0011336       0.042445  

Estimated objective function value = 0.018597
Estimated function evaluation time = 0.28751
Mdl = 
  ClassificationECOC
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                       BinaryLearners: {3x1 cell}
                           CodingName: 'onevsone'
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]


  Properties, Methods

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

Как правило, мультиклассовую классификацию высоких данных можно выполнить с помощью fitcecoc с линейными или бинарными учениками ядра. При использовании fitcecoc для обучения модели в массивах уровня нельзя использовать двоичных обучающихся SVM напрямую. Однако можно использовать линейные или бинарные модели классификации ядра, использующие SVM.

При выполнении вычислений в массивах TALL MATLAB ® использует либо параллельный пул (по умолчанию при наличии Toolbox™ Parallel Computing), либо локальный сеанс MATLAB. Если требуется выполнить пример с использованием локального сеанса MATLAB при наличии панели инструментов Parallel Computing Toolbox, можно изменить глобальную среду выполнения с помощью mapreducer функция.

Создайте хранилище данных, которое ссылается на папку, содержащую набор данных радужки Фишера. Определить 'NA' значения как отсутствующие данные, так что datastore заменяет их на NaN значения. Создайте высокие версии данных предиктора и ответа.

ds = datastore('fisheriris.csv','TreatAsMissing','NA');
t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
X = [t.SepalLength t.SepalWidth t.PetalLength t.PetalWidth];
Y = t.Species;

Стандартизация данных предиктора.

Z = zscore(X);

Обучение мультиклассной модели ECOC, в которой используются высокие данные и линейные двоичные ученики. По умолчанию при передаче массивов tall в fitcecoc, программное обеспечение обучает линейных двоичных учеников, которые используют SVM. Поскольку данные ответа содержат только три уникальных класса, измените схему кодирования с «один против всех» (которая используется по умолчанию при использовании данных высокого уровня) на «один против одного» (которая используется по умолчанию при использовании данных в памяти).

Для воспроизводимости задайте начальные значения генераторов случайных чисел с помощью rng и tallrng. Результаты могут варьироваться в зависимости от количества работников и среды выполнения для массивов tall. Дополнительные сведения см. в разделе Управление местом запуска кода.

rng('default') 
tallrng('default')
mdlLinear = fitcecoc(Z,Y,'Coding','onevsone')
Training binary learner 1 (Linear) out of 3.
Training binary learner 2 (Linear) out of 3.
Training binary learner 3 (Linear) out of 3.
mdlLinear = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlLinear является CompactClassificationECOC модель, состоящая из трех двоичных учеников.

Обучение мультиклассной модели ECOC, использующей высокие данные и двоичных учеников ядра. Сначала создайте templateKernel объект для задания свойств двоичных обучающихся ядра; в частности, увеличить число размеров расширения до 216.

tKernel = templateKernel('NumExpansionDimensions',2^16)
tKernel = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: 65536
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: []
                    Lambda: []
                   Learner: 'svm'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

По умолчанию двоичные ученики ядра используют SVM.

Пройти templateKernel объект в fitcecoc и изменить схему кодирования на «один против одного».

mdlKernel = fitcecoc(Z,Y,'Learners',tKernel,'Coding','onevsone')
Training binary learner 1 (Kernel) out of 3.
Training binary learner 2 (Kernel) out of 3.
Training binary learner 3 (Kernel) out of 3.
mdlKernel = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlKernel также является CompactClassificationECOC модель, состоящая из трех двоичных учеников.

Сравните ошибку классификации повторного замещения двух моделей.

errorLinear = gather(loss(mdlLinear,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.4 sec
Evaluation completed in 1.6 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 15 sec
Evaluation completed in 16 sec
errorKernel = 0.0067

mdlKernel ошибочно классифицирует меньший процент данных обучения, чем mdlLinear.

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

свернуть все

Образец данных, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. Дополнительно, Tbl может содержать один дополнительный столбец для переменной ответа. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не принимаются.

Если Tbl содержит переменную ответа, и вы хотите использовать все оставшиеся переменные в Tbl в качестве предикторов, затем укажите переменную ответа, используя ResponseVarName.

Если Tbl содержит переменную ответа, и требуется использовать только подмножество остальных переменных в Tbl в качестве предикторов укажите формулу, используя formula.

Если Tbl не содержит переменную ответа, укажите переменную ответа, используя Y. Длина переменной ответа и количество Tbl строки должны быть равны.

Типы данных: table

Имя переменной ответа, указанное как имя переменной в Tbl.

Необходимо указать ResponseVarName в виде вектора символов или строкового скаляра. Например, если переменная ответа Y хранится как Tbl.Y, затем укажите его как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Y, в качестве предикторов при обучении модели.

Переменная ответа должна быть категориальным, символьным или строковым массивом; логический или числовой вектор; или массив ячеек символьных векторов. Если Y является символьным массивом, то каждый элемент переменной ответа должен соответствовать одной строке массива.

Рекомендуется указывать порядок классов с помощью ClassNames аргумент «имя-значение».

Типы данных: char | string

Пояснительная модель переменной ответа и подмножество переменных предиктора, указанное как вектор символов или строковый скаляр в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную ответа, и x1, x2, и x3 представляют переменные предиктора.

Задание подмножества переменных в Tbl в качестве предикторов для обучения модели используйте формулу. Если задать формулу, программа не будет использовать переменные в Tbl которые не отображаются в formula.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB ®. Имена переменных можно проверить вTbl с помощью isvarname функция. Если имена переменных недопустимы, их можно преобразовать с помощью matlab.lang.makeValidName функция.

Типы данных: char | string

Метки классов, с которыми обучается модель ECOC, задаются как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов.

Если Y является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

Длина Y и количество строк Tbl или X должно быть равным.

Рекомендуется указывать порядок классов с помощью ClassNames аргумент пары имя-значение.

Типы данных: categorical | char | string | logical | single | double | cell

Данные предиктора, заданные как полная или разреженная матрица.

Длина Y и число замечаний в X должно быть равным.

Чтобы указать имена предикторов в порядке их появления в X, используйте PredictorNames аргумент пары имя-значение.

Примечание

  • Для учащихся, изучающих линейную классификацию, при ориентации X чтобы наблюдения соответствовали столбцам и указывали 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.

  • Для всех остальных учащихся сориентируйте X чтобы наблюдения соответствовали строкам.

  • fitcecoc поддерживает разреженные матрицы только для тренировочных моделей линейной классификации.

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

Примечание

Программное обеспечение обрабатывает NaN, пустой символьный вектор (''), пустая строка (""), <missing>, и <undefined> элементы как отсутствующие данные. Программа удаляет строки X соответствующие отсутствующим значениям в Y. Тем не менее, лечение отсутствующих значений в X различается среди бинарных учеников. Дополнительные сведения см. в разделе Функции обучения для двоичных учеников: fitcdiscr, fitckernel, fitcknn, fitclinear, fitcnb, fitcsvm, fitctree, или fitcensemble. Удаление наблюдений уменьшает эффективный размер выборки для обучения или перекрестной проверки.

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

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

Пример: 'Learners','tree','Coding','onevsone','CrossVal','on' указывает использовать деревья принятия решений для всех двоичных учеников, схему кодирования «один против одного» и реализовать 10-кратную перекрестную проверку.

Примечание

Нельзя использовать любой аргумент пары имя-значение перекрестной проверки вместе с 'OptimizeHyperparameters' аргумент пары имя-значение. Можно изменить перекрестную проверку для 'OptimizeHyperparameters' только с помощью 'HyperparameterOptimizationOptions' аргумент пары имя-значение.

Опции классификатора ECOC

свернуть все

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

СтоимостьЧисло двоичных учениковОписание
'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 с по меньшей мере одним положительным и одним отрицательным классами в назначении.

Можно также указать конструкцию кодирования с помощью пользовательской матрицы кодирования. Пользовательская матрица кодирования является матрицей K-by-L. Каждая строка соответствует классу, а каждый столбец - двоичному ученику. Порядок классов (строк) соответствует порядку в ClassNames. Составьте матрицу, следуя следующим инструкциям:

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

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

  • Каждый столбец должен содержать хотя бы один -1 или 1.

  • Для всех индексов столбцов i,j такой, что ij, Coding(:,i) не может равняться Coding(:,j) и Coding(:,i) не может равняться -Coding(:,j).

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

Дополнительные сведения о форме пользовательских матриц проектирования кодирования см. в разделе Пользовательские матрицы проектирования кодирования.

Пример: 'Coding','ternarycomplete'

Типы данных: char | string | double | single | int16 | int32 | int64 | int8

Флаг, указывающий, следует ли преобразовывать баллы в апостериорные вероятности, указанные как пара, разделенная запятыми, состоящая из 'FitPosterior' и true (1) или false (0).

Если FitPosterior является trueзатем программное обеспечение преобразует баллы классификации бинарного учащегося в апостериорные вероятности. Вы можете получить задние вероятности, используя kfoldPredict, predict, или resubPredict.

fitcecoc не поддерживает подгонку задних вероятностей, если:

  • Метод ансамбля AdaBoostM2, LPBoost, RUSBoost, RobustBoost, или TotalBoost.

  • Двоичные ученики (Learners) - линейные или классификационные модели ядра, реализующие SVM. Чтобы получить апостериорные вероятности для линейных моделей или моделей классификации ядра, реализуйте вместо этого логистическую регрессию.

Пример: 'FitPosterior',true

Типы данных: logical

Двоичные шаблоны учащихся, определяемые как разделенная запятыми пара, состоящая из 'Learners' и вектор символа, скаляр строки, объект шаблона или вектор ячейки объектов шаблона. В частности, можно указать двоичные классификаторы, такие как SVM, и используемые ансамбли. GentleBoost, LogitBoost, и RobustBoost, для решения проблем мультикласса. Однако fitcecoc также поддерживает многоклассовые модели в качестве двоичных классификаторов.

  • Если Learners - символьный вектор или строковый скаляр, затем программа обучает каждого двоичного ученика, используя значения по умолчанию указанного алгоритма. В этой таблице представлены доступные алгоритмы.

    СтоимостьОписание
    'discriminant'Дискриминантный анализ. Параметры по умолчанию см. в разделе templateDiscriminant.
    'kernel'Модель классификации ядра. Параметры по умолчанию см. в разделе templateKernel.
    'knn'k-ближайшие соседи. Параметры по умолчанию см. в разделе templateKNN.
    'linear'Модель линейной классификации. Параметры по умолчанию см. в разделе templateLinear.
    'naivebayes'Наивный Байес. Параметры по умолчанию см. в разделе templateNaiveBayes.
    'svm'SVM. Параметры по умолчанию см. в разделе templateSVM.
    'tree'Деревья классификации. Параметры по умолчанию см. в разделе templateTree.

  • Если Learners является объектом шаблона, затем каждый двоичный ученик обучается в соответствии с сохраненными опциями. Создать объект-шаблон можно с помощью:

    • templateDiscriminant, для дискриминантного анализа.

    • templateEnsemble, для обучения ансамблю. Необходимо, по крайней мере, указать метод обучения (Method), количество обучающихся (NLearn) и тип учащегося (Learners). Вы не можете использовать AdaBoostM2 ансамблевый метод бинарного обучения.

    • templateKernel, для классификации ядра.

    • templateKNN, для k-ближайших соседей.

    • templateLinear, для линейной классификации.

    • templateNaiveBayesдля наивного Байеса.

    • templateSVM, для SVM.

    • templateTree, для классификационных деревьев.

  • Если Learners является вектором ячейки объектов шаблона, то:

    • Ячейка j соответствует двоичному обучающему j (другими словами, столбцу j матрицы дизайна кодирования), и вектор ячейки должен иметь длину LL - количество столбцов в матрице дизайна кодирования. Для получения более подробной информации см. Coding.

    • Чтобы использовать одну из встроенных функций потери для прогнозирования, все двоичные ученики должны вернуть оценку в том же диапазоне. Например, нельзя включать двоичных учеников SVM по умолчанию с наивными двоичными учениками Байеса по умолчанию. Первый возвращает оценку в диапазоне (- ∞,∞), а второй возвращает заднюю вероятность как оценку. В противном случае необходимо указать пользовательскую потерю в качестве дескриптора функции для таких функций, какpredict и loss.

    • Шаблоны модели линейной классификации для учащихся нельзя задать с помощью любого другого шаблона.

    • Точно так же нельзя указывать шаблоны учащихся модели классификации ядра с любым другим шаблоном.

По умолчанию программа обучает учащихся с использованием шаблонов SVM по умолчанию.

Пример: 'Learners','tree'

Количество ячеек для числовых предикторов, указанных как разделенная запятыми пара, состоящая из 'NumBins' и положительный целочисленный скаляр. Этот аргумент допустим только в том случае, если fitcecoc использует учащегося дерева, то есть 'Learners' является либо 'tree' или объект шаблона, созданный с помощью templateTreeили объект шаблона, созданный с помощью templateEnsemble со слабыми учениками дерева.

  • Если 'NumBins' значение пустое (по умолчанию), затем fitcecoc не содержит никаких предикторов.

  • При указании 'NumBins' значение в виде положительного целого скаляра (numBins), то fitcecoc помещает каждый числовой предиктор максимум в numBins equiprobable bins, а затем выращивает деревья по индексам bin вместо исходных данных.

    • Количество ячеек может быть меньше numBins если предиктор имеет менее numBins уникальные значения.

    • fitcecoc не содержит категориальных предикторов.

При использовании большого набора данных обучения этот параметр объединения ускоряет обучение, но может привести к потенциальному снижению точности. Вы можете попробовать 'NumBins',50 сначала, а затем изменить значение в зависимости от точности и скорости тренировки.

Обученная модель хранит кромки бункера в BinEdges собственность.

Пример: 'NumBins',50

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

Число одновременно обученных двоичных учеников, указанных как пара, разделенная запятыми, состоящая из 'NumConcurrent' и положительный целочисленный скаляр. Значение по умолчанию: 1, что означает fitcecoc последовательно обучает двоичных учеников.

Примечание

Этот параметр применяется только при использовании fitcecoc на высоких массивах. Дополнительные сведения см. в разделе Массивы Tall.

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

Измерение наблюдения данных предиктора, указанное как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'columns' или 'rows'.

Примечание

  • Для учащихся, изучающих линейную классификацию, при ориентации X чтобы наблюдения соответствовали столбцам и указывали 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.

  • Для всех остальных учащихся сориентируйте X чтобы наблюдения соответствовали строкам.

Пример: 'ObservationsIn','columns'

Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и 0, 1, или 2. Verbose управляет объемом диагностической информации для каждого двоичного ученика, отображаемой программой в окне команд.

В этой таблице представлены доступные параметры уровня детализации.

СтоимостьОписание
0Программа не отображает диагностическую информацию.
1Программа отображает диагностические сообщения каждый раз при обучении нового двоичного ученика.
2Программа отображает дополнительные диагностические сообщения каждый раз, когда она обучает нового двоичного ученика.

Каждый двоичный ученик имеет свой собственный уровень детализации, который не зависит от этого аргумента пары имя-значение. Чтобы изменить уровень детализации двоичного ученика, создайте объект шаблона и укажите 'Verbose' аргумент пары имя-значение. Затем передайте объект шаблона в fitcecoc с помощью 'Learners' аргумент пары имя-значение.

Пример: 'Verbose',1

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

Параметры перекрестной проверки

свернуть все

Флаг для обучения перекрестно проверенного классификатора, указанного как разделенная запятыми пара, состоящая из 'Crossval' и 'on' или 'off'.

При указании 'on'затем программное обеспечение обучает перекрестно проверенный классификатор с 10 складками.

Этот параметр перекрестной проверки можно переопределить с помощью одного из следующих параметров: CVPartition, Holdout, KFold, или Leaveout аргументы пары имя-значение. Одновременно можно использовать только один аргумент пары имя-значение перекрестной проверки для создания модели с перекрестной проверкой.

Либо выполните перекрестную проверку позже путем передачи Mdl кому crossval.

Пример: 'Crossval','on'

Раздел перекрестной проверки, указанный как cvpartition объект секционирования, созданный cvpartition. Объект секционирования определяет тип перекрестной проверки и индексирования для наборов обучения и проверки.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный раздел для пятикратной перекрестной проверки 500 наблюдений с помощью cvp = cvpartition(500,'KFold',5). Затем можно указать модель с перекрестной проверкой с помощью 'CVPartition',cvp.

Доля данных, используемых для проверки удержания, заданная как скалярное значение в диапазоне (0,1). При указании 'Holdout',pзатем программное обеспечение выполняет следующие действия:

  1. Случайный выбор и резервирование p*100% данных в качестве данных проверки и обучение модели с использованием остальных данных.

  2. Храните компактную обучаемую модель в Trained свойства перекрестной проверенной модели.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

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

Число сгибов для использования в модели с перекрестной проверкой, указанное как положительное целое значение больше 1. При указании 'KFold',k, затем программное обеспечение выполняет следующие действия:

  1. Случайное разбиение данных на k наборы.

  2. Для каждого набора зарезервируйте набор в качестве данных проверки и обучайте модель с помощью другого k - 1 комплект.

  3. Сохранить k компактные, обученные модели в k-by-1 клеточный вектор в Trained свойства перекрестной проверенной модели.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

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

Флаг перекрестной проверки, определяемый как разделенная запятыми пара, состоящая из 'Leaveout' и 'on' или 'off'. При указании 'Leaveout','on', то для каждого из n наблюдений, где n size(Mdl.X,1), программное обеспечение:

  1. Резервирует наблюдение в качестве данных проверки и обучает модель с использованием других n-1 наблюдений

  2. Хранит n компактных обученных моделей в клетках клеточного вектора n-by-1 в Trained свойства перекрестной проверенной модели.

Для создания перекрестно проверенной модели можно использовать только одну из следующих четырех опций: CVPartition, Holdout, KFold, или Leaveout.

Примечание

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

Пример: 'Leaveout','on'

Другие варианты классификации

свернуть все

Список категориальных предикторов, указанный как одно из значений в этой таблице.

СтоимостьОписание
Вектор положительных целых чисел

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

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

Логический вектор

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

Символьная матрицаКаждая строка матрицы является именем предикторной переменной. Имена должны соответствовать записям в PredictorNames. Поместите имена с дополнительными пробелами, чтобы каждая строка символьной матрицы имела одинаковую длину.
Строковый массив или массив ячеек символьных векторовКаждый элемент массива является именем переменной предиктора. Имена должны соответствовать записям в PredictorNames.
'all'Все предикторы категоричны.

Спецификация 'CategoricalPredictors' подходит, если:

  • По крайней мере, один предиктор категоричен, и все двоичные ученики являются деревьями классификации, наивными учениками Байеса, SVM, линейными учениками, учениками ядра или ансамблями деревьев классификации.

  • Все предикторы категоричны, и по крайней мере один двоичный ученик является kNN.

При указании 'CategoricalPredictors' для любого другого учащегося, то программное обеспечение предупреждает, что оно не может обучить этого двоичного учащегося. Например, программное обеспечение не может обучить классификаторы дискриминантного анализа с использованием категориальных предикторов.

Каждый ученик идентифицирует и обрабатывает категориальные предикторы таким же образом, как и аппроксимирующая функция, соответствующая ученику. Посмотрите 'CategoricalPredictors' из fitckernel для учащихся ядра, 'CategoricalPredictors' из fitcknn для k-ближайших учеников, 'CategoricalPredictors' из fitclinear для линейных учащихся, 'CategoricalPredictors' из fitcnb для наивных учеников Байеса, 'CategoricalPredictors' из fitcsvm для учащихся SVM, и 'CategoricalPredictors' из fitctree для обучающихся на деревьях.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена классов, используемых для обучения, указанные как категориальный, символьный или строковый массив; логический или числовой вектор; или массив ячеек символьных векторов. ClassNames должен иметь тот же тип данных, что и переменная ответа в Tbl или Y.

Если ClassNames является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

Использовать ClassNames кому:

  • Укажите порядок занятий во время обучения.

  • Укажите порядок любого измерения входного или выходного аргумента, соответствующего порядку класса. Например, использовать ClassNames для указания порядка размеров Cost или порядок столбцов классификационных баллов, возвращенных predict.

  • Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Обучение модели с использованием наблюдений из классов 'a' и 'c' только, укажите 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames - набор всех различающихся имен классов в переменной ответа в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

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

  • Квадратная матрица Cost, то Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i. То есть строки соответствуют истинному классу, а столбцы - прогнозируемому классу. Определение порядка классов для соответствующих строк и столбцов Cost, дополнительно указать ClassNames аргумент пары имя-значение.

  • Структура S, то он должен иметь два поля:

    • S.ClassNames, который содержит имена классов в качестве переменной того же типа данных, что и Y

    • S.ClassificationCosts, которая содержит матрицу затрат со строками и столбцами, упорядоченными как в S.ClassNames

Значение по умолчанию: ones(K) - eye(K), где K - количество различных классов.

Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

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

Параметры параллельных вычислений, указанные как разделенная запятыми пара, состоящая из 'Options' и массив структуры, возвращенный statset. Эти параметры требуют Toolbox™ параллельных вычислений. fitcecoc использование 'Streams', 'UseParallel', и 'UseSubtreams' поля.

В этой таблице представлены доступные параметры.

ВыборОписание
'Streams'

A RandStream объект или массив ячеек таких объектов. Если не указать Streams, программное обеспечение использует поток или потоки по умолчанию. При указании Streamsиспользуйте один объект, за исключением случаев, когда выполняются следующие условия:

  • У вас есть открытый параллельный пул.

  • UseParallel является true.

  • UseSubstreams является false.

В этом случае используйте массив ячеек того же размера, что и параллельный пул. Если параллельный пул не открыт, программа пытается открыть его (в зависимости от ваших предпочтений), и Streams должен предоставить один поток случайных чисел.

'UseParallel'

При наличии панели инструментов параллельных вычислений можно вызвать пул работников, задав 'UseParallel',true. fitcecoc функция отправляет каждого двоичного учащегося работнику в пуле.

Когда вы используете деревья принятия решений для двоичных учеников, fitcecoc параллельное обучение с использованием стандартных блоков Intel ® Threading Building Blocks (TBB) для двухъядерных систем и выше. Поэтому указание 'UseParallel' не полезен на одном компьютере. Используйте этот параметр в кластере. Подробные сведения о TBB Intel см. в разделе https://software.intel.com/en-us/intel-tbb.

'UseSubstreams'Установить в значение true для параллельного вычисления с использованием потока, указанного в 'Streams'. По умолчанию: false. Например, установить Streams к типу, допускающему субпотоки, например'mlfg6331_64' или 'mrg32k3a'.

Передовой практикой для обеспечения более предсказуемых результатов является использование parpool(Панель инструментов параллельных вычислений) и явно создайте параллельный пул перед вызовом параллельных вычислений с помощью fitcecoc.

Пример: 'Options',statset('UseParallel',true)

Типы данных: struct

Имена переменных предиктора, заданные как строковый массив уникальных имен или массив ячеек уникальных векторов символов. Функциональные возможности PredictorNames зависит от способа ввода данных обучения.

  • Если вы поставляете X и Y, то вы можете использовать PredictorNames назначение имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} является именем X(:,1), PredictorNames{2} является именем X(:,2)и так далее. Также, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, то вы можете использовать PredictorNames чтобы выбрать, какие переменные предиктора использовать в обучении. То есть fitcecoc использует только переменные предиктора в PredictorNames и переменную ответа во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной ответа.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием 'PredictorNames' или formulaно не оба.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

Типы данных: string | cell

Предыдущие вероятности для каждого класса, указанные как пара, разделенная запятыми, состоящая из 'Prior' и значение в этой таблице.

СтоимостьОписание
'empirical'Предшествующие вероятности класса являются относительными частотами класса в Y.
'uniform'Все предшествующие вероятности классов равны 1/K, где K - число классов.
числовой векторКаждый элемент является классом предшествующей вероятности. Упорядочить элементы по Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары имя-значение. Программное обеспечение нормализует элементы таким образом, что они суммируются с 1.
структура

Структура S с двумя полями:

  • S.ClassNames содержит имена классов в качестве переменной того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих предшествующих вероятностей. Программное обеспечение нормализует элементы таким образом, что они суммируются с 1.

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

Пример: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

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

Имя переменной ответа, указанное как вектор символа или скаляр строки.

  • Если вы поставляете Y, то вы можете использовать 'ResponseName' для указания имени переменной ответа.

  • Если вы поставляете ResponseVarName или formula, то вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

Типы данных: char | string

Преобразование оценки, указанное как вектор символа, скаляр строки или дескриптор функции.

В этой таблице представлены доступные векторы символов и строковые скаляры.

СтоимостьОписание
'doublelogit'1/( 1 + e-2x)
'invlogit'log (x/( 1 - x))
'ismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0
'logit'1/( 1 + e-x)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2x – 1
'symmetricismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1
'symmetriclogit'2/( 1 + e-x) - 1

Для функции MATLAB или определяемой функции используйте ее дескриптор функции для преобразования оценки. Дескриптор функции должен принимать матрицу (исходные баллы) и возвращать матрицу того же размера (преобразованные баллы).

Пример: 'ScoreTransform','logit'

Типы данных: char | string | function_handle

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор положительных значений или имя переменной в Tbl. Программное обеспечение взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк X или Tbl.

Если входные данные указаны как таблица Tbl, то Weights может быть именем переменной в Tbl содержит числовой вектор. В этом случае необходимо указать Weights в виде вектора символов или строкового скаляра. Например, если вектор весов W хранится как Tbl.W, затем укажите его как 'W'. В противном случае программа обрабатывает все столбцы Tbl, в том числе W, в качестве предикторов или реакции при обучении модели.

Программное обеспечение нормализуется Weights для суммирования значения предшествующей вероятности в соответствующем классе.

По умолчанию Weights является ones(n,1), где n - количество наблюдений в X или Tbl.

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

Оптимизация гиперпараметров

свернуть все

Параметры для оптимизации, указанные как пара, разделенная запятыми, состоящая из 'OptimizeHyperparameters' и одно из следующих:

  • 'none' - Не оптимизировать.

  • 'auto' - Использование {'Coding'} вместе с параметрами по умолчанию для указанного Learners:

    • Learners = 'svm' (по умолчанию) - {'BoxConstraint','KernelScale'}

    • Learners = 'discriminant'{'Delta','Gamma'}

    • Learners = 'kernel'{'KernelScale','Lambda'}

    • Learners = 'knn'{'Distance','NumNeighbors'}

    • Learners = 'linear'{'Lambda','Learner'}

    • Learners = 'naivebayes'{'DistributionNames','Width'}

    • Learners = 'tree'{'MinLeafSize'}

  • 'all' - Оптимизируйте все подходящие параметры.

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

  • Вектор optimizableVariable объекты, обычно выходные данные hyperparameters

Оптимизация пытается минимизировать потери при перекрестной проверке (ошибка) для fitcecoc путем изменения параметров. Сведения о потере при перекрестной проверке в другом контексте см. в разделе Потеря классификации. Для управления типом перекрестной проверки и другими аспектами оптимизации используйте HyperparameterOptimizationOptions пара имя-значение.

Примечание

'OptimizeHyperparameters' значения переопределяют любые значения, заданные с помощью других аргументов пары «имя-значение». Например, настройка 'OptimizeHyperparameters' кому 'auto' вызывает 'auto' значения для применения.

Подходящие параметры для fitcecoc являются:

  • Codingfitcecoc поиск среди 'onevsall' и 'onevsone'.

  • Подходящие гиперпараметры для выбранного Learners, как указано в этой таблице.

    УченикиПодходящие гиперпараметры
    (Полужирный = по умолчанию)
    Диапазон по умолчанию
    'discriminant'DeltaМасштаб журнала в диапазоне [1e-6,1e3]
    DiscrimType'linear', 'quadratic', 'diagLinear', 'diagQuadratic', 'pseudoLinear', и 'pseudoQuadratic'
    GammaРеальные значения в [0,1]
    'kernel'LambdaПоложительные значения, зарегистрированные в журнале в диапазоне [1e-3/NumObservations,1e3/NumObservations]
    KernelScaleПоложительные значения, зарегистрированные в журнале в диапазоне [1e-3,1e3]
    Learner'svm' и 'logistic'
    NumExpansionDimensionsЦелые числа, масштабированные в диапазоне [100,10000]
    'knn'Distance'cityblock', 'chebychev', 'correlation', 'cosine', 'euclidean', 'hamming', 'jaccard', 'mahalanobis', 'minkowski', 'seuclidean', и 'spearman'
    DistanceWeight'equal', 'inverse', и 'squaredinverse'
    ExponentПоложительные значения в [0.5,3]
    NumNeighborsЛогарифмированные положительные целочисленные значения в диапазоне [1, max(2,round(NumObservations/2))]
    Standardize'true' и 'false'
    'linear'LambdaПоложительные значения, зарегистрированные в журнале в диапазоне [1e-5/NumObservations,1e5/NumObservations]
    Learner'svm' и 'logistic'
    Regularization'ridge' и 'lasso'
    'naivebayes'DistributionNames'normal' и 'kernel'
    WidthПоложительные значения, зарегистрированные в журнале в диапазоне [MinPredictorDiff/4,max(MaxPredictorRange,MinPredictorDiff)]
    Kernel'normal', 'box', 'epanechnikov', и 'triangle'
    'svm'BoxConstraintПоложительные значения, зарегистрированные в журнале в диапазоне [1e-3,1e3]
    KernelScaleПоложительные значения, зарегистрированные в журнале в диапазоне [1e-3,1e3]
    KernelFunction'gaussian', 'linear', и 'polynomial'
    PolynomialOrderЦелые числа в диапазоне [2,4]
    Standardize'true' и 'false'
    'tree'MaxNumSplitsЦелые числа, масштабированные в диапазоне [1,max(2,NumObservations-1)]
    MinLeafSizeЦелые числа, масштабированные в диапазоне [1,max(2,floor(NumObservations/2))]
    NumVariablesToSampleЦелые числа в диапазоне [1,max(2,NumPredictors)]
    SplitCriterion'gdi', 'deviance', и 'twoing'

    В качестве альтернативы можно использовать hyperparameters с выбранным вами Learners, такие как

    load fisheriris % hyperparameters requires data and learner
    params = hyperparameters('fitcecoc',meas,species,'svm');

    Чтобы увидеть подходящие гиперпараметры и гиперпараметры по умолчанию, проверьте params.

Установка параметров, не используемых по умолчанию, путем передачи вектора optimizableVariable объекты, не имеющие значений по умолчанию. Например,

load fisheriris
params = hyperparameters('fitcecoc',meas,species,'svm');
params(2).Range = [1e-4,1e6];

Проход params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 1 + потери при перекрестной проверке) для регрессии и коэффициент неправильной классификации для классификации. Для управления итеративным отображением установите Verbose области 'HyperparameterOptimizationOptions' аргумент пары имя-значение. Для управления графиками установите ShowPlots области 'HyperparameterOptimizationOptions' аргумент пары имя-значение.

Пример см. в разделе Оптимизация классификатора ECOC.

Пример: 'auto'

Опции оптимизации, указанные как разделенная запятыми пара, состоящая из 'HyperparameterOptimizationOptions' и структура. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент пары имя-значение. Все поля в структуре являются необязательными.

Имя поляЦенностиДефолт
Optimizer
  • 'bayesopt' - использовать байесовскую оптимизацию. Внутренний вызов этого параметра bayesopt.

  • 'gridsearch' - Использовать поиск по сетке с NumGridDivisions значения для измерения.

  • 'randomsearch' - Случайный поиск среди MaxObjectiveEvaluations точки.

'gridsearch' ищет в случайном порядке, используя равномерную выборку без замены из сетки. После оптимизации можно получить таблицу в порядке сетки с помощью команды sortrows(Mdl.HyperparameterOptimizationResults).

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

Функции приобретения, имена которых включают per-second не дают воспроизводимых результатов, поскольку оптимизация зависит от времени выполнения целевой функции. Функции приобретения, имена которых включают plus изменять их поведение при чрезмерной эксплуатации области. Для получения дополнительной информации см. Типы функций сбора данных.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество оценок целевой функции.30 для 'bayesopt' или 'randomsearch'и вся сетка для 'gridsearch'
MaxTime

Ограничение по времени, указанное как положительный реал. Ограничение по времени в секундах, измеренное tic и toc. Время выполнения может превышать MaxTime потому что MaxTime не прерывает оценки функций.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждом измерении. Значение может быть вектором положительных целых чисел, дающим количество значений для каждого измерения, или скаляром, который применяется ко всем измерениям. Это поле игнорируется для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показывать ли графики. Если trueв этом поле отображается наилучшее значение целевой функции относительно номера итерации. Если имеется один или два параметра оптимизации, и если Optimizer является 'bayesopt', то ShowPlots также строит график модели целевой функции по параметрам.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' на каждой итерации. Переменная является BayesianOptimization объект.false
Verbose

Отображение в командной строке.

  • 0 - Нет итеративного дисплея

  • 1 - Итеративный дисплей

  • 2 - Итеративный дисплей с дополнительной информацией

Для получения более подробной информации см. bayesopt Verbose аргумент пары имя-значение.

1
UseParallelЛогическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, для чего требуется панель параллельных вычислений. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно дает воспроизводимые результаты. Дополнительные сведения см. в разделе Параллельная байесовская оптимизация.false
Repartition

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

true обычно дает наиболее надежные результаты, поскольку этот параметр учитывает секционирующий шум. Однако для хороших результатов, true требуется, по крайней мере, вдвое больше оценок функций.

false
Используйте не более одного из следующих трех имен полей.
CVPartitionA cvpartition объект, созданный cvpartition.'Kfold',5 если не указано какое-либо поле перекрестной проверки
HoldoutСкаляр в диапазоне (0,1) представляет собой удерживающую фракцию.
KfoldЦелое число больше 1.

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

Типы данных: struct

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

свернуть все

Обученный классификатор ECOC, возвращенный в качестве ClassificationECOC или CompactClassificationECOC объект модели или ClassificationPartitionedECOC, ClassificationPartitionedLinearECOC, или ClassificationPartitionedKernelECOC объект модели с перекрестной проверкой.

В этой таблице показано, как типы объектов модели возвращены fitcecoc зависит от указанного типа двоичных учеников и от того, выполняется ли перекрестная проверка.

Учащиеся модели линейной классификацииУчащиеся модели классификации ядраПерекрестная проверкаВозвращенный объект модели
НетНетНетClassificationECOC
НетНетДаClassificationPartitionedECOC
ДаНетНетCompactClassificationECOC
ДаНетДаClassificationPartitionedLinearECOC
НетДаНетCompactClassificationECOC
НетДаДаClassificationPartitionedKernelECOC

Описание оптимизации гиперпараметров при перекрестной проверке, возвращаемое как BayesianOptimization объект или таблица гиперпараметров и связанных значений. HyperparameterOptimizationResults является непустым, когда OptimizeHyperparameters аргумент пары имя-значение не пуст, и Learners аргумент пары имя-значение обозначает линейных или двоичных учеников ядра. Значение зависит от настройки HyperparameterOptimizationOptions аргумент пары имя-значение:

  • 'bayesopt' (по умолчанию) - объект класса BayesianOptimization

  • 'gridsearch' или 'randomsearch' - Таблица используемых гиперпараметров, наблюдаемых значений целевой функции (потери перекрестной проверки) и ранга наблюдения от наименьшего (лучший) до высшего (худший)

Типы данных: table

Ограничения

  • fitcecoc поддерживает разреженные матрицы только для тренировочных моделей линейной классификации. Для всех остальных моделей вместо этого введите полную матрицу данных предиктора.

Подробнее

свернуть все

Двоичные потери

Двоичная потеря - это функция класса и оценки классификации, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в классе.

Предположим, что:

  • mkj - элемент (k, j) матрицы M дизайна кодирования (то есть код, соответствующий классу k двоичного учащегося j).

  • sj - оценка двоичного ученика j для наблюдения.

  • g - функция двоичных потерь.

  • k ^ - прогнозируемый класс для наблюдения.

При декодировании на основе потерь [Escalera et al.] класс, производящий минимальную сумму двоичных потерь над двоичными учениками, определяет прогнозируемый класс наблюдения, то есть

k^=argmink∑j=1L'mkj'g (mkj, sj).

При декодировании со взвешенными потерями [Escalera et al.] класс, производящий минимальное среднее двоичных потерь по двоичным ученикам, определяет прогнозируемый класс наблюдения, то есть

k^=argmink∑j=1L'mkj'g (mkj, sj) ∑j=1L'mkj|.

Allwein et al. предполагают, что взвешенное по потерям декодирование улучшает точность классификации, сохраняя значения потерь для всех классов в одном динамическом диапазоне.

Эта таблица суммирует поддерживаемые функции потерь, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, и g (yj, sj).

СтоимостьОписаниеДомен оценкиg (yj, sj)
'binodeviance'Биномиальное отклонение(–∞,∞)журнал [1 + exp (-2yjsj) ]/[ 2log (2)]
'exponential'Показательный(–∞,∞)exp (-yjsj )/2
'hamming'Хэмминг[0,1] или (- ∞,∞)[1 - знак (yjsj) ]/2
'hinge'Стержень(–∞,∞)max (0,1 - yjsj )/2
'linear'Линейный(–∞,∞)(1 - yjsj )/2
'logit'Логистический(–∞,∞)log [1 + exp (-yjsj) ]/[ 2log (2)]
'quadratic'Квадратный[0,1][1-yj (2sj-1)] 2/2

Программное обеспечение нормализует двоичные потери так, что потери составляют 0,5, когда yj = 0, и агрегирует, используя среднее значение двоичных учеников [Allwein et al.].

Не путайте бинарную потерю с общей классификационной потерей (указанной 'LossFun' аргумент пары имя-значение loss и predict объектные функции), который измеряет, насколько хорошо классификатор ECOC работает в целом.

Проект кодирования

Схема кодирования является матрицей, где элементы направляют, какие классы обучаются каждым двоичным учеником, то есть как проблема мультикласса сводится к ряду двоичных проблем.

Каждая строка схемы кодирования соответствует определенному классу, и каждый столбец соответствует двоичному ученику. В схеме троичного кодирования для определенного столбца (или двоичного ученика):

  • Строка, содержащая 1, позволяет двоичному ученику сгруппировать все наблюдения в соответствующем классе в положительный класс.

  • Строка, содержащая -1, позволяет двоичному ученику сгруппировать все наблюдения в соответствующем классе в отрицательный класс.

  • Строка, содержащая 0, предписывает двоичному ученику игнорировать все наблюдения в соответствующем классе.

Оптимальны матрицы проектирования кодирования с большими, минимальными, попарными расстояниями строк на основе измерения Хэмминга. Для получения подробной информации о попарном расстоянии строки см. Матрицы проектирования случайного кодирования и [4].

В этой таблице описаны популярные схемы кодирования.

Проект кодированияОписаниеЧисло обучающихся Минимальное попарное расстояние между рядами
один против всех (OVA)Для каждого двоичного ученика один класс является положительным, а остальные - отрицательными. Эта конструкция исчерпывает все комбинации положительных назначений классов.K2
один против одного (OVO)Для каждого двоичного ученика один класс является положительным, другой отрицательным, а остальные игнорируются. Эта конструкция исчерпывает все комбинации назначений пар классов.

К (К - 1 )/2

1
двоичный файл завершен

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

2K – 1 – 12K – 2
троичное завершение

Эта конструкция разбивает классы на все троичные комбинации. То есть все назначения классов 0, –1, и 1 с, по крайней мере, одним положительным классом и одним отрицательным классом в назначении для каждого двоичного ученика.

(3K2K + 1 + 1)/2

3K – 2
порядковыйДля первого двоичного ученика первый класс отрицательный, а остальные положительные. Для второго двоичного ученика первые два класса отрицательные, а остальные положительные и так далее.К - 11
плотные случайныеДля каждого двоичного ученика программное обеспечение случайным образом распределяет классы в положительные или отрицательные классы, по крайней мере один из каждого типа. Дополнительные сведения см. в разделе Матрицы проектирования произвольного кодирования.

Случайный, но приблизительно 10 log2K

Переменная
разреженные случайныеДля каждого двоичного ученика программа случайным образом назначает классы как положительные или отрицательные с вероятностью 0,25 для каждого и игнорирует классы с вероятностью 0,5. Дополнительные сведения см. в разделе Матрицы проектирования произвольного кодирования.

Случайный, но примерно 15 log2K

Переменная

Этот график сравнивает количество двоичных учеников для схем кодирования с увеличением К.

Модель выходных кодов с исправлением ошибок

Модель выходных кодов с исправлением ошибок (ECOC) сводит проблему классификации с тремя или более классами к набору проблем двоичной классификации.

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

Предположим, что:

  • Проблема классификации имеет три класса.

  • Схема кодирования - один против одного. Для трех классов этот дизайн кодирования

    Ученик 1Learner 2Learner 3Class 1110Class 2  101Class 30 1 − 1

  • Схема декодирования использует потери g.

  • Учащимися являются SVM.

Для построения этой модели классификации алгоритм ECOC выполняет следующие действия.

  1. Ученик 1 обучается наблюдениям в классе 1 или классе 2 и рассматривает класс 1 как положительный класс, а класс 2 как отрицательный класс. Другие учащиеся проходят аналогичную подготовку.

  2. Пусть M - матрица дизайна кодирования с элементами mkl, и sl - прогнозируемая оценка классификации для положительного класса учащегося l. Алгоритм назначает новое наблюдение классу (k ^), которое минимизирует агрегацию потерь для L двоичных учеников.

    k^=argmink∑l=1L'mkl'g (мл, сл) ∑l=1L'mkl|.

Модели ECOC могут повысить точность классификации по сравнению с другими многоклассовыми моделями [2].

Совет

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

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

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

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

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

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

  • После обучения модели можно создать код C/C + +, который предсказывает метки для новых данных. Для создания кода C/C + + требуется Coder™ MATLAB. Дополнительные сведения см. в разделе Введение в создание кода .

Алгоритмы

свернуть все

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

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

  • Каждый элемент имеет значения -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). Поэтому программное обеспечение отклоняет эту схему кодирования.

Параллельные вычисления

При использовании параллельных вычислений (см. Options), то fitcecoc параллельно обучает бинарных учеников.

Предварительные вероятности и затраты

  • Предшествующие вероятности - программное обеспечение нормализует указанные предшествующие вероятности классов (Prior) для каждого двоичного ученика. Пусть M - матрица схемы кодирования, а I (A, c) - матрица индикатора. Матрица индикаторов имеет те же размеры, что и A. Если соответствующий элемент A равен c, то матрица индикаторов имеет элементы, равные единице, а в противном случае - нулю. Пусть M + 1 и M-1 быть матрицами K-by-L, так что:

    • M + 1 = M○I (M, 1), где ○ - элементное умножение (то естьMplus = M.*(M == 1)). Кроме того, пусть ml (+ 1) будет столбчатым вектором 1 M + 1.

    • M-1 = - M○I (M,-1) (то естьMminus = -M.*(M == -1)). Кроме того, пусть ml (1) будет столбчатым вектором l M-1.

    Пусть ¼ l + 1 = мл (+ 1) ° δ и § l 1 = мл ( 1) ° λ, где λ - вектор заданных, классовых предшествующих вероятностей (Prior).

    Затем положительные и отрицательные, скалярные вероятности предшествующего класса для двоичного ученика 1 равны

    λ ^ l (j) =‖πl (j) 1‖πl (+ 1) 1+‖πl (− 1) ‖ 1,

    где j = {-1,1} и a‖1 является одной нормой a.

  • Стоимость - программное обеспечение нормализует матрицу затрат K-by-K C (Cost) для каждого двоичного ученика. Для двоичного учащегося 1 стоимость классификации наблюдения отрицательного класса в положительный класс равна

    cl + = (¼ л (1)) ⊤Cπl (+ 1).

    Аналогично, затраты на классификацию наблюдения положительного класса в отрицательный класс составляют

    cl + = (¼ л (+ 1)) ⊤Cπl (− 1).

    Матрица затрат для двоичного ученика l

    Cl = [0cl + cl + − 0].

    Модели ECOC учитывают затраты на неправильную классификацию путем включения их с классовыми предшествующими вероятностями. При указании Prior и Cost, то программное обеспечение корректирует предыдущие вероятности класса следующим образом:

    λ пл 1 = cl + λ ^ л 1сл + λ ^ л 1 + c + δ ^ l + l + 1 = cl + − λ ^ l + 1cl − + δ ^ l − 1 + c + − ^ l + 1.

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

Для заданного числа классов 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 дизайна кодирования.

Поддержка векторного хранения

По умолчанию и для эффективности, fitcecoc опустошает Alpha, SupportVectorLabels, и SupportVectors свойства для всех линейных двоичных учеников SVM. fitcecoc списки Beta, а не Alpha, на экране модели.

Сохранить Alpha, SupportVectorLabels, и SupportVectors, передать линейный шаблон SVM, который задает сохранение векторов поддержки в fitcecoc. Например, введите:

t = templateSVM('SaveSupportVectors',true)
Mdl = fitcecoc(X,Y,'Learners',t);

Можно удалить векторы поддержки и связанные значения, передав результирующие ClassificationECOC модель в discardSupportVectors.

Ссылки

[1] Allwein, E., R. Schapire и Y. Singer. «Сокращение мультиклассов до двоичных: унифицирующий подход к classifiers маржи». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.

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

[3] Эскалера, С., О. Пужоль и П. Радева. «Процесс декодирования в выходных кодах с тройной коррекцией ошибок». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Том 32, выпуск 7, 2010, стр. 120-134.

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

Расширенные возможности

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