Подходящие модели мультикласса для машин вектора поддержки или других классификаторов
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)
возвращает полное, обученный, мультикласс, модель выходных кодов с коррекцией ошибок (ECOC) использование предикторов в таблице Mdl
= fitcecoc(Tbl
,ResponseVarName
)Tbl
и меток класса в Tbl.ResponseVarName
. fitcecoc
использует K (K – 1)/2 бинарные модели машины вектора поддержки (SVM) с помощью одного по сравнению с одного кодирующего проекта, где K является количеством уникальных (уровней) меток класса. Mdl
является моделью ClassificationECOC
.
возвращает модель ECOC с дополнительными опциями, заданными одним или несколькими аргументами пары Mdl
= fitcecoc(___,Name,Value
)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
задать свойства двоичных учеников ядра; в частности, увеличьте число размерностей расширения к .
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
содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl
как предикторы, затем задать переменную отклика с помощью ResponseVarName
.
Если Tbl
содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl
как предикторы, задать формулу с помощью formula
.
Если Tbl
не содержит переменную отклика, задайте переменную отклика с помощью Y
. Длина переменной отклика и количество строк Tbl
должны быть равными.
Для линейного обучения или модели классификации ядер, fitcecoc
не поддерживает таблицы. Таким образом, если Learners
является 'linear'
или 'kernel'
, содержит линейный шаблон ученика модели классификации (см. templateLinear
), или содержит шаблон ученика классификации ядер (см. templateKernel
), вы не можете предоставить Tbl
, ResponseVarName
или formula
. Предоставьте матрицу данных о предикторе (X
) и массив ответов (Y
) вместо этого.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика, заданное как имя переменной в Tbl
.
Необходимо задать ResponseVarName
как вектор символов или представить скаляр в виде строки. Например, если переменная отклика, Y
хранится как Tbl.Y
, то задают его как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Y
, как предикторы когда обучение модель.
Переменная отклика должна быть категориальным, символом, или массивом строк, логическим или числовым вектором или массивом ячеек из символьных векторов. Если Y
является символьным массивом, то каждый элемент переменной отклика должен соответствовать одной строке массива.
Это - хорошая практика, чтобы задать порядок классов при помощи аргумента пары "имя-значение" ClassNames
.
Типы данных: char | string
formula
— Explanatory ответа и подмножество переменных прогнозаОбъяснительная модель ответа и подмножество переменных прогноза, заданных как вектор символов или скаляр строки в форме 'Y~X1+X2+X3'
. В этой форме Y
представляет переменную отклика, и X1
, X2
, и X3
представляет переменные прогноза. Переменные должны быть именами переменных в Tbl
(Tbl.Properties.VariableNames
).
Чтобы задать подмножество переменных в Tbl
как предикторы для обучения модель, используйте формулу. Если вы задаете формулу, то программное обеспечение не использует переменных в Tbl
, которые не появляются в formula
.
Типы данных: char | string
Y
Метки классаМетки класса, к которым обучена модель ECOC, задали как категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов.
Если Y
является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Длина Y
и количество строк Tbl
или X
должны быть равными.
Это - хорошая практика, чтобы задать порядок класса с помощью аргумента пары "имя-значение" ClassNames
.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
X
Данные о предиктореДанные о предикторе, заданные как полная или разреженная матрица.
Длина 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'
.
'Coding'
— Кодирование проекта'onevsone'
(значение по умолчанию) | 'allpairs'
| 'binarycomplete'
| 'denserandom'
| 'onevsall'
| 'ordinal'
| 'sparserandom'
| 'ternarycomplete'
| числовая матрицаКодирование имени проекта, заданного как пара, разделенная запятой, состоящая из 'Coding'
и числовой матрицы или значения в этой таблице.
Значение | Количество бинарных учеников | Описание |
---|---|---|
'allpairs' и 'onevsone' | K (K – 1)/2 | Для каждого бинарного ученика один класс положителен, другой отрицателен, и программное обеспечение игнорирует остальных. Этот проект исчерпывает все комбинации присвоений пары класса. |
'binarycomplete' | Этот проект делит классы во все бинарные комбинации и не игнорирует классов. Для каждого бинарного ученика всеми присвоениями класса является -1 и 1 по крайней мере с одним положительным и отрицательным классом в присвоении. | |
'denserandom' | Случайный, но приблизительно 10 log2K | Для каждого бинарного ученика программное обеспечение случайным образом присваивает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования. |
'onevsall' | K | Для каждого бинарного ученика один класс положителен, и остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений класса. |
'ordinal' | K 1 | Для первого бинарного ученика первый класс отрицателен, и остальные положительные. Для второго бинарного ученика первые два класса отрицательны, остальные положительные, и так далее. |
'sparserandom' | Случайный, но приблизительно 15 log2K | Для каждого бинарного ученика программное обеспечение случайным образом присваивает классы как положительные или отрицательные с вероятностью 0.25 для каждого, и игнорирует классы с вероятностью 0.5. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования. |
'ternarycomplete' | Этот проект делит классы во все троичные комбинации. Всеми присвоениями класса является 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
, таким образом, что i
≠ j
, Coding(:,i)
не может равняться Coding(:,j)
и Coding(:,i)
, не может равняться -Coding(:,j)
.
Все строки пользовательской матрицы кодирования должны отличаться.
Для получения дополнительной информации на форме пользовательских матриц проекта кодирования, см. Пользовательские Матрицы Проекта Кодирования.
Пример: 'Coding','ternarycomplete'
Типы данных: char
| string
| double
| single
| int16
| int32
| int64
| int8
'FitPosterior'
— Отметьте указание, преобразовать ли очки к апостериорным вероятностямfalse
или 0
(значение по умолчанию) | true
или 1
Отметьте указание, преобразовать ли очки к апостериорным вероятностям, заданным как пара, разделенная запятой, состоящая из 'FitPosterior'
и true
(1
) или false
(0
).
Если FitPosterior
является true
, то программное обеспечение преобразовывает очки классификации бинарных учеников к апостериорным вероятностям. Можно получить апостериорные вероятности при помощи kfoldPredict
, predict
или resubPredict
.
fitcecoc
не поддерживает подходящие апостериорные вероятности если:
Методом ансамбля является AdaBoostM2
, LPBoost
, RUSBoost
, RobustBoost
или TotalBoost
.
Бинарные ученики (Learners
) линейны или модели классификации ядер та реализация SVM. Чтобы получить апостериорные вероятности для линейного или моделей классификации ядер, реализуйте логистическую регрессию вместо этого.
Пример: 'FitPosterior',true
Типы данных: логический
'Learners'
— Бинарные шаблоны ученика'svm'
(значение по умолчанию) | 'discriminant'
| 'kernel'
| 'knn'
| 'linear'
| 'naivebayes'
| 'tree'
| объект шаблона | вектор ячейки объектов шаблонаБинарные шаблоны ученика, заданные как пара, разделенная запятой, состоящая из '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
Количество интервалов для числовых предикторов[]
(пустое) (значение по умолчанию) | положительный целочисленный скалярКоличество интервалов для числовых предикторов, заданных как пара, разделенная запятой, состоящая из 'NumBins'
и положительного целочисленного скаляра. Этот аргумент допустим только, когда fitcecoc
использует древовидного ученика, то есть, 'Learner'
является или 'tree'
или объект шаблона, созданный при помощи templateTree
или объекта шаблона, созданного при помощи templateEnsemble
с древовидными слабыми учениками.
Если значение 'NumBins'
пусто (значение по умолчанию), то программное обеспечение не делает интервала никакие предикторы.
Если вы задаете значение 'NumBins'
как положительный целочисленный скаляр, то интервалы программного обеспечения каждый числовой предиктор в конкретное количество равновероятных интервалов, и затем выращивает деревья на индексах интервала вместо исходных данных.
Если значение 'NumBins'
превышает номер (u) уникальных значений для предиктора, то интервалы fitcecoc
предиктор в интервалы u.
fitcecoc
не делает интервала категориальные предикторы.
Когда вы используете большой обучающий набор данных, эта опция раскладывания ускоряет обучение, но вызывает потенциальное уменьшение в точности. Можно попробовать 'NumBins',50
сначала, и затем изменить значение 'NumBins'
в зависимости от точности и учебной скорости.
Обученная модель хранит ребра интервала в свойстве BinEdges
.
Пример: 'NumBins',50
Типы данных: single | double
'NumConcurrent'
— Количество бинарных учеников одновременно обучено1
(значение по умолчанию) | положительный целочисленный скалярКоличество бинарных учеников, одновременно обученных, заданных как пара, разделенная запятой, состоящая из 'NumConcurrent'
и положительного целочисленного скаляра. Значением по умолчанию является 1
, что означает, что fitcecoc
обучает бинарных учеников последовательно.
Эта опция применяется только, когда вы используете fitcecoc
на длинных массивах. Смотрите Длинные массивы для получения дополнительной информации.
Типы данных: single | double
'ObservationsIn'
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе, заданная как пара, разделенная запятой, состоящая из 'ObservationsIn'
и 'columns'
или 'rows'
.
Для линейных учеников классификации, если вы ориентируете X
так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем можно испытать значительное сокращение во время выполнения оптимизации.
Для всех других учеников ориентируйте X
так, чтобы наблюдения соответствовали строкам.
Пример: 'ObservationsIn','columns'
'Verbose'
— Уровень многословия0
(значение по умолчанию) | 1
| 2
Уровень многословия, заданный как пара, разделенная запятой, состоящая из 'Verbose'
и 0
, 1
или 2
. Verbose
управляет суммой диагностической информации на бинарного ученика, которого программное обеспечение отображает в Командном окне.
Эта таблица суммирует доступные опции уровня многословия.
Значение | Описание |
---|---|
0 | Программное обеспечение не отображает диагностическую информацию. |
1 | Программное обеспечение отображается, диагностика обменивается сообщениями каждый раз, когда это обучает нового бинарного ученика. |
2 | Программное обеспечение отображается, дополнительная диагностика обменивается сообщениями каждый раз, когда это обучает нового бинарного ученика. |
У каждого бинарного ученика есть его собственный уровень многословия, который независим от этого аргумента пары "имя-значение". Чтобы изменить уровень многословия бинарного ученика, создайте объект шаблона и задайте аргумент пары "имя-значение" 'Verbose'
. Затем передайте объект шаблона fitcecoc
при помощи аргумента пары "имя-значение" 'Learners'
.
Пример: 'Verbose',1
Типы данных: double | single
'CrossVal'
— Отметьте, чтобы обучить перекрестный подтвержденный классификатор'off'
(значение по умолчанию) | 'on'
Отметьте, чтобы обучить перекрестный подтвержденный классификатор, заданный как пара, разделенная запятой, состоящая из 'Crossval'
и 'on'
или 'off'
.
Если вы задаете 'on'
, то программное обеспечение обучает перекрестный подтвержденный классификатор с 10 сгибами.
Можно заменить эту установку перекрестной проверки с помощью одного из CVPartition
, Holdout
, KFold
или аргументов пары "имя-значение" Leaveout
. Можно только использовать один аргумент пары "имя-значение" перекрестной проверки за один раз, чтобы создать перекрестную подтвержденную модель.
Также перекрестный подтвердите позже путем передачи Mdl
crossval
.
Пример: 'Crossval','on'
'CVPartition'
— Раздел перекрестной проверки[]
(значение по умолчанию) | объект раздела cvpartition
Раздел перекрестной проверки, заданный как пара, разделенная запятой, состоящая из 'CVPartition'
и объекта раздела cvpartition
, создается cvpartition
. Объект раздела задает тип перекрестной проверки и индексации для наборов обучения и валидации.
Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition
, Holdout
, KFold
или Leaveout
.
Пример: Предположим, что вы создаете случайный раздел для 5-кратной перекрестной проверки на 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестную подтвержденную модель при помощи 'CVPartition',cvp
.
'Holdout'
— Часть данных для валидации затяжкиЧасть данных используется для валидации затяжки, заданной как пара, разделенная запятой, состоящая из 'Holdout'
и скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, то программное обеспечение завершает эти шаги:
Случайным образом выберите и зарезервируйте % p*100
данных как данные о валидации и обучите модель с помощью остальной части данных.
Сохраните компактную, обученную модель в свойстве Trained
перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition
, Holdout
, KFold
или Leaveout
.
Пример: 'Holdout',0.1
Типы данных: double | single
'KFold'
— Количество сгибов10
(значение по умолчанию) | положительное целочисленное значение, больше, чем 1Количество сгибов, чтобы использовать в перекрестной подтвержденной модели, заданной как пара, разделенная запятой, состоящая из 'KFold'
и положительного целочисленного значения, больше, чем 1. Если вы задаете 'KFold',k
, то программное обеспечение завершает эти шаги:
Случайным образом разделите данные в наборы k
.
Для каждого набора зарезервируйте набор как данные о валидации и обучите модель с помощью другого k
– 1 набор.
Сохраните k
компактные, обученные модели в ячейках k
-by-1 вектор ячейки в свойстве Trained
перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition
, Holdout
, KFold
или Leaveout
.
Пример: 'KFold',5
Типы данных: single | double
'Leaveout'
— Флаг перекрестной проверки "Пропускает один"'off'
(значение по умолчанию) | 'on'
Флаг перекрестной проверки "Пропускает один", заданный как пара, разделенная запятой, состоящая из 'Leaveout'
и 'on'
или 'off'
. Если вы задаете 'Leaveout','on'
, то, для каждого из наблюдений n, где n является size(Mdl.X,1)
, программное обеспечение:
Резервирует наблюдение как данные о валидации и обучает модель с помощью другого n – 1 наблюдение
Хранит n компактные, обученные модели в ячейках n-by-1 вектор ячейки в свойстве Trained
перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно использовать одну из этих четырех опций только: CVPartition
, Holdout
, KFold
или Leaveout
.
"Пропустите один", не рекомендуется для перекрестной проверки моделей ECOC, состоявших из линейных или учеников модели классификации ядер.
Пример: 'Leaveout','on'
'CategoricalPredictors'
— Категориальный список предикторов'all'
Категориальный список предикторов, заданный как пара, разделенная запятой, состоящая из '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'
и категориального, символа, или массива строк, логического или числового вектора или массива ячеек из символьных векторов. 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
'Cost'
— Misclassification стоится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
Опции
Опции параллельных вычислений[]
(значение по умолчанию) | массив структур, возвращенный statset
Опции параллельных вычислений, заданные как пара, разделенная запятой, состоящая из 'Options'
и массива структур, возвращенного statset
. Эти опции требуют Parallel Computing Toolbox™. fitcecoc
использует 'Streams'
, 'UseParallel'
и поля 'UseSubtreams'
.
Эта таблица суммирует доступные параметры.
Опция | Описание |
---|---|
'Streams' |
Объектный массив
В этом случае используйте массив ячеек, одного размера в качестве параллельного пула. Если параллельный пул не открыт, то программное обеспечение пытается открыть одно (в зависимости от ваших настроек), и |
'UseParallel' | Если у вас есть Parallel Computing Toolbox, то можно вызвать пул рабочих установкой Когда вы используете деревья решений для бинарных учеников, |
'UseSubstreams' | Установите на true , чтобы вычислить в параллели с помощью потока, заданного 'Streams' . Значением по умолчанию является false . Например, установите Streams на тип, позволяющий подпотоки, такой as'mlfg6331_64' или 'mrg32k3a' . |
Лучшая практика гарантировать более предсказуемые результаты состоит в том, чтобы использовать parpool
и явным образом создать параллельный пул, прежде чем вы вызовете параллельные вычисления с помощью fitcecoc
.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
'PredictorNames'
— Имена переменной прогнозаИмена переменной прогноза, заданные как пара, разделенная запятой, состоящая из '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'
(значение по умолчанию) | 'uniform'
| числовой вектор | массив структурАприорные вероятности для каждого класса, заданного как пара, разделенная запятой, состоящая из 'Prior'
и значения в этой таблице.
Значение | Описание |
---|---|
'empirical' | Априорные вероятности класса являются частотами родственника класса в Y . |
'uniform' | Все априорные вероятности класса равны 1/K, где K является количеством классов. |
числовой вектор | Каждый элемент является априорной вероятностью класса. Закажите элементы согласно Mdl .ClassNames или задайте порядок с помощью аргумента пары "имя-значение" ClassNames . Программное обеспечение нормирует элементы, таким образом, что они суммируют к 1 . |
структура |
Структура
|
Для получения дополнительной информации о том, как программное обеспечение включает априорные вероятности класса, смотрите Априорные вероятности и Стоимость.
Пример: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)
Типы данных: single
| double
| char
| string
| struct
'ResponseName'
— Имя переменной отклика'Y'
(значение по умолчанию) | вектор символов | представляет скаляр в виде строкиИмя переменной отклика, заданное как пара, разделенная запятой, состоящая из 'ResponseName'
и вектора символов или скаляра строки.
Если вы предоставляете Y
, то можно использовать 'ResponseName'
, чтобы задать имя для переменной отклика.
Если вы предоставляете ResponseVarName
или formula
, то вы не можете использовать 'ResponseName'
.
Пример: 'ResponseName','response'
Типы данных: char | string
'ScoreTransform'
— Выиграйте преобразование'none'
(значение по умолчанию) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| указатель на функцию |...Выиграйте преобразование, заданное как пара, разделенная запятой, состоящая из '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
Веса наблюдения, заданные как пара, разделенная запятой, состоящая из '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'
| 'all'
| массив строк или массив ячеек имеющих право названий параметра | вектор объектов optimizableVariable
Параметры, чтобы оптимизировать, заданный как пара, разделенная запятой, состоящая из '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
:
Coding
— fitcecoc
ищет среди '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'
— Опции для оптимизацииОпции для оптимизации, заданной как пара, разделенная запятой, состоящая из 'HyperparameterOptimizationOptions'
и структуры. Этот аргумент изменяет эффект аргумента пары "имя-значение" OptimizeHyperparameters
. Все поля в структуре являются дополнительными.
Имя поля | Значения | Значение по умолчанию |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
Приобретение функционирует, чьи имена включают | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | Максимальное количество оценок целевой функции. | 30 для 'bayesopt' или 'randomsearch' и целой сетки для 'gridsearch' |
MaxTime | Ограничение по времени, заданное как положительное действительное. Ограничение по времени находится в секундах, как измерено | Inf |
NumGridDivisions | Для 'gridsearch' , количества значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности или скаляр, который применяется ко всем размерностям. Это поле проигнорировано для категориальных переменных. | 10 |
ShowPlots | Логическое значение, указывающее, показать ли графики. Если true , это поле строит лучшее значение целевой функции против номера итерации. Если существуют один или два параметра оптимизации, и если Optimizer является 'bayesopt' , то ShowPlots также строит модель целевой функции против параметров. | true |
SaveIntermediateResults | Логическое значение, указывающее, сохранить ли результаты, когда Optimizer является 'bayesopt' . Если true , это поле перезаписывает переменную рабочей области под названием 'BayesoptResults' в каждой итерации. Переменная является объектом BayesianOptimization . | false |
Verbose | Отобразитесь к командной строке.
Для получения дополнительной информации смотрите
аргумент пары "имя-значение" | 1 |
UseParallel | Логическое значение, указывающее, запустить ли Байесовую оптимизацию параллельно, которая требует Parallel Computing Toolbox. Для получения дополнительной информации смотрите Параллельную Байесовую Оптимизацию. | false |
Repartition | Логическое значение, указывающее, повторно разделить ли перекрестную проверку в каждой итерации. Если
| false |
Используйте не больше, чем одни из следующих трех имен полей. | ||
CVPartition | Объект cvpartition , как создано cvpartition . | 'Kfold',5 , если вы не задаете поля перекрестной проверки |
Holdout | Скаляр в области значений (0,1) , представляющий часть затяжки. | |
Kfold | Целое число, больше, чем 1. |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl
— Trained ECOCClassificationECOC
| объект модели CompactClassificationECOC
| ClassificationPartitionedECOC
перекрестный подтвержденный объект модели | ClassificationPartitionedLinearECOC
перекрестный подтвержденный объект модели | ClassificationPartitionedKernelECOC
перекрестный подтвержденный объект моделиОбученный классификатор ECOC, возвращенный как ClassificationECOC
или объект модели CompactClassificationECOC
, или ClassificationPartitionedECOC
, ClassificationPartitionedLinearECOC
или ClassificationPartitionedKernelECOC
перекрестный подтвержденный объект модели.
Эта таблица показывает, как типы объектов модели, возвращенных fitcecoc
, зависят от типа бинарных учеников, которых вы задаете и выполняете ли вы перекрестную проверку.
Линейные ученики модели классификации | Ученики модели классификации ядер | Перекрестная проверка | Возвращенный объект модели |
---|---|---|---|
Нет | Нет | Нет | ClassificationECOC |
Нет | Нет | Да | ClassificationPartitionedECOC |
Да | Нет | Нет | CompactClassificationECOC |
Да | Нет | Да | ClassificationPartitionedLinearECOC |
Нет | Да | Нет | CompactClassificationECOC |
Нет | Да | Да | ClassificationPartitionedKernelECOC |
HyperparameterOptimizationResults
— Описание оптимизации перекрестной проверки гиперпараметровBayesianOptimization
| таблица гиперпараметров и присваиваемых значенийОписание оптимизации перекрестной проверки гиперпараметров, возвращенных как объект 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 является бинарной функцией потерь.
предсказанный класс для наблюдения.
В loss-based decoding [Escalera и др.], класс, производящий минимальную сумму бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,
В loss-weighted decoding [Escalera и др.], класс, производящий минимальное среднее значение бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,
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) | Для каждого бинарного ученика один класс положителен, и остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений класса. | K | 2 |
один по сравнению с одним (OVO) | Для каждого бинарного ученика один класс положителен, другой отрицателен, и остальные проигнорированы. Этот проект исчерпывает все комбинации присвоений пары класса. | K (K – 1)/2 | 1 |
завершенный двоичный файл | Этот проект делит классы во все бинарные комбинации и не игнорирует классов. Таким образом, всеми присвоениями класса является | 2K – 1 – 1 | 2K – 2 |
троичный завершенный | Этот проект делит классы во все троичные комбинации. Таким образом, всеми присвоениями класса является | (3K – 2K + 1 + 1)/2 | 3K – 2 |
порядковый | Для первого бинарного ученика первый класс отрицателен, и остальные положительны. Для второго бинарного ученика первые два класса отрицательны, и остальные положительны и так далее. | K 1 | 1 |
плотный случайный | Для каждого бинарного ученика программное обеспечение случайным образом присваивает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования. | Случайный, но приблизительно 10 log2K | Переменная |
разреженный случайный | Для каждого бинарного ученика программное обеспечение случайным образом присваивает классы как положительные или отрицательные с вероятностью 0.25 для каждого, и игнорирует классы с вероятностью 0.5. Для получения дополнительной информации см. Случайные Матрицы Проекта Кодирования. | Случайный, но приблизительно 15 log2K | Переменная |
Этот график сравнивает количество бинарных учеников для проектов кодирования с увеличением K.
error-correcting output codes (ECOC) model уменьшает проблему классификации с тремя или больше классами к набору бинарных проблем классификации.
Классификация ECOC требует проекта кодирования, который определяет классы, которые бинарные ученики обучают на, и схема декодирования, которая определяет, как результаты (прогнозы) бинарных классификаторов агрегированы.
Примите следующее:
Проблема классификации имеет три класса.
Проект кодирования один по сравнению с одним. Для трех классов этот проект кодирования
Схема декодирования использует потерю g.
Ученики являются SVMs.
Чтобы создать эту модель классификации, алгоритм ECOC выполняет эти шаги.
Ученик 1 train на наблюдениях в Классе 1 или Классе 2 и Классе 1 обработок как положительный класс и Класс 2 как отрицательный класс. Другие ученики обучены так же.
Позвольте M быть матрицей проекта кодирования с элементами mkl и sl быть предсказанным счетом классификации к положительному классу ученика l. Алгоритм присваивает новое наблюдение классу () это минимизирует агрегацию потерь для двоичных учеников L.
Модели 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, u ≠ v и u ≠-v.
Все векторы строк уникальны.
Матрица может разделить любые два класса. Таким образом, можно переместиться от любой строки до любой другой строки после этих правил:
Можно переместиться вертикально от 1 до-1 или-1 к 1.
Можно переместиться горизонтально от ненулевого элемента до другого ненулевого элемента.
Можно использовать столбец матрицы для вертикального перемещения только однажды.
Если не возможно переместить из строки i, чтобы расположить в ряд j, использующий эти правила, то классы i и j не могут быть разделены проектом. Например, в проекте кодирования
классы 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 = M ○I (M, 1), где ○ является поэлементным умножением (то есть, Mplus = M.*(M == 1)
). Кроме того, позвольте будьте вектор-столбцом l M +1.
M-1 =-M○I (M,-1) (то есть, Mminus = -M.*(M == -1)
). Кроме того, позвольте будьте вектор-столбцом l M-1.
Пусть и , где π является вектором заданных, априорные вероятности класса (Prior
).
Затем положительные и отрицательные, скалярные априорные вероятности класса для бинарного ученика l
где j = {-1,1} и одна норма a.
Стойте — программное обеспечение нормирует K-by-K матрица стоимости C (Cost
) для каждого бинарного ученика. Для бинарного ученика l стоимость классификации наблюдения отрицательного класса в положительный класс
Точно так же стоимость классификации наблюдения положительного класса в отрицательный класс
Матрица стоимости для бинарного ученика l
Модели ECOC размещают затраты misclassification путем слияния их с априорными вероятностями класса. Если вы задаете Prior
и Cost
, то программное обеспечение настраивает априорные вероятности класса можно следующим образом:
Для данного количества классов K программное обеспечение генерирует случайные матрицы проекта кодирования можно следующим образом.
Программное обеспечение генерирует одну из этих матриц:
Плотный случайный — программное обеспечение присваивает 1 или –1 с равной вероятностью к каждому элементу K-by-Ld кодирующий матрицу проекта, где .
Разреженный случайный — программное обеспечение присваивает 1 каждому элементу K-by-Ls кодирующий матрицу проекта с вероятностью 0.25, –1 с вероятностью 0.25, и 0 с вероятностью 0.5, где .
Если столбец не содержит по крайней мере один 1 и по крайней мере один –1, то программное обеспечение удаляет тот столбец.
Для отличных столбцов u и v, если u = v или u = –v, то программное обеспечение удаляет v из матрицы проекта кодирования.
Программное обеспечение случайным образом генерирует 10 000 матриц по умолчанию и сохраняет матрицу с самым большим, минимальным, попарным расстоянием строки на основе меры Хэмминга ([4]) данный
где 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.
Указания и ограничения по применению:
Поддерживаемые синтаксисы:
Mdl = fitcecoc(X,Y)
Mdl = fitcecoc(X,Y,Name,Value)
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitcecoc(X,Y,Name,Value)
— fitcecoc
возвращает дополнительные выходные аргументы FitInfo
и HyperparameterOptimizationResults
, когда вы задаете аргумент пары "имя-значение" 'OptimizeHyperparameters'
.
Выходным аргументом FitInfo
является пустой массив структур, в настоящее время зарезервированный для возможного будущего использования.
Опции, связанные с перекрестной проверкой, не поддержаны. Поддерживаемые аргументы пары "имя-значение":
'ClassNames'
'Cost'
'Coding'
— Значением по умолчанию является 'onevsall'
.
'HyperparameterOptimizationOptions'
— Для перекрестной проверки высокая оптимизация поддерживает только валидацию 'Holdout'
. Например, можно задать fitcecoc(X,Y,'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',struct('Holdout',0.2))
.
'Learners'
— Значением по умолчанию является 'linear'
. Можно задать 'linear'
, 'kernel'
, объект templateLinear
или templateKernel
или массив ячеек таких объектов.
'OptimizeHyperparameters'
— Когда вы используете линейных бинарных учеников, значением гиперпараметра 'Regularization'
должен быть 'ridge'
.
'Prior'
'Verbose'
— Значением по умолчанию является 1
.
'Weights'
Этот дополнительный аргумент пары "имя-значение" характерен для длинных массивов:
'NumConcurrent'
— Положительный целочисленный скаляр, задающий количество бинарных учеников, которые обучены одновременно путем объединения операций файлового ввода-вывода. Значением по умолчанию для 'NumConcurrent'
является 1
, что означает, что fitcecoc
обучает бинарных учеников последовательно. 'NumConcurrent'
является самым выгодным, когда входные массивы не могут поместиться в распределенную кластерную память. В противном случае входные массивы могут кэшироваться, и ускорение незначительно.
Если при запуске свой код по Apache Spark™, NumConcurrent
верхний ограниченный памятью, доступной для коммуникаций. Проверяйте свойства 'spark.executor.memory'
и 'spark.driver.memory'
в свою настройку Spark Apache. Дополнительную информацию см. в parallel.cluster.Hadoop
. Для получения дополнительной информации о Spark Apache и других средах выполнения, которые управляют, куда ваш код запускается, смотрите Расширение длинных массивов с помощью других продуктов (MATLAB).
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Чтобы запуститься параллельно, установите опцию 'UseParallel'
на true
одним из этих способов:
Установите поле 'UseParallel'
структуры опций к true
с помощью statset
и задайте аргумент пары "имя-значение" 'Options'
в вызове fitceoc
.
Например: 'Options',statset('UseParallel',true)
Для получения дополнительной информации смотрите аргумент пары "имя-значение" 'Options'
.
Выполните параллельную гипероптимизацию параметров управления при помощи аргумента пары "имя-значение" 'HyperparameterOptions',struct('UseParallel',true)
в вызове fitceoc
.
Для получения дополнительной информации о параллельной гипероптимизации параметров управления смотрите Параллельную Байесовую Оптимизацию.
ClassificationECOC
| ClassificationPartitionedECOC
| ClassificationPartitionedKernelECOC
| ClassificationPartitionedLinearECOC
| CompactClassificationECOC
| designecoc
| loss
| predict
| statset
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.