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.4505
         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.0039319     0.0039866       0.99208
    {'virginica' }    {'virginica' }      0.017066      0.018262       0.96467
    {'virginica' }    {'virginica' }      0.014947      0.015855        0.9692
    {'versicolor'}    {'versicolor'}    2.2197e-14       0.87318       0.12682
    {'setosa'    }    {'setosa'    }         0.999    0.00025091    0.00074639
    {'versicolor'}    {'virginica' }    2.2195e-14      0.059427       0.94057
    {'versicolor'}    {'versicolor'}    2.2194e-14       0.97002      0.029984
    {'setosa'    }    {'setosa'    }         0.999     0.0002499    0.00074741
    {'versicolor'}    {'versicolor'}     0.0085638       0.98259     0.0088482
    {'setosa'    }    {'setosa'    }         0.999    0.00025013    0.00074718

Столбцы 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

Обучите one-all ECOC классификатор с помощью GentleBoost ансамбль деревьев решений с суррогатными разделениями. Ускорять обучение, интервал числовые предикторы и использовать параллельные вычисления. Раскладывание допустимо только когда fitcecoc использует древовидного ученика. После обучения оцените ошибку классификации 10-кратная перекрестная проверка. Обратите внимание на то, что параллельные вычисления требуют Parallel Computing 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.

Обучите One-All ECOC классификатор

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

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

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

Обучите one-all ECOC классификатор с помощью ансамблей деревьев решений как бинарные ученики. Чтобы ускорить обучение, используйте раскладывание и параллельные вычисления.

  • Раскладывание ('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;

Найдите гиперпараметры, которые минимизируют пятикратную потерю перекрестной проверки при помощи автоматической гипероптимизации параметров управления. Для воспроизводимости установите случайный seed и используйте '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.2847 |     0.10667 |     0.10667 |     onevsone |       5.6939 |       200.36 |
|    2 | Best   |    0.086667 |      4.5531 |    0.086667 |    0.087701 |     onevsone |       94.849 |    0.0032549 |
|    3 | Best   |        0.08 |     0.32817 |        0.08 |    0.080045 |     onevsall |      0.01378 |     0.076021 |
|    4 | Accept |        0.08 |      0.3112 |        0.08 |    0.080001 |     onevsall |          889 |       38.798 |
|    5 | Accept |        0.38 |      15.551 |        0.08 |    0.086871 |     onevsall |       49.222 |    0.0010006 |
|    6 | Accept |        0.08 |     0.47107 |        0.08 |    0.079988 |     onevsall |     0.013195 |     0.085897 |
|    7 | Best   |    0.046667 |      4.6118 |    0.046667 |    0.046675 |     onevsall |    0.0016445 |    0.0010297 |
|    8 | Accept |    0.046667 |      2.2932 |    0.046667 |    0.046674 |     onevsone |      0.59541 |    0.0014402 |
|    9 | Accept |    0.046667 |     0.36436 |    0.046667 |    0.046671 |     onevsone |     0.012477 |     0.020799 |
|   10 | Best   |        0.04 |      0.3716 |        0.04 |    0.040005 |     onevsone |    0.0010187 |    0.0010007 |
|   11 | Accept |     0.33333 |     0.35404 |        0.04 |    0.040007 |     onevsall |       5.5672 |       993.65 |
|   12 | Accept |     0.10667 |     0.31507 |        0.04 |    0.040003 |     onevsone |       0.1032 |       513.88 |
|   13 | Accept |     0.10667 |     0.31158 |        0.04 |    0.040015 |     onevsone |    0.0011591 |       990.24 |
|   14 | Accept |     0.33333 |     0.43271 |        0.04 |    0.040004 |     onevsall |    0.0010042 |       963.34 |
|   15 | Accept |     0.10667 |     0.29002 |        0.04 |    0.040004 |     onevsone |    0.0010067 |       1.9535 |
|   16 | Accept |        0.06 |     0.31364 |        0.04 |    0.040005 |     onevsall |    0.0010016 |      0.01072 |
|   17 | Accept |        0.04 |     0.31295 |        0.04 |    0.040007 |     onevsone |       28.395 |      0.45651 |
|   18 | Accept |        0.04 |     0.29405 |        0.04 |    0.040001 |     onevsone |       1.2638 |     0.079457 |
|   19 | Accept |        0.04 |     0.42304 |        0.04 |    0.040002 |     onevsall |       996.62 |       3.1406 |
|   20 | Accept |        0.04 |     0.29305 |        0.04 |     0.03999 |     onevsone |        927.5 |       1.5269 |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Accept |    0.046667 |     0.40918 |        0.04 |    0.039989 |     onevsone |       986.43 |       0.1949 |
|   22 | Accept |        0.04 |     0.33476 |        0.04 |    0.039951 |     onevsone |     0.022563 |     0.002403 |
|   23 | Accept |        0.08 |     0.36873 |        0.04 |    0.039952 |     onevsall |       24.257 |       3.1561 |
|   24 | Accept |        0.04 |     0.39275 |        0.04 |     0.03996 |     onevsone |    0.0098708 |    0.0010205 |
|   25 | Accept |        0.04 |     0.30773 |        0.04 |    0.039951 |     onevsone |      0.32682 |     0.012893 |
|   26 | Accept |     0.10667 |     0.30816 |        0.04 |    0.039951 |     onevsone |       964.86 |       992.67 |
|   27 | Accept |    0.046667 |      4.1941 |        0.04 |     0.03998 |     onevsall |    0.0010054 |    0.0010217 |
|   28 | Accept |        0.04 |       0.343 |        0.04 |    0.039975 |     onevsone |       13.684 |     0.090526 |
|   29 | Accept |        0.04 |     0.30173 |        0.04 |    0.039935 |     onevsone |       219.59 |       0.5975 |
|   30 | Accept |        0.04 |     0.29143 |        0.04 |    0.039909 |     onevsone |    0.0010222 |    0.0040638 |

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

Best observed feasible point:
     Coding     BoxConstraint    KernelScale
    ________    _____________    ___________

    onevsone      0.0010187       0.0010007 

Observed objective function value = 0.04
Estimated objective function value = 0.039964
Function evaluation time = 0.3716

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

    onevsone      0.022563        0.002403  

Estimated objective function value = 0.039909
Estimated function evaluation time = 0.35815
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 непосредственно. Однако можно использовать или линейный или модели классификации двоичных файлов ядра то использование SVMs.

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

Создайте datastore, который ссылается на папку, содержащую ирисовый набор данных Фишера. Задайте '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, которая использует высокие данные и линейных бинарных учеников. По умолчанию, когда вы передаете длинные массивы fitcecoc, программное обеспечение обучает линейных бинарных учеников то использование SVMs. Поскольку данные об ответе содержат только три уникальных класса, измените схему кодирования от one-all (который является значением по умолчанию, когда вы используете высокие данные) для один по сравнению с одним (который, значение по умолчанию, когда вы используете данные в оперативной памяти).

Для воспроизводимости установите seed генераторов случайных чисел с помощью rng и tallrng. Результаты могут варьироваться в зависимости от количества рабочих и среды выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление Где Ваши Запуски Кода.

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'

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

Передайте 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 представляет переменную отклика и X1x2 , и X3 представляйте переменные предикторы.

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

Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB®.

Можно проверить имена переменных в Tbl при помощи isvarname функция. Следующий код возвращает логический 1 TRUE) для каждой переменной, которая имеет допустимое имя переменной.

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

