fitcecoc

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

Описание

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

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

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

пример

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

пример

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

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

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

Примеры

свернуть все

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

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

load fisheriris
X = meas;
Y = species;

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

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


  Properties, Methods

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

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

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

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

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

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

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

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


  Properties, Methods

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

error = resubLoss(Mdl)
error = 0.0067

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

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

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

load nlpdata

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

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

t = templateLinear();

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

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

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


  Properties, Methods

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

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

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

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

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

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

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

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

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

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

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

Mdl является ClassificationECOC классификатор. Вы можете получить доступ к его свойствам с помощью записи через точку.

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

CVMdl = crossval(Mdl);

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

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

genError = kfoldLoss(CVMdl)
genError = 0.0400

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

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

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

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

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

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

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

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

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

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

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

Fitting posterior probabilities for learner 3 (SVM).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обучите классификатор ECOC один от всех с помощью GentleBoost ансамбль деревьев решений с суррогатными сплитами. Чтобы ускорить обучение, числовые предикторы интервал и используйте параллельные вычисления. Раскладывание действительно только при 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.

Обучите классификатор один от всех ECOC

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

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

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

Обучите классификатор 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 значения NaNс.

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

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

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

Best observed feasible point:
     Coding     BoxConstraint    KernelScale
    ________    _____________    ___________

    onevsone      0.0010854       0.048345  

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

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

    onevsone      0.0011336       0.042445  

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


  Properties, Methods

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

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

При выполнении вычислений на длинные массивы 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программное обеспечение обучает линейных двоичных учащихся, которые используют SVM. Поскольку данные отклика содержат только три уникальных класса, измените схему кодирования с «один против всех» (которая является по умолчанию, когда вы используете высокие данные) на «один от одного» (которая является по умолчанию, когда вы используете данные в памяти).

Для воспроизводимости установите начальные значения генераторов случайных чисел, используя 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'

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

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

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


  Properties, Methods

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

Хорошей практикой является определение порядка классов при помощи ClassNames аргумент имя-значение.

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

Примечание

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

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

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

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

Примечание

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

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

свернуть все

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

ЗначениеКоличество двоичных учащихсяОписание
'allpairs' и 'onevsone'K (K – 1)/2Для каждого двоичного ученика один класс положителен, другой отрицателен, и программное обеспечение игнорирует восстановление. Этот проект исчерпывает все комбинации присвоений пар классов.
'binarycomplete'2(K1)1Этот проект разбивает классы на все двоичные комбинации и не игнорирует никакие классы. Для каждого двоичного ученика все назначения классов -1 и 1 с по крайней мере одним положительным и отрицательным классом в присвоении.
'denserandom'Случайный, но приблизительно 10 лог2 KДля каждого двоичного ученика программа случайным образом назначает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации смотрите Random Coding Design Matrices.
'onevsall'KДля каждого двоичного ученика один класс положителен, а остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений классов.
'ordinal'K – 1Для первого двоичного ученика первый класс отрицателен, а остальное положительно. Для второго двоичного ученика первые два класса отрицательны, остальные положительны и так далее.
'sparserandom'Случайный, но приблизительно 15 лог2 KДля каждого двоичного ученика программа случайным образом присваивает классы как положительные или отрицательные с вероятностью 0,25 для каждого и игнорирует классы с вероятностью 0,5. Для получения дополнительной информации смотрите Random Coding Design Matrices.
'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).

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

Для получения дополнительной информации о форме пользовательских матриц проекта кодирования, см. Custom Coding Design Matrices.

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

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

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

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

fitcecoc не поддерживает аппроксимацию апостериорных вероятностей, если:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • templateSVM, для SVM.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обученная модель сохраняет границы интервала в 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, Holdout, KFold, или Leaveout.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

Использование ClassNames кому:

  • Задайте порядок классов во время обучения.

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

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

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

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

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

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

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

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

    • S.ClassNames, который содержит имена классов как переменный совпадающий тип данных as 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, используйте один объект, за исключением тех случаев, когда следующее имеет значение true:

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

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

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

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

'UseParallel'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этой таблице результирующие векторы символов и строковые скаляры.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 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', '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.

Установите параметры nondefault путем передачи вектора optimizableVariable объекты, которые имеют значения nondefault. Для примера,

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

Передайте params как значение OptimizeHyperparameters.

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

Для получения примера см. раздел «Оптимизация классификатора ECOC».

Пример: 'auto'

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

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

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

  • 'randomsearch' - Поиск наугад среди MaxObjectiveEvaluations точки.

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

'bayesopt'
AcquisitionFunctionName

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

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

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

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

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

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

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

  • 0 - Нет итерационного отображения

  • 1 - Итеративное отображение

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

Ограничения

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

Подробнее о

свернуть все

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

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

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

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

  • sj - этот счет двоичных j учащихся для наблюдения.

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

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

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

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

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

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

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

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

ЗначениеОписаниеСчетg (yj, sj)
'binodeviance'Биномиальное отклонение(–∞,∞)log [1 + exp (-2 yjsj) ]/[ 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 (2 sj – 1)]2/2

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

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

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

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

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

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

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

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

Матрицы проекта кодирования с большими, минимальными, попарными расстояниями в строках, основанными на мере Хемминга, оптимальны. Для получения дополнительной информации о парном расстоянии между строками смотрите Random Coding Design Matrices и [4].

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

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

K (K – 1)/2

1
бинарный полный

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

2K – 1 – 12K – 2
ternary complete

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

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

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

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

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

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

Переменная

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

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

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

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

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

  • Задача классификации имеет три класса.

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

    Учащийся 1Учащийся 2Учащийся 3Класс 1110Класс 2101Класс 3011

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

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

Чтобы создать эту классификационную модель, алгоритм 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 в Командное окно.

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

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

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

Алгоритмы

свернуть все

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

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

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

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

  • Для всех отличных векторов - столбцов u и v, <reservedrangesplaceholder3> ≠ <reservedrangesplaceholder2> и <reservedrangesplaceholder1> ≠ - v.

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

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

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

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

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

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

    [10100101]

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

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

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

Предыдущие вероятности и затраты

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

    • M + 1 = M I (M, 1), где ○ - поэлементное умножение (то есть Mplus = M.*(M == 1)). Кроме того, позвольте ml(+1) быть вектором-столбцом 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 учитывают затраты на неправильную классификацию путем включения их в классовые предыдущие вероятности. Если вы задаете 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 является элементом матричного < reservedrangesplaceholder0 > проекта кодирования.

Поддержка векторной памяти

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

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

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

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

Ссылки

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

[2] Fürnkranz, Johannes, «Round Robin Classification». Дж. Мач. Учись. Res., Vol. 2, 2002, pp. 721-747.

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

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

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

Введенный в R2014b