fitcecoc

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

Синтаксис

Mdl = fitcecoc(Tbl,ResponseVarName)
Mdl = fitcecoc(Tbl,formula)
Mdl = fitcecoc(Tbl,Y)
Mdl = fitcecoc(X,Y)
Mdl = fitcecoc(___,Name,Value)
[Mdl,HyperparameterOptimizationResults] = fitcecoc(___,Name,Value)

Описание

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, с помощью любого из предыдущих синтаксисов.

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

[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 array
    {'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 = 
  classreg.learning.classif.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 = 
  classreg.learning.classif.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 array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

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

    'virginica'     'virginica'      0.0039321     0.0039869       0.99208
    'virginica'     'virginica'       0.017067      0.018263       0.96467
    'virginica'     'virginica'       0.014948      0.015856        0.9692
    'versicolor'    'versicolor'    2.2197e-14       0.87317       0.12683
    'setosa'        'setosa'             0.999    0.00025091    0.00074639
    'versicolor'    'virginica'     2.2195e-14      0.059429       0.94057
    'versicolor'    'versicolor'    2.2194e-14       0.97001      0.029986
    'setosa'        'setosa'             0.999     0.0002499    0.00074741
    'versicolor'    'versicolor'     0.0085646       0.98259      0.008849
    '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 содержит NaN s, то соответствующими значениями Xbinned является NaN s.

Оптимизируйте гиперпараметры автоматически с помощью 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 |     0.87676 |     0.10667 |     0.10667 |     onevsone |       5.6939 |       200.36 |
|    2 | Best   |        0.08 |      7.2344 |        0.08 |    0.081379 |     onevsone |       94.849 |    0.0032549 |
|    3 | Accept |        0.08 |     0.65166 |        0.08 |     0.08003 |     onevsall |      0.01378 |     0.076021 |
|    4 | Accept |        0.08 |      0.5166 |        0.08 |    0.080001 |     onevsall |          889 |       38.798 |
|    5 | Best   |    0.073333 |      0.5641 |    0.073333 |    0.073337 |     onevsall |       17.142 |       1.7174 |
|    6 | Accept |        0.38 |      27.439 |    0.073333 |    0.073338 |     onevsall |      0.88995 |    0.0010029 |
|    7 | Best   |    0.046667 |     0.38402 |    0.046667 |    0.046688 |     onevsall |        4.246 |       0.3356 |
|    8 | Best   |    0.033333 |     0.32073 |    0.033333 |    0.033341 |     onevsone |      0.22406 |      0.37399 |
|    9 | Best   |    0.026667 |     0.32614 |    0.026667 |    0.026678 |     onevsone |       14.237 |       3.5166 |
|   10 | Accept |     0.33333 |     0.40016 |    0.026667 |    0.026676 |     onevsall |    0.0064689 |       999.31 |
|   11 | Accept |        0.04 |     0.44305 |    0.026667 |      0.0268 |     onevsone |        982.5 |      0.51146 |
|   12 | Accept |    0.046667 |      0.3099 |    0.026667 |    0.026694 |     onevsone |     0.018266 |     0.047347 |
|   13 | Accept |     0.10667 |     0.30053 |    0.026667 |    0.029124 |     onevsone |    0.0010243 |       13.372 |
|   14 | Accept |        0.04 |     0.50414 |    0.026667 |    0.032336 |     onevsone |       156.11 |       1.7366 |
|   15 | Accept |    0.046667 |      0.4236 |    0.026667 |      0.0327 |     onevsone |       986.23 |       10.731 |
|   16 | Accept |    0.046667 |       1.915 |    0.026667 |    0.032045 |     onevsone |       371.63 |     0.056453 |
|   17 | Accept |        0.04 |      0.3684 |    0.026667 |    0.033569 |     onevsone |    0.0010311 |    0.0010175 |
|   18 | Accept |    0.046667 |     0.30775 |    0.026667 |    0.034256 |     onevsone |    0.0011574 |      0.16436 |
|   19 | Accept |        0.06 |      13.292 |    0.026667 |    0.032699 |     onevsall |       968.86 |       0.2494 |
|   20 | Accept |        0.04 |     0.37321 |    0.026667 |    0.031457 |     onevsone |       985.47 |       2.8942 |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Accept |        0.04 |     0.44367 |    0.026667 |     0.03134 |     onevsone |     0.001037 |    0.0044045 |
|   22 | Best   |        0.02 |     0.41334 |        0.02 |    0.023771 |     onevsone |       1.9507 |       1.3991 |
|   23 | Best   |    0.013333 |     0.49252 |    0.013333 |    0.018605 |     onevsone |      0.84926 |       1.3538 |
|   24 | Accept |    0.026667 |     0.36232 |    0.013333 |    0.021089 |     onevsone |       0.2101 |       1.5222 |
|   25 | Accept |    0.026667 |     0.49534 |    0.013333 |    0.022321 |     onevsone |       1.7108 |       1.2127 |
|   26 | Accept |     0.10667 |      0.4172 |    0.013333 |    0.022359 |     onevsone |    0.0010149 |       986.98 |
|   27 | Accept |     0.33333 |     0.35196 |    0.013333 |    0.021789 |     onevsall |    0.0010002 |        21.18 |
|   28 | Accept |    0.013333 |     0.30528 |    0.013333 |    0.019873 |     onevsone |       1.5298 |       1.6373 |
|   29 | Accept |        0.02 |     0.30133 |    0.013333 |    0.019708 |     onevsone |       1.2119 |       1.9178 |
|   30 | Accept |     0.33333 |     0.30865 |    0.013333 |    0.019544 |     onevsall |       940.08 |       979.72 |

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

Best observed feasible point:
     Coding     BoxConstraint    KernelScale
    ________    _____________    ___________

    onevsone       0.84926         1.3538   

Observed objective function value = 0.013333
Estimated objective function value = 0.019544
Function evaluation time = 0.49252

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

    onevsone       1.5298          1.6373   

Estimated objective function value = 0.019544
Estimated function evaluation time = 0.382
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.

Создайте 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. Результаты могут отличаться в зависимости от количества рабочих и среды выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление Где Ваши Выполнения Кода (MATLAB).

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 = 
  classreg.learning.classif.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 = 
  classreg.learning.classif.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.8 sec
Evaluation completed in 1.9 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 18 sec
Evaluation completed in 18 sec
errorKernel = 0.0067

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

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

свернуть все

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

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

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

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

Примечание

Для линейного обучения или модели классификации ядер, fitcecoc не поддерживает таблицы. Таким образом, если Learners является 'linear' или 'kernel', содержит линейный шаблон ученика модели классификации (см. templateLinear), или содержит шаблон ученика классификации ядер (см. templateKernel), вы не можете предоставить Tbl, ResponseVarName или formula. Предоставьте матрицу данных о предикторе (X) и массив ответов (Y) вместо этого.

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

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

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

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

Это - хорошая практика, чтобы задать порядок классов при помощи аргумента пары "имя-значение" ClassNames.

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

Объяснительная модель ответа и подмножество переменных прогноза, заданных как вектор символов или скаляр строки в форме 'Y~X1+X2+X3'. В этой форме Y представляет переменную отклика, и X1, X2, и X3 представляет переменные прогноза. Переменные должны быть именами переменных в Tbl (Tbl.Properties.VariableNames).

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

Типы данных: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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.

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

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

Бинарные шаблоны ученика, заданные как пара, разделенная запятой, состоящая из '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 использует древовидного ученика, то есть, 'Learner' является или '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-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'

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

свернуть все

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

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

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

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

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

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

По умолчанию, если данные о предикторе находятся в таблице (Tbl), fitcecoc принимает, что переменная является категориальной, если это содержит логические значения, категориальные значения, массив строк или массив ячеек из символьных векторов. Если данные о предикторе являются матрицей (X), fitcecoc принимает, что все предикторы непрерывны. Чтобы идентифицировать любые категориальные предикторы, когда данные будут матрицей, используйте аргумент пары "имя-значение" 'CategoricalPredictors'.

Пример: '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

Значением по умолчанию является ones(K) - eye(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'

Объектный массив 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 и явным образом создать параллельный пул, прежде чем вы вызовете параллельные вычисления с помощью 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 является 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'}

  • все Оптимизируйте все имеющие право параметры.

  • Массив строк или массив ячеек имеющих право названий параметра

  • Вектор объектов 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.

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

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

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

false
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitionОбъект 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 не поддерживает таблицы. Таким образом, если Learners является 'linear' или 'kernel', содержит линейный шаблон ученика модели классификации (см. templateLinear), или содержит шаблон ученика модели классификации ядер (см. templateKernel), то вы не можете предоставить Tbl, ResponseVarName или formula. Предоставьте матрицу данных о предикторе (X) и массив ответов (Y) вместо этого.

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

Больше о

свернуть все

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

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

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

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

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

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

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

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

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

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

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 и др.].

Не путайте бинарную потерю с полной потерей классификации (заданный аргументом пары "имя-значение" '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 train на наблюдениях в Классе 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 в Командное окно.

  • Необходимо сформировать матрицу кодирования, использующую глубокие знания приложения и учитывающую вычислительные ограничения. Если вы имеете достаточную вычислительную власть и время, то попробуйте несколько матриц кодирования и выберите ту с лучшей производительностью (например, проверяйте матрицы беспорядка на каждую модель с помощью 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 кодирующий матрицу проекта, где Ld10журнал2K.

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

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

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

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

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

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

Поддержите векторное устройство хранения данных

По умолчанию и для эффективности, 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

Для просмотра документации необходимо авторизоваться на сайте