Подбирайте модели мультикласса для машин опорных векторов или других классификаторов
возвращает полное, обученный, мультикласс, модель выходных кодов с коррекцией ошибок (ECOC) использование предикторов в таблице Mdl
= fitcecoc(Tbl
,ResponseVarName
)Tbl
и класс помечает в Tbl.ResponseVarName
. fitcecoc
использование K (K – 1)/2 бинарные модели машины опорных векторов (SVM) с помощью одного по сравнению с одного кодирующего проекта, где K является количеством уникального класса, помечает (уровни). Mdl
ClassificationECOC
модель.
возвращает модель ECOC с дополнительными опциями, заданными одним или несколькими Mdl
= fitcecoc(___,Name,Value
)Name,Value
парные аргументы, с помощью любого из предыдущих синтаксисов.
Например, задайте различных бинарных учеников, различный проект кодирования, или перекрестный подтверждать. Это - хорошая практика, чтобы перекрестный подтвердить использование Kfold
Name,Value
парный аргумент. Результаты перекрестной проверки определяют, как хорошо модель делает вывод.
[
также возвращает детали гипероптимизации параметров управления, когда вы задаете Mdl
,HyperparameterOptimizationResults
]
= fitcecoc(___,Name,Value
)OptimizeHyperparameters
аргумент пары "имя-значение" и линейное использование или двоичные ученики ядра. Для другого Learners
, HyperparameterOptimizationResults
свойство Mdl
содержит результаты.
Обучите модель выходных кодов с коррекцией ошибок (ECOC) мультикласса использование двоичных учеников машины опорных векторов (SVM).
Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе X
и данные об ответе Y
.
load fisheriris
X = meas;
Y = species;
Обучите мультикласс модель ECOC с помощью опций по умолчанию.
Mdl = fitcecoc(X,Y)
Mdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsone' Properties, Methods
Mdl
ClassificationECOC
модель. По умолчанию, fitcecoc
использование двоичные ученики SVM и один по сравнению с один кодирующий проект. Можно получить доступ к Mdl
свойства с помощью записи через точку.
Отобразите имена классов и матрицу проекта кодирования.
Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
CodingMat = Mdl.CodingMatrix
CodingMat = 3×3
1 1 0
-1 0 1
0 -1 -1
Один по сравнению с один кодирующий проект для трех классов дает к трем бинарным ученикам. Столбцы CodingMat
соответствуйте ученикам, и строки соответствуют классам. Порядок класса совпадает с порядком в Mdl.ClassNames
. Например, CodingMat(:,1)
[1; –1; 0]
и указывает, что программное обеспечение обучает первого бинарного ученика SVM, использующего все наблюдения, классифицированные как 'setosa'
и 'versicolor'
. Поскольку 'setosa'
соответствует 1
, это - положительный класс; 'versicolor'
соответствует –1
, таким образом, это - отрицательный класс.
Можно получить доступ к каждой бинарной индексации ячейки использования ученика и записи через точку.
Mdl.BinaryLearners{1} % The first binary learner
ans = CompactClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [-1 1] ScoreTransform: 'none' Beta: [4x1 double] Bias: 1.4505 KernelParameters: [1x1 struct] Properties, Methods
Вычислите ошибку классификации перезамены.
error = resubLoss(Mdl)
error = 0.0067
Ошибка классификации на обучающих данных мала, но классификатор может быть сверхподобранной моделью. Можно перекрестный подтвердить классификатор с помощью crossval
и вычислите ошибку классификации перекрестных проверок вместо этого.
Обучите модель ECOC, состоявшую из нескольких двоичного файла, линейных моделей классификации.
Загрузите набор данных NLP.
load nlpdata
X
разреженная матрица данных о предикторе и Y
категориальный вектор из меток класса. В данных существует больше чем два класса.
Создайте шаблон линейный модели классификацией по умолчанию.
t = templateLinear();
Чтобы настроить значения по умолчанию, см. Аргументы в виде пар имя-значение на templateLinear
страница.
Обучите модель ECOC, состоявшую из нескольких двоичного файла, линейные модели классификации, которые могут идентифицировать продукт, учитывая плотность распределения слов на веб-странице документации. В течение более быстрого учебного времени транспонируйте данные о предикторе и укажите, что наблюдения соответствуют столбцам.
X = X'; rng(1); % For reproducibility Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = CompactClassificationECOC ResponseName: 'Y' ClassNames: [1x13 categorical] ScoreTransform: 'none' BinaryLearners: {78x1 cell} CodingMatrix: [13x78 double] Properties, Methods
В качестве альтернативы можно обучить модель ECOC, состоявшую из линейных моделей классификации по умолчанию с помощью 'Learners','Linear'
.
Сохранить память, fitcecoc
возвращает обученные модели ECOC, состоявшие из линейных учеников классификации в CompactClassificationECOC
объекты модели.
Перекрестный подтвердите классификатор ECOC с бинарными учениками SVM и оцените обобщенную ошибку классификации.
Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе X
и данные об ответе Y
.
load fisheriris X = meas; Y = species; rng(1); % For reproducibility
Создайте шаблон SVM и стандартизируйте предикторы.
t = templateSVM('Standardize',true)
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: '' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: 1 SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
t
шаблон SVM. Большинство свойств объекта шаблона пусто. Когда обучение классификатор ECOC, программное обеспечение устанавливает применимые свойства на их значения по умолчанию.
Обучите классификатор ECOC и задайте порядок класса.
Mdl = fitcecoc(X,Y,'Learners',t,... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl
ClassificationECOC
классификатор. Можно получить доступ к его свойствам с помощью записи через точку.
Перекрестный подтвердите Mdl
использование 10-кратной перекрестной проверки.
CVMdl = crossval(Mdl);
CVMdl
ClassificationPartitionedECOC
перекрестный подтвержденный классификатор ECOC.
Оцените обобщенную ошибку классификации.
genError = kfoldLoss(CVMdl)
genError = 0.0400
Обобщенная ошибка классификации составляет 4%, который указывает, что классификатор ECOC делает вывод довольно хорошо.
Обучите классификатор ECOC с помощью двоичных учеников SVM. Сначала предскажите метки обучающей выборки и апостериорные вероятности класса. Затем предскажите максимальную апостериорную вероятность класса в каждой точке в сетке. Визуализируйте результаты.
Загрузите ирисовый набор данных Фишера. Задайте лепестковые размерности как предикторы и имена разновидностей как ответ.
load fisheriris X = meas(:,3:4); Y = species; rng(1); % For reproducibility
Создайте шаблон SVM. Стандартизируйте предикторы и задайте Гауссово ядро.
t = templateSVM('Standardize',true,'KernelFunction','gaussian');
t
шаблон SVM. Большинство его свойств пусто. Когда программное обеспечение обучает классификатор ECOC, оно устанавливает применимые свойства на их значения по умолчанию.
Обучите классификатор ECOC с помощью шаблона SVM. Преобразуйте классификационные оценки, чтобы классифицировать апостериорные вероятности (которые возвращены predict
или resubPredict
) использование 'FitPosterior'
аргумент пары "имя-значение". Задайте порядок класса с помощью 'ClassNames'
аргумент пары "имя-значение". Отобразите диагностические сообщения во время обучения при помощи 'Verbose'
аргумент пары "имя-значение".
Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,... 'ClassNames',{'setosa','versicolor','virginica'},... 'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 2 Positive class indices: 1 Fitting posterior probabilities for learner 1 (SVM). Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 1 Fitting posterior probabilities for learner 2 (SVM). Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 2 Fitting posterior probabilities for learner 3 (SVM).
Mdl
ClassificationECOC
модель. Тот же шаблон SVM применяется к каждому бинарному ученику, но можно настроить опции для каждого бинарного ученика путем передачи в векторе ячейки из шаблонов.
Предскажите метки обучающей выборки и апостериорные вероятности класса. Отобразите диагностические сообщения во время расчета меток и апостериорных вероятностей класса при помощи 'Verbose'
аргумент пары "имя-значение".
[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);
Predictions from all learners have been computed. Loss for all observations has been computed. Computing posterior probabilities...
Mdl.BinaryLoss
ans = 'quadratic'
Программное обеспечение присваивает наблюдение классу, который дает к самой маленькой средней бинарной потере. Поскольку все бинарные ученики вычисляют апостериорные вероятности, бинарной функцией потерь является quadratic
.
Отобразите случайный набор результатов.
idx = randsample(size(X,1),10,1); Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
table(Y(idx),label(idx),Posterior(idx,:),... 'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
TrueLabel PredLabel Posterior
______________ ______________ ______________________________________
{'virginica' } {'virginica' } 0.0039319 0.0039866 0.99208
{'virginica' } {'virginica' } 0.017066 0.018262 0.96467
{'virginica' } {'virginica' } 0.014947 0.015855 0.9692
{'versicolor'} {'versicolor'} 2.2197e-14 0.87318 0.12682
{'setosa' } {'setosa' } 0.999 0.00025091 0.00074639
{'versicolor'} {'virginica' } 2.2195e-14 0.059427 0.94057
{'versicolor'} {'versicolor'} 2.2194e-14 0.97002 0.029984
{'setosa' } {'setosa' } 0.999 0.0002499 0.00074741
{'versicolor'} {'versicolor'} 0.0085638 0.98259 0.0088482
{'setosa' } {'setosa' } 0.999 0.00025013 0.00074718
Столбцы Posterior
соответствуйте порядку класса Mdl.ClassNames
.
Задайте сетку значений на наблюдаемом пробеле предиктора. Предскажите апостериорные вероятности для каждого экземпляра в сетке.
xMax = max(X); xMin = min(X); x1Pts = linspace(xMin(1),xMax(1)); x2Pts = linspace(xMin(2),xMax(2)); [x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts); [~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Для каждой координаты на сетке постройте максимальную апостериорную вероятность класса среди всех классов.
contourf(x1Grid,x2Grid,... reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2))); h = colorbar; h.YLabel.String = 'Maximum posterior'; h.YLabel.FontSize = 15; hold on gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8); gh(2).LineWidth = 2; gh(3).LineWidth = 2; title('Iris Petal Measurements and Maximum Posterior') xlabel('Petal length (cm)') ylabel('Petal width (cm)') axis tight legend(gh,'Location','NorthWest') hold off
Этот пример использует:
Обучите one-all ECOC классификатор с помощью GentleBoost
ансамбль деревьев решений с суррогатными разделениями. Ускорять обучение, интервал числовые предикторы и использовать параллельные вычисления. Раскладывание допустимо только когда fitcecoc
использует древовидного ученика. После обучения оцените ошибку классификации 10-кратная перекрестная проверка. Обратите внимание на то, что параллельные вычисления требуют Parallel Computing Toolbox™.
Загрузка демонстрационных данных
Загрузите и смотрите arrhythmia
набор данных.
load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y); nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
Value Count Percent 1 245 54.20% 2 44 9.73% 3 15 3.32% 4 15 3.32% 5 13 2.88% 6 25 5.53% 7 3 0.66% 8 2 0.44% 9 9 1.99% 10 50 11.06% 14 4 0.88% 15 5 1.11% 16 22 4.87%
Набор данных содержит 279
предикторы и объем выборки 452
относительно мал. Из 16 отличных меток только 13 представлены в ответе (Y
). Каждая метка описывает различные степени аритмии, и 54,20% наблюдений находится в классе 1
.
Обучите One-All ECOC классификатор
Создайте шаблон ансамбля. Необходимо задать по крайней мере три аргумента: метод, много учеников и тип ученика. В данном примере задайте 'GentleBoost'
для метода, 100
для количества учеников и шаблона дерева решений, который использует суррогатные разделения, потому что там пропускают наблюдения.
tTree = templateTree('surrogate','on'); tEnsemble = templateEnsemble('GentleBoost',100,tTree);
tEnsemble
объект шаблона. Большинство его свойств пусто, но программное обеспечение заполняет их их значениями по умолчанию во время обучения.
Обучите one-all ECOC классификатор с помощью ансамблей деревьев решений как бинарные ученики. Чтобы ускорить обучение, используйте раскладывание и параллельные вычисления.
Раскладывание ('NumBins',50
) — Когда у вас есть большой обучающий набор данных, можно ускорить обучение (потенциальное уменьшение в точности) при помощи 'NumBins'
аргумент пары "имя-значение". Этот аргумент допустим только когда fitcecoc
использует древовидного ученика. Если вы задаете 'NumBins'
значение, затем интервалы программного обеспечения каждый числовой предиктор в конкретное количество равновероятных интервалов, и затем выращивает деревья на индексах интервала вместо исходных данных. Можно попробовать 'NumBins',50
во-первых, и затем измените 'NumBins'
значение в зависимости от точности и учебной скорости.
Параллельные вычисления ('Options',statset('UseParallel',true)
) — С лицензией Parallel Computing Toolbox можно ускорить расчет при помощи параллельных вычислений, которые отправляют каждого бинарного ученика рабочему в пуле. Количество рабочих зависит от вашей конфигурации системы. Когда вы используете деревья решений для бинарных учеников, fitcecoc
параллелизирует обучение с помощью Intel® Threading Building Blocks (TBB) для двухъядерных систем и выше. Поэтому определение 'UseParallel'
опция не полезна на одиночном компьютере. Используйте эту опцию на кластере.
Кроме того, укажите, что априорные вероятности являются 1/K, где K = 13 является количеством отличных классов.
options = statset('UseParallel',true); Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,... 'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Mdl
ClassificationECOC
модель.
Перекрестная проверка
Перекрестный подтвердите классификатор ECOC с помощью 10-кратной перекрестной проверки.
CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.
CVMdl
ClassificationPartitionedECOC
модель. Предупреждение указывает, что некоторые классы не представлены, в то время как программное обеспечение обучает по крайней мере один сгиб. Поэтому те сгибы не могут предсказать метки для недостающих классов. Можно смотреть результаты индексации ячейки использования сгиба и записи через точку. Например, получите доступ к результатам первого сгиба путем ввода CVMdl.Trained{1}
.
Используйте перекрестный подтвержденный классификатор ECOC, чтобы предсказать метки сгиба валидации. Можно вычислить матрицу беспорядка при помощи confusionchart
. Переместите и измените размер графика путем изменения внутреннего свойства положения гарантировать, что проценты появляются в сводных данных строки.
oofLabel = kfoldPredict(CVMdl,'Options',options); ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized'); ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];
Воспроизведите сгруппированные данные
Воспроизведите сгруппированные данные о предикторе при помощи BinEdges
свойство обученной модели и discretize
функция.
X = Mdl.X; % Predictor data Xbinned = zeros(size(X)); edges = Mdl.BinEdges; % Find indices of binned predictors. idxNumeric = find(~cellfun(@isempty,edges)); if iscolumn(idxNumeric) idxNumeric = idxNumeric'; end for j = idxNumeric x = X(:,j); % Convert x to array if x is a table. if istable(x) x = table2array(x); end % Group x into bins by using the discretize function. xbinned = discretize(x,[-inf; edges{j}; inf]); Xbinned(:,j) = xbinned; end
Xbinned
содержит индексы интервала, в пределах от 1 к количеству интервалов, для числовых предикторов. Xbinned
значениями является 0
для категориальных предикторов. Если X
содержит 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 | 1.2847 | 0.10667 | 0.10667 | onevsone | 5.6939 | 200.36 |
| 2 | Best | 0.086667 | 4.5531 | 0.086667 | 0.087701 | onevsone | 94.849 | 0.0032549 |
| 3 | Best | 0.08 | 0.32817 | 0.08 | 0.080045 | onevsall | 0.01378 | 0.076021 |
| 4 | Accept | 0.08 | 0.3112 | 0.08 | 0.080001 | onevsall | 889 | 38.798 |
| 5 | Accept | 0.38 | 15.551 | 0.08 | 0.086871 | onevsall | 49.222 | 0.0010006 |
| 6 | Accept | 0.08 | 0.47107 | 0.08 | 0.079988 | onevsall | 0.013195 | 0.085897 |
| 7 | Best | 0.046667 | 4.6118 | 0.046667 | 0.046675 | onevsall | 0.0016445 | 0.0010297 |
| 8 | Accept | 0.046667 | 2.2932 | 0.046667 | 0.046674 | onevsone | 0.59541 | 0.0014402 |
| 9 | Accept | 0.046667 | 0.36436 | 0.046667 | 0.046671 | onevsone | 0.012477 | 0.020799 |
| 10 | Best | 0.04 | 0.3716 | 0.04 | 0.040005 | onevsone | 0.0010187 | 0.0010007 |
| 11 | Accept | 0.33333 | 0.35404 | 0.04 | 0.040007 | onevsall | 5.5672 | 993.65 |
| 12 | Accept | 0.10667 | 0.31507 | 0.04 | 0.040003 | onevsone | 0.1032 | 513.88 |
| 13 | Accept | 0.10667 | 0.31158 | 0.04 | 0.040015 | onevsone | 0.0011591 | 990.24 |
| 14 | Accept | 0.33333 | 0.43271 | 0.04 | 0.040004 | onevsall | 0.0010042 | 963.34 |
| 15 | Accept | 0.10667 | 0.29002 | 0.04 | 0.040004 | onevsone | 0.0010067 | 1.9535 |
| 16 | Accept | 0.06 | 0.31364 | 0.04 | 0.040005 | onevsall | 0.0010016 | 0.01072 |
| 17 | Accept | 0.04 | 0.31295 | 0.04 | 0.040007 | onevsone | 28.395 | 0.45651 |
| 18 | Accept | 0.04 | 0.29405 | 0.04 | 0.040001 | onevsone | 1.2638 | 0.079457 |
| 19 | Accept | 0.04 | 0.42304 | 0.04 | 0.040002 | onevsall | 996.62 | 3.1406 |
| 20 | Accept | 0.04 | 0.29305 | 0.04 | 0.03999 | onevsone | 927.5 | 1.5269 |
|====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Coding | BoxConstraint| KernelScale | | | result | | runtime | (observed) | (estim.) | | | | |====================================================================================================================| | 21 | Accept | 0.046667 | 0.40918 | 0.04 | 0.039989 | onevsone | 986.43 | 0.1949 |
| 22 | Accept | 0.04 | 0.33476 | 0.04 | 0.039951 | onevsone | 0.022563 | 0.002403 |
| 23 | Accept | 0.08 | 0.36873 | 0.04 | 0.039952 | onevsall | 24.257 | 3.1561 |
| 24 | Accept | 0.04 | 0.39275 | 0.04 | 0.03996 | onevsone | 0.0098708 | 0.0010205 |
| 25 | Accept | 0.04 | 0.30773 | 0.04 | 0.039951 | onevsone | 0.32682 | 0.012893 |
| 26 | Accept | 0.10667 | 0.30816 | 0.04 | 0.039951 | onevsone | 964.86 | 992.67 |
| 27 | Accept | 0.046667 | 4.1941 | 0.04 | 0.03998 | onevsall | 0.0010054 | 0.0010217 |
| 28 | Accept | 0.04 | 0.343 | 0.04 | 0.039975 | onevsone | 13.684 | 0.090526 |
| 29 | Accept | 0.04 | 0.30173 | 0.04 | 0.039935 | onevsone | 219.59 | 0.5975 |
| 30 | Accept | 0.04 | 0.29143 | 0.04 | 0.039909 | onevsone | 0.0010222 | 0.0040638 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 72.7383 seconds Total objective function evaluation time: 40.7316 Best observed feasible point: Coding BoxConstraint KernelScale ________ _____________ ___________ onevsone 0.0010187 0.0010007 Observed objective function value = 0.04 Estimated objective function value = 0.039964 Function evaluation time = 0.3716 Best estimated feasible point (according to models): Coding BoxConstraint KernelScale ________ _____________ ___________ onevsone 0.022563 0.002403 Estimated objective function value = 0.039909 Estimated function evaluation time = 0.35815
Mdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsone' HyperparameterOptimizationResults: [1x1 BayesianOptimization] Properties, Methods
Создайте два мультикласса модели ECOC, обученные на высоких данных. Используйте линейных бинарных учеников для одной из моделей и двоичных учеников ядра для другого. Сравните ошибку классификации перезамены этих двух моделей.
В общем случае можно выполнить классификацию мультиклассов высоких данных при помощи fitcecoc
с линейным или двоичными учениками ядра. Когда вы используете fitcecoc
чтобы обучить модель на длинных массивах, вы не можете использовать бинарных учеников SVM непосредственно. Однако можно использовать или линейный или модели классификации двоичных файлов ядра то использование SVMs.
Когда вы выполняете вычисления на длинных массивах, MATLAB® использует любого параллельный пул (значение по умолчанию, если у вас есть Parallel Computing Toolbox™), или локальный сеанс работы с MATLAB. Если вы хотите запустить пример с помощью локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, можно изменить глобальную среду выполнения при помощи mapreducer
функция.
Создайте datastore, который ссылается на папку, содержащую ирисовый набор данных Фишера. Задайте 'NA'
значения как недостающие данные так, чтобы datastore
заменяет их на NaN
значения. Создайте высокие версии данных об ответе и предиктора.
ds = datastore('fisheriris.csv','TreatAsMissing','NA'); t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
X = [t.SepalLength t.SepalWidth t.PetalLength t.PetalWidth]; Y = t.Species;
Стандартизируйте данные о предикторе.
Z = zscore(X);
Обучите мультикласс модель ECOC, которая использует высокие данные и линейных бинарных учеников. По умолчанию, когда вы передаете длинные массивы fitcecoc
, программное обеспечение обучает линейных бинарных учеников то использование SVMs. Поскольку данные об ответе содержат только три уникальных класса, измените схему кодирования от one-all (который является значением по умолчанию, когда вы используете высокие данные) для один по сравнению с одним (который, значение по умолчанию, когда вы используете данные в оперативной памяти).
Для воспроизводимости установите seed генераторов случайных чисел с помощью rng
и tallrng
. Результаты могут варьироваться в зависимости от количества рабочих и среды выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление Где Ваши Запуски Кода.
rng('default') tallrng('default') mdlLinear = fitcecoc(Z,Y,'Coding','onevsone')
Training binary learner 1 (Linear) out of 3. Training binary learner 2 (Linear) out of 3. Training binary learner 3 (Linear) out of 3.
mdlLinear = CompactClassificationECOC ResponseName: 'Y' ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3×1 cell} CodingMatrix: [3×3 double] Properties, Methods
mdlLinear
CompactClassificationECOC
модель состоит из трех бинарных учеников.
Обучите мультикласс модель ECOC, которая использует высокие данные и двоичных учеников ядра. Во-первых, создайте templateKernel
объект задать свойства двоичных учеников ядра; в частности, увеличьте число размерностей расширения к .
tKernel = templateKernel('NumExpansionDimensions',2^16)
tKernel = Fit template for classification Kernel. BetaTolerance: [] BlockSize: [] BoxConstraint: [] Epsilon: [] NumExpansionDimensions: 65536 GradientTolerance: [] HessianHistorySize: [] IterationLimit: [] KernelScale: [] Lambda: [] Learner: 'svm' LossFunction: [] Stream: [] VerbosityLevel: [] Version: 1 Method: 'Kernel' Type: 'classification'
По умолчанию двоичные ученики ядра используют SVMs.
Передайте templateKernel
возразите против fitcecoc
и измените схему кодирования в один по сравнению с одним.
mdlKernel = fitcecoc(Z,Y,'Learners',tKernel,'Coding','onevsone')
Training binary learner 1 (Kernel) out of 3. Training binary learner 2 (Kernel) out of 3. Training binary learner 3 (Kernel) out of 3.
mdlKernel = CompactClassificationECOC ResponseName: 'Y' ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3×1 cell} CodingMatrix: [3×3 double] Properties, Methods
mdlKernel
также CompactClassificationECOC
модель состоит из трех бинарных учеников.
Сравните ошибку классификации перезамены этих двух моделей.
errorLinear = gather(loss(mdlLinear,Z,Y))
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1.4 sec Evaluation completed in 1.6 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 15 sec Evaluation completed in 16 sec
errorKernel = 0.0067
mdlKernel
неправильно классифицирует меньший процент обучающих данных, чем mdlLinear
.
Tbl
— Выборочные данныеВыборочные данные в виде таблицы. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. Опционально, Tbl
может содержать один дополнительный столбец для переменной отклика. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не приняты.
Если Tbl
содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl
как предикторы, затем задайте переменную отклика с помощью ResponseVarName
.
Если Tbl
содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl
как предикторы, задайте формулу с помощью formula
.
Если Tbl
не содержит переменную отклика, задает переменную отклика с помощью Y
. Длина переменной отклика и количество Tbl
строки должны быть равными.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика в виде имени переменной в Tbl
.
Необходимо задать ResponseVarName
как вектор символов или строковый скаляр. Например, если переменная отклика Y
хранится как Tbl.Y
, затем задайте его как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Y
, как предикторы, когда обучение модель.
Переменная отклика должна быть категориальным, символом, или массивом строк, логическим или числовым вектором или массивом ячеек из символьных векторов. Если Y
символьный массив, затем каждый элемент переменной отклика должен соответствовать одной строке массива.
Хорошая практика должна задать порядок классов при помощи ClassNames
аргумент пары "имя-значение".
Типы данных: char |
string
formula
— Объяснительная модель переменной отклика и подмножество переменных предикторовОбъяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме 'Y~X1+X2+X3'
. В этой форме, Y
представляет переменную отклика и X1
x2
, и X3
представляйте переменные предикторы.
Задавать подмножество переменных в Tbl
как предикторы для обучения модель, используйте формулу. Если вы задаете формулу, то программное обеспечение не использует переменных в Tbl
это не появляется в formula
.
Имена переменных в формуле должны быть оба именами переменных в Tbl
(Tbl.Properties.VariableNames
) и допустимые идентификаторы MATLAB®.
Можно проверить имена переменных в Tbl
при помощи isvarname
функция. Следующий код возвращает логический 1
TRUE
) для каждой переменной, которая имеет допустимое имя переменной.
cellfun(@isvarname,Tbl.Properties.VariableNames)
Tbl
не допустимы, затем преобразуют их при помощи matlab.lang.makeValidName
функция.Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);
Типы данных: char |
string
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
имя аргумента и 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
использует древовидного ученика, то есть, 'Learners'
любой 'tree'
или объект шаблона, созданный при помощи templateTree
, или объект шаблона, созданный при помощи templateEnsemble
с древовидными слабыми учениками.
Если 'NumBins'
значение пусто (значение по умолчанию), затем программное обеспечение не делает интервала никакие предикторы.
Если вы задаете 'NumBins'
значение как положительный целочисленный скаляр, затем интервалы программного обеспечения каждый числовой предиктор в конкретное количество равновероятных интервалов, и затем выращивает деревья на индексах интервала вместо исходных данных.
Если 'NumBins'
значение превышает номер (u) уникальных значений для предиктора, затем fitcecoc
интервалы предиктор в интервалы u.
fitcecoc
не делает интервала категориальные предикторы.
Когда вы используете большой обучающий набор данных, эта опция раскладывания ускоряет обучение, но вызывает потенциальное уменьшение в точности. Можно попробовать 'NumBins',50
во-первых, и затем измените 'NumBins'
значение в зависимости от точности и учебной скорости.
Обученная модель хранит границы интервала в BinEdges
свойство.
Пример: 'NumBins',50
Типы данных: single
| double
'NumConcurrent'
— Количество бинарных учеников одновременно обучено
(значение по умолчанию) | положительный целочисленный скалярКоличество бинарных учеников, одновременно обученных в виде разделенной запятой пары, состоящей из 'NumConcurrent'
и положительный целочисленный скаляр. Значением по умолчанию является 1
, что означает fitcecoc
обучает бинарных учеников последовательно.
Примечание
Эта опция применяется только, когда вы используете fitcecoc
на длинных массивах. Смотрите Длинные массивы для получения дополнительной информации.
Типы данных: single
| double
'ObservationsIn'
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе в виде разделенной запятой пары, состоящей из 'ObservationsIn'
и 'columns'
или 'rows'
.
Примечание
Для линейных учеников классификации, если вы ориентируете X
так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем можно испытать значительное сокращение во время выполнения оптимизации.
Для всех других учеников ориентируйте X
так, чтобы наблюдения соответствовали строкам.
Пример: 'ObservationsIn','columns'
'Verbose'
— Уровень многословия
(значение по умолчанию) | 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'
— Количество сгибов
(значение по умолчанию) | положительное целочисленное значение, больше, чем 1Количество сгибов, чтобы использовать в перекрестной подтвержденной модели в виде разделенной запятой пары, состоящей из 'KFold'
и положительное целочисленное значение, больше, чем 1. Если вы задаете 'KFold',k
, затем программное обеспечение завершает эти шаги:
Случайным образом разделите данные в k
наборы.
Для каждого набора зарезервируйте набор как данные о валидации и обучите модель с помощью другого k
– 1 набор.
Сохраните k
компактные, обученные модели в ячейках k
- 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 . |
'all' | Все предикторы являются категориальными. |
Спецификация 'CategoricalPredictors'
является соответствующим если:
По крайней мере один предиктор является категориальным, и все бинарные ученики являются деревьями классификации, наивными учениками Бейеса, SVMs, линейными учениками, учениками ядра или ансамблями деревьев классификации.
Все предикторы являются категориальными, и по крайней мере одним бинарным учеником является k NN.
Если вы задаете 'CategoricalPredictors'
для любого другого ученика затем программное обеспечение предупреждает, что не может обучить того бинарного ученика. Например, программное обеспечение не может обучить классификаторы дискриминантного анализа с помощью категориальных предикторов.
Каждый ученик идентифицирует и обрабатывает категориальные предикторы таким же образом как подходящую функцию, соответствующую ученику. Смотрите 'CategoricalPredictors'
из fitckernel
для учеников ядра, 'CategoricalPredictors'
из fitcknn
для k - самые близкие ученики, 'CategoricalPredictors'
из fitclinear
для линейных учеников, 'CategoricalPredictors'
из fitcnb
для наивных учеников Бейеса, 'CategoricalPredictors'
из fitcsvm
для учеников SVM и 'CategoricalPredictors'
из fitctree
для древовидных учеников.
Пример: 'CategoricalPredictors','all'
Типы данных: single
| double
| logical
| char
| string
| cell
'ClassNames'
— Имена классов, чтобы использовать для обученияИмена классов, чтобы использовать для обучения в виде разделенной запятой пары, состоящей из 'ClassNames'
и категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. 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
Значением по умолчанию являются единицы (
, где K
) - глаз (K
)K
количество отличных классов.
Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]
Типы данных: double |
single
| struct
'Options'
— Опции параллельных вычислений[]
(значение по умолчанию) | массив структур, возвращенный statset
Опции параллельных вычислений в виде разделенной запятой пары, состоящей из 'Options'
и массив структур, возвращенный statset
. Эти опции требуют Parallel Computing Toolbox™. fitcecoc
использование 'Streams'
'UseParallel'
, и 'UseSubtreams'
поля .
Эта таблица суммирует доступные параметры.
Опция | Описание |
---|---|
'Streams' |
A
В этом случае используйте массив ячеек одного размера с параллельным пулом. Если параллельный пул не открыт, то программное обеспечение пытается открыть одно (в зависимости от ваших настроек), и |
'UseParallel' | Если у вас есть Parallel Computing Toolbox, то можно вызвать пул рабочих установкой Когда вы используете деревья решений для бинарных учеников, |
'UseSubstreams' | Установите на true вычислить в параллели с помощью потока, заданного 'Streams' . Значением по умолчанию является false . Например, установите Streams к типу, позволяющему подпотоки, такой as'mlfg6331_64' или 'mrg32k3a' . |
Лучшая практика гарантировать более предсказуемые результаты состоит в том, чтобы использовать parpool
(Parallel Computing Toolbox) и явным образом создает параллельный пул, прежде чем вы вызовете использование параллельных вычислений 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
единицы (
, где 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'}
'all'
— Оптимизируйте все имеющие право параметры.
Массив строк или массив ячеек имеющих право названий параметра
Вектор из 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' Корреляция , 'cosine' , 'euclidean' , 'hamming' , 'jaccard' , 'mahalanobis' , 'minkowski' , 'seuclidean' , и 'spearman' |
DistanceWeight | 'equal' , 'inverse' , и 'squaredinverse' | |
Exponent | Положительные значения в [0.5,3] | |
NumNeighbors | Положительные целочисленные значения, масштабируемые журналом в области значений [1, max(2,round(NumObservations/2))] | |
Standardize | 'true' и 'false' | |
'linear' | Lambda | Положительные значения, масштабируемые журналом в области значений [1e-5/NumObservations,1e5/NumObservations] |
Learner | 'svm' и 'logistic' | |
Regularization | 'ridge' и 'lasso' | |
'naivebayes' | DistributionNames | 'normal' и 'kernel' |
Width | Положительные значения, масштабируемые журналом в области значений [MinPredictorDiff/4,max(MaxPredictorRange,MinPredictorDiff)] | |
Kernel | 'normal' поле , 'epanechnikov' , и 'triangle' | |
'svm' | BoxConstraint | Положительные значения, масштабируемые журналом в области значений [1e-3,1e3] |
KernelScale | Положительные значения, масштабируемые журналом в области значений [1e-3,1e3] | |
KernelFunction | 'gaussian' , 'linear' , и 'polynomial' | |
PolynomialOrder | Целые числа в области значений [2,4] | |
Standardize | 'true' и 'false' | |
'tree' | MaxNumSplits | Целые числа, масштабируемые журналом в области значений [1,max(2,NumObservations-1)] |
MinLeafSize | Целые числа, масштабируемые журналом в области значений [1,max(2,floor(NumObservations/2))] | |
NumVariablesToSample | Целые числа в области значений [1,max(2,NumPredictors)] | |
SplitCriterion | 'gdi' , 'deviance' , и 'twoing' |
В качестве альтернативы используйте hyperparameters
с вашим выбранным Learners
, такой как
load fisheriris % hyperparameters requires data and learner params = hyperparameters('fitcecoc',meas,species,'svm');
Чтобы видеть имеющие право и гиперпараметры по умолчанию, исследуйте params
.
Установите параметры не по умолчанию путем передачи вектора из optimizableVariable
объекты, которые имеют значения не по умолчанию. Например,
load fisheriris params = hyperparameters('fitcecoc',meas,species,'svm'); params(2).Range = [1e-4,1e6];
Передайте params
как значение OptimizeHyperparameters
.
По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков, целевая функция является журналом (1 + потеря перекрестной проверки) для регрессии и misclassification уровня для классификации. Чтобы управлять итеративным отображением, установите Verbose
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
Для примера смотрите, Оптимизируют Классификатор ECOC.
Пример: 'auto'
'HyperparameterOptimizationOptions'
— Опции для оптимизацииОпции для оптимизации в виде разделенной запятой пары, состоящей из '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
разреженные матрицы поддержек для учебных линейных моделей классификации только. Для всех других моделей предоставьте полную матрицу данных о предикторе вместо этого.
binary loss является функцией класса и классификационной оценки, которая определяет, как хорошо бинарный ученик классифицирует наблюдение в класс.
Предположим следующее:
mkj является элементом (k, j) проекта кодирования матричный M (то есть, код, соответствующий классу k бинарного ученика j).
sj является счетом бинарного ученика j для наблюдения.
g является бинарной функцией потерь.
предсказанный класс для наблюдения.
В loss-based decoding [Escalera и al.], класс, производящий минимальную сумму бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,
В loss-weighted decoding [Escalera и al.], класс, производящий минимальное среднее значение бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,
Allwein и др. предполагают, что взвешенное потерей декодирование улучшает точность классификации путем хранения значений потерь для всех классов в том же динамическом диапазоне.
Эта таблица суммирует поддерживаемые функции потерь, где yj является меткой класса для конкретного бинарного ученика (в наборе {-1,1,0}), sj является счетом к наблюдению j и g (yj, sj).
Значение | Описание | Область счета | g (yj, sj) |
---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | журнал [1 + exp (–2yjsj)] / [2log (2)] |
'exponential' | Экспоненциал | (–∞,∞) | exp (–yjsj)/2 |
'hamming' | Хэмминг | [0,1] или (– ∞, ∞) | [1 – знак (yjsj)]/2 |
'hinge' | Стержень | (–∞,∞) | макс. (0,1 – yjsj)/2 |
'linear' | Линейный | (–∞,∞) | (1 – yjsj)/2 |
'logit' | Логистический | (–∞,∞) | журнал [1 + exp (–yjsj)] / [2log (2)] |
'quadratic' | Квадратичный | [0,1] | [1 – yj (2sj – 1)] 2/2 |
Программное обеспечение нормирует бинарные потери, таким образом, что потеря 0.5, когда yj = 0, и агрегировал использование среднего значения бинарных учеников [Allwein и al.].
Не путайте бинарную потерю с полной потерей классификации (заданный 'LossFun'
аргумент пары "имя-значение" loss
и predict
возразите функциям), который измеряется, как хорошо классификатор ECOC выполняет в целом.
coding design является матрицей, где элементы, прямые, какие классы обучены каждым бинарным учеником, то есть, как проблема мультикласса уменьшается до серии бинарных проблем.
Каждая строка проекта кодирования соответствует отличному классу, и каждый столбец соответствует бинарному ученику. В троичном проекте кодирования, для конкретного столбца (или бинарный ученик):
Строка, содержащая 1, направляет бинарного ученика, чтобы сгруппировать все наблюдения в соответствующем классе в положительный класс.
Строка, содержащая –1, направляет бинарного ученика, чтобы сгруппировать все наблюдения в соответствующем классе в отрицательный класс.
Строка, содержащая 0, направляет бинарного ученика, чтобы проигнорировать все наблюдения в соответствующем классе.
Кодирующие матрицы проекта с большими, минимальными, попарными расстояниями строки на основе меры Хэмминга оптимальны. Для получения дополнительной информации на попарном расстоянии строки, см. Случайные Матрицы Проекта Кодирования и [4].
Эта таблица описывает популярные проекты кодирования.
Кодирование проекта | Описание | Количество учеников | Минимальное попарное расстояние строки |
---|---|---|---|
one-all (OVA) | Для каждого бинарного ученика один класс положителен, и остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений класса. | 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 обучается на наблюдениях в Классе 1 или Классе 2, и обрабатывает Класс 1 как положительный класс и Класс 2 как отрицательный класс. Другие ученики обучены так же.
Позвольте M быть матрицей проекта кодирования с элементами mkl и sl быть предсказанной классификационной оценкой для положительного класса ученика l. Алгоритм присваивает новое наблюдение классу () это минимизирует агрегацию потерь для двоичных учеников L.
Модели ECOC могут улучшить точность классификации, по сравнению с другими моделями мультикласса [2].
Количество бинарных учеников растет с количеством классов. Для проблемы со многими классами, binarycomplete
и ternarycomplete
кодирующие проекты не эффективны. Однако:
Если K ≤ 4, то используйте ternarycomplete
кодирование проекта, а не sparserandom
.
Если K ≤ 5, то используйте binarycomplete
кодирование проекта, а не denserandom
.
Можно отобразить матрицу проекта кодирования обученного классификатора ECOC путем ввода Mdl.CodingMatrix
в командное окно.
Необходимо сформировать матрицу кодирования, использующую глубокие знания приложения и учитывающую вычислительные ограничения. Если вы имеете достаточную вычислительную власть и время, то попробуйте несколько матриц кодирования и выберите ту с лучшей эффективностью (e.g., проверяйте матрицы беспорядка на каждое использование модели confusionchart
).
Перекрестная проверка "Пропускает один" (Leaveout
) неэффективно для наборов данных со многими наблюдениями. Вместо этого используйте k - перекрестная проверка сгиба (KFold
).
После обучения модель можно сгенерировать код C/C++, который предсказывает метки для новых данных. Генерация кода C/C++ требует MATLAB Coder™. Для получения дополнительной информации смотрите Введение в Генерацию кода.
Пользовательские матрицы кодирования должны иметь определенную форму. Программное обеспечение подтверждает пользовательские матрицы кодирования путем обеспечения:
Каждый элемент-1, 0, или 1.
Каждый столбец содержит как наименьшее количество одного-1 и один 1.
Для всех отличных вектор-столбцов u и v, 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
(Parallel Computing Toolbox) для получения дополнительной информации. Для получения дополнительной информации о Spark Apache и других средах выполнения, которые управляют, куда ваш код запускается, смотрите Расширение длинных массивов с помощью других продуктов.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Чтобы запуститься параллельно, установите '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.