Типы данных: 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'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 с по крайней мере одним положительным и один отрицательный класс в присвоении.

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

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

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

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

  • Для всех индексов столбца iJ таким образом, что 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

Типы данных: логический

Бинарный ученик обрабатывает по шаблону в виде разделенной запятой пары, состоящей из '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 матрицы проекта кодирования), и вектор ячейки должен иметь длину L. L является количеством столбцов в матрице проекта кодирования. Для получения дополнительной информации смотрите Coding.

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

    • Вы не можете задать линейные шаблоны ученика модели классификации ни с каким другим шаблоном.

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

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

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

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

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

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

    • Если 'NumBins' значение превышает номер (u) уникальных значений для предиктора, затем fitcecoc интервалы предиктор в интервалы u.

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

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

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

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

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

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

Примечание

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

Типы данных: 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. Объект раздела задает тип перекрестной проверки и индексации для наборов обучения и валидации.

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

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

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

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

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

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

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

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

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

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

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

  3. Сохраните k компактные, обученные модели в ячейках k- 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'

Другие опции классификации

свернуть все

Категориальные предикторы перечисляют в виде разделенной запятой пары, состоящей из 'CategoricalPredictors' и одно из значений в этой таблице.

ЗначениеОписание
Вектор из положительных целых чиселКаждая запись в векторе является значением индекса, соответствующим столбцу данных о предикторе (X или Tbl) это содержит категориальную переменную.
Логический векторtrue запись означает что соответствующий столбец данных о предикторе (X или Tbl) категориальная переменная.
Символьная матрицаКаждая строка матрицы является именем переменного предиктора. Имена должны совпадать с записями в PredictorNames. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
Массив строк или массив ячеек из символьных векторовКаждым элементом в массиве является имя переменного предиктора. Имена должны совпадать с записями в PredictorNames.
'all'Все предикторы являются категориальными.

Спецификация 'CategoricalPredictors' является соответствующим если:

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

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

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

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

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

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

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

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

Используйте 'ClassNames' к:

  • Закажите классы во время обучения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Эта таблица суммирует доступные параметры.

ОпцияОписание
'Streams'

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

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

  • UseParallel true.

  • UseSubstreams false.

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

'UseParallel'

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

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

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

Лучшая практика гарантировать более предсказуемые результаты состоит в том, чтобы использовать parpool (Parallel Computing Toolbox) и явным образом создает параллельный пул, прежде чем вы вызовете использование параллельных вычислений fitcecoc.

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

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

Переменный предиктор называет в виде разделенной запятой пары, состоящей из 'PredictorNames' и массив строк уникальных имен или массив ячеек уникальных векторов символов. Функциональность '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

Имя переменной отклика в виде разделенной запятой пары, состоящей из 'ResponseName' и вектор символов или строковый скаляр.

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

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

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

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

Выиграйте преобразование в виде разделенной запятой пары, состоящей из 'ScoreTransform' и вектор символов, строковый скаляр или указатель на функцию.

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

ЗначениеОписание
'doublelogit'1/(1 + e –2x)
'invlogit'журнал (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 единицы (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'Корреляция, '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'поле, '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.

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

Для примера смотрите, Оптимизируют Классификатор ECOC.

Пример: 'auto'

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

Имя поляЗначенияЗначение по умолчанию
Optimizer
  • 'bayesopt' — Используйте Байесовую оптимизацию. Внутренне, эта установка вызовы bayesopt.

  • 'gridsearch' — Используйте поиск сетки с NumGridDivisions значения на размерность.

  • 'randomsearch' — Поиск наугад среди MaxObjectiveEvaluations 'points'.

'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Логическое значение, указывающее, запустить ли Байесовую оптимизацию параллельно, которая требует Parallel Computing Toolbox. Из-за невоспроизводимости синхронизации параллели, параллельная Байесова оптимизация не обязательно приводит к восстанавливаемым результатам. Для получения дополнительной информации смотрите Параллельную Байесовую Оптимизацию.false
Repartition

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

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

false
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitioncvpartition объект, как создано 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 разреженные матрицы поддержек для учебных линейных моделей классификации только. Для всех других моделей предоставьте полную матрицу данных о предикторе вместо этого.

Больше о

свернуть все

Бинарная потеря

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

Предположим следующее:

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

  • sj является счетом бинарного ученика j для наблюдения.

  • g является бинарной функцией потерь.

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

В loss-based decoding [Escalera и al.], класс, производящий минимальную сумму бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,

k^=argminkj=1L|mkj|g(mkj,sj).

В loss-weighted decoding [Escalera и al.], класс, производящий минимальное среднее значение бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,

k^=argminkj=1L|mkj|g(mkj,sj)j=1L|mkj|.

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

Эта таблица суммирует поддерживаемые функции потерь, где 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'Стержень(–∞,∞)макс. (0,1 – yjsj)/2
'linear'Линейный(–∞,∞)(1 – yjsj)/2
'logit'Логистический(–∞,∞)журнал [1 + exp (–yjsj)] / [2log (2)]
'quadratic'Квадратичный[0,1][1 – yj (2sj – 1)] 2/2

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

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

Кодирование проекта

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

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

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

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

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

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

Эта таблица описывает популярные проекты кодирования.

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

K (K – 1)/2

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

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

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

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

(3K – 2K + 1 + 1)/2

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

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

Переменная
разреженный случайныйДля каждого бинарного ученика программное обеспечение случайным образом присваивает классы как положительные или отрицательные с вероятностью 0.25 для каждого, и игнорирует классы с вероятностью 0.5. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования.

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

Переменная

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

Выходная модель кода с коррекцией ошибок

error-correcting output codes (ECOC) model уменьшает проблему классификации с тремя или больше классами к набору бинарных проблем классификации.

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

Примите следующее:

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

  • Проект кодирования один по сравнению с одним. Для трех классов этот проект кодирования

    Ученик 1Ученик 2Ученик 3 Класс 1110 Класс 2101 Класс 3011

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

  • Ученики являются SVMs.

Чтобы создать эту модель классификации, алгоритм ECOC выполняет эти шаги.

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

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

    k^=argminkl=1L|mkl|g(mkl,sl)l=1L|mkl|.

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

Советы

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

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

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

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

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

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

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

Алгоритмы

свернуть все

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

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

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

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

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

Априорные вероятности и стоимость

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

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

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

    Пусть πl+1=ml(+1)°π и πl1=ml(1)°π, где π является вектором из заданных, априорные вероятности класса (Prior).

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

    π^l(j)=πl(j)1πl(+1)1+πl(1)1,

    где j = {-1,1} и a1 одна норма a.

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

    cl+=(πl(1))Cπl(+1).

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

    cl+=(πl(+1))Cπl(1).

    Матрица стоимости для бинарного ученика l

    Cl=[0cl+cl+0].

    Модели ECOC вмещают затраты misclassification путем слияния их с априорными вероятностями класса. Если вы задаете Prior и Cost, затем программное обеспечение настраивает априорные вероятности класса можно следующим образом:

    π¯l1=cl+π^l1cl+π^l1+c+π^l+1π¯l+1=cl+π^l+1cl+π^l1+c+π^l+1.

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

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

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

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

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

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

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

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

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

где mkjl является элементом кодирования матрицы проекта 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., Р. Шапайр и И. Зингер. “Уменьшая мультикласс до двоичного файла: подход объединения для поля classifiers”. Журнал Исследования Машинного обучения. Издание 1, 2000, стр 113–141.

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

[3] Escalera, S., О. Пуджол и П. Радева. “На процессе декодирования в троичных выходных кодах с коррекцией ошибок”. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту. Издание 32, Выпуск 7, 2010, стр 120–134.

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

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

Введенный в R2014b