Подгонка многоклассовых моделей для машин опорных векторов или других классификаторов
возвращает полную, обученную, многоклассовую, исправляющую ошибки выход кодов (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.4492 KernelParameters: [1x1 struct] Properties, Methods
Вычислите ошибку классификации восстановления.
error = resubLoss(Mdl)
error = 0.0067
Ошибка классификации обучающих данных небольшая, но классификатор может быть сверхподобранной моделью моделью. Можно провести перекрестную проверку классификатора с помощью crossval
и вычислите вместо этого ошибку классификации перекрестной валидации.
Обучите модель ECOC, состоящую из нескольких двоичных, линейных классификационных моделей.
Загрузите набор данных NLP.
load nlpdata
X
является разреженной матрицей данных предиктора, и Y
является категориальным вектором меток классов. В данных более двух классов.
Создайте шаблон модели линейной классификации по умолчанию.
t = templateLinear();
Для корректировки значений по умолчанию смотрите Аргументы в виде пар имя-значение на templateLinear
страница.
Обучите модель ECOC, состоящую из нескольких двоичных, линейных классификационных моделей, которые могут идентифицировать продукт с учетом частотного распределения слов на веб-странице документации. Для более быстрого времени обучения транспонируйте данные предиктора и укажите, что наблюдения соответствуют столбцам.
X = X'; rng(1); % For reproducibility Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = CompactClassificationECOC ResponseName: 'Y' ClassNames: [1x13 categorical] ScoreTransform: 'none' BinaryLearners: {78x1 cell} CodingMatrix: [13x78 double] Properties, Methods
Кроме того, можно обучить модель ECOC, состоящую из моделей линейной классификации по умолчанию, используя 'Learners','Linear'
.
Чтобы сохранить память, fitcecoc
возвращает обученные модели ECOC, состоящие из учащихся линейной классификации в CompactClassificationECOC
объекты модели.
Перекрестная проверка классификатора ECOC с двоичными учениками SVM и оценка обобщенной ошибки классификации.
Загрузите набор данных радужки Фишера. Задайте данные предиктора X
и данные отклика Y
.
load fisheriris X = meas; Y = species; rng(1); % For reproducibility
Создайте шаблон SVM и стандартизируйте предикторы.
t = templateSVM('Standardize',true)
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: '' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: 1 SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
t
является шаблоном SVM. Большинство свойств объекта шаблона пусты. При обучении классификатора ECOC программное обеспечение устанавливает применимые свойства на их значения по умолчанию.
Обучите классификатор ECOC и укажите порядок классов.
Mdl = fitcecoc(X,Y,'Learners',t,... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl
является ClassificationECOC
классификатор. Вы можете получить доступ к его свойствам с помощью записи через точку.
Перекрестная валидация Mdl
использование 10-кратной перекрестной проверки.
CVMdl = crossval(Mdl);
CVMdl
является ClassificationPartitionedECOC
перекрестная проверка классификатора ECOC.
Оцените обобщенную ошибку классификации.
genError = kfoldLoss(CVMdl)
genError = 0.0400
Обобщенная ошибка классификации составляет 4%, что указывает на то, что классификатор ECOC обобщается довольно хорошо.
Обучите классификатор ECOC с помощью двоичных учащихся SVM. Сначала спрогнозируйте метки обучающей выборки и апостериорные вероятности класса. Затем спрогнозируйте апостериорную вероятность максимального класса в каждой точке сетки. Визуализация результатов.
Загрузите набор данных радужки Фишера. Укажите размерности лепестков в качестве предикторов, а имена видов - в качестве отклика.
load fisheriris X = meas(:,3:4); Y = species; rng(1); % For reproducibility
Создайте шаблон SVM. Стандартизируйте предикторы и задайте Гауссово ядро.
t = templateSVM('Standardize',true,'KernelFunction','gaussian');
t
является шаблоном SVM. Большинство его свойств пусты. Когда программное обеспечение обучает классификатор ECOC, оно устанавливает применимые свойства на их значения по умолчанию.
Обучите классификатор ECOC с помощью шаблона SVM. Преобразуйте классификационные оценки в апостериорные вероятности класса (которые возвращаются predict
или resubPredict
) использование 'FitPosterior'
аргумент пары "имя-значение". Задайте порядок классов используя 'ClassNames'
аргумент пары "имя-значение". Отображать диагностические сообщения во время обучения при помощи 'Verbose'
аргумент пары "имя-значение".
Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,... 'ClassNames',{'setosa','versicolor','virginica'},... 'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 2 Positive class indices: 1 Fitting posterior probabilities for learner 1 (SVM). Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 1 Fitting posterior probabilities for learner 2 (SVM). Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 2 Fitting posterior probabilities for learner 3 (SVM).
Mdl
является ClassificationECOC
модель. Тот же шаблон SVM применяется к каждому двоичному ученику, но можно настроить опции для каждого двоичного ученика, передав в вектор камер шаблонов.
Спрогнозируйте метки обучающей выборки и апостериорные вероятности класса. Отображайте диагностические сообщения во время расчета меток и классифицируйте апостериорные вероятности при помощи 'Verbose'
аргумент пары "имя-значение".
[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);
Predictions from all learners have been computed. Loss for all observations has been computed. Computing posterior probabilities...
Mdl.BinaryLoss
ans = 'quadratic'
Программа присваивает наблюдение классу, которое приводит к наименьшим средним двоичным потерям. Поскольку все двоичные ученики вычисляют апостериорные вероятности, функция двоичных потерь quadratic
.
Отображение случайного набора результатов.
idx = randsample(size(X,1),10,1); Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
table(Y(idx),label(idx),Posterior(idx,:),... 'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
TrueLabel PredLabel Posterior
______________ ______________ ______________________________________
{'virginica' } {'virginica' } 0.0039322 0.003987 0.99208
{'virginica' } {'virginica' } 0.017067 0.018263 0.96467
{'virginica' } {'virginica' } 0.014948 0.015856 0.9692
{'versicolor'} {'versicolor'} 2.2197e-14 0.87318 0.12682
{'setosa' } {'setosa' } 0.999 0.00025092 0.00074638
{'versicolor'} {'virginica' } 2.2195e-14 0.05943 0.94057
{'versicolor'} {'versicolor'} 2.2194e-14 0.97001 0.029985
{'setosa' } {'setosa' } 0.999 0.00024991 0.0007474
{'versicolor'} {'versicolor'} 0.0085642 0.98259 0.0088487
{'setosa' } {'setosa' } 0.999 0.00025013 0.00074717
Столбцы Posterior
соответствуют классу порядка Mdl.ClassNames
.
Задайте сетку значений в наблюдаемом пространстве предикторов. Спрогнозируйте апостериорные вероятности для каждого образца в сетке.
xMax = max(X); xMin = min(X); x1Pts = linspace(xMin(1),xMax(1)); x2Pts = linspace(xMin(2),xMax(2)); [x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts); [~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Для каждой координаты на сетке постройте график максимальной апостериорной вероятности класса среди всех классов.
contourf(x1Grid,x2Grid,... reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2))); h = colorbar; h.YLabel.String = 'Maximum posterior'; h.YLabel.FontSize = 15; hold on gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8); gh(2).LineWidth = 2; gh(3).LineWidth = 2; title('Iris Petal Measurements and Maximum Posterior') xlabel('Petal length (cm)') ylabel('Petal width (cm)') axis tight legend(gh,'Location','NorthWest') hold off
Этот пример использует:
Обучите классификатор ECOC один от всех с помощью GentleBoost
ансамбль деревьев решений с суррогатными сплитами. Чтобы ускорить обучение, числовые предикторы интервал и используйте параллельные вычисления. Раскладывание действительно только при fitcecoc
использует ученика дерева. После обучения оцените ошибку классификации, используя 10-кратную перекрестную валидацию. Обратите внимание, что для параллельных вычислений требуется Parallel Computing Toolbox™.
Загрузка выборочных данных
Загрузите и осмотрите arrhythmia
набор данных.
load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y); nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
Value Count Percent 1 245 54.20% 2 44 9.73% 3 15 3.32% 4 15 3.32% 5 13 2.88% 6 25 5.53% 7 3 0.66% 8 2 0.44% 9 9 1.99% 10 50 11.06% 14 4 0.88% 15 5 1.11% 16 22 4.87%
Набор данных содержит 279
предикторы и размер выборки 452
относительно небольшая. Из 16 различных меток только 13 представлены в ответе (Y
). Каждая метка описывает различные степени аритмии, и 54,20% наблюдений находятся в классе 1
.
Обучите классификатор один от всех ECOC
Создайте шаблон ансамбля. Необходимо задать как минимум три аргумента: метод, количество учащихся и тип обучающегося. В данном примере задайте 'GentleBoost'
для метода, 100
для количества учащихся и шаблона дерева решений, который использует суррогатные разделения, потому что отсутствуют наблюдения.
tTree = templateTree('surrogate','on'); tEnsemble = templateEnsemble('GentleBoost',100,tTree);
tEnsemble
является объектом шаблона. Большинство его свойств пусты, но программа заполняет их значениями по умолчанию во время обучения.
Обучите классификатор ECOC один от всех, используя ансамбли деревьев решений в качестве двоичных учащихся. Чтобы ускорить обучение, используйте раскладывание и параллельные вычисления.
Раскладывание ('NumBins',50
) - Когда у вас есть большой набор обучающих данных, вы можете ускорить обучение (потенциальное снижение точности), используя 'NumBins'
аргумент пары "имя-значение". Этот аргумент действителен только при fitcecoc
использует ученика дерева. Если вы задаете 'NumBins'
Значение программное обеспечение помещает каждый числовой предиктор в заданное количество уравнительных интервалов, а затем выращивает деревья индексов интервала вместо исходных данных. Можно попробовать 'NumBins',50
сначала, а затем смените 'NumBins'
значение в зависимости от точности и скорости обучения.
Параллельные вычисления ('Options',statset('UseParallel',true)
) - С лицензией Parallel Computing Toolbox можно ускорить расчеты с помощью параллельных вычислений, которые отправляют каждого двоичного ученика работнику пула. Количество работников зависит от вашего системного строения. Когда вы используете деревья принятия решений для двоичных учащихся, fitcecoc
параллелизирует обучение с использованием Intel ® Threading Building Blocks (TBB) для двухъядерных систем и выше. Поэтому установка 'UseParallel'
опция не полезна на одном компьютере. Используйте эту опцию в кластере.
Кроме того, задайте, что предыдущие вероятности 1/K, где K = 13 - количество различных классов.
options = statset('UseParallel',true); Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,... 'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Mdl
является ClassificationECOC
модель.
Перекрестная валидация
Перекрестная проверка классификатора ECOC с помощью 10-кратной перекрестной проверки.
CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.
CVMdl
является ClassificationPartitionedECOC
модель. Предупреждение указывает, что некоторые классы не представлены, в то время как программное обеспечение обучает по крайней мере одну складку. Поэтому эти складки не могут предсказать метки для отсутствующих классов. Результаты складки можно просмотреть с помощью индексации камер и записи через точку. Для примера получите доступ к результатам первой складки путем ввода CVMdl.Trained{1}
.
Используйте перекрестно проверенный классификатор ECOC для предсказания меток гибки валидации. Можно вычислить матрицу неточностей при помощи confusionchart
. Переместите и измените размер графика путем изменения свойства внутреннего положения, чтобы убедиться, что проценты появляются в сводных данных строк.
oofLabel = kfoldPredict(CVMdl,'Options',options); ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized'); ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];
Воспроизведение связанных данных
Воспроизведите привязанные данные предиктора при помощи BinEdges
свойство обученной модели и discretize
функция.
X = Mdl.X; % Predictor data Xbinned = zeros(size(X)); edges = Mdl.BinEdges; % Find indices of binned predictors. idxNumeric = find(~cellfun(@isempty,edges)); if iscolumn(idxNumeric) idxNumeric = idxNumeric'; end for j = idxNumeric x = X(:,j); % Convert x to array if x is a table. if istable(x) x = table2array(x); end % Group x into bins by using the discretize function. xbinned = discretize(x,[-inf; edges{j}; inf]); Xbinned(:,j) = xbinned; end
Xbinned
содержит индексы интервала в диапазоне от 1 до количества интервалов для числовых предикторов. Xbinned
значения 0
для категориальных предикторов. Если X
содержит NaN
s, затем соответствующее Xbinned
значения NaN
с.
Оптимизируйте гиперпараметры автоматически с помощью fitcecoc
.
Загрузите fisheriris
набор данных.
load fisheriris
X = meas;
Y = species;
Найдите гиперпараметры, которые минимизируют пятикратные потери при перекрестной проверке с помощью автоматической оптимизации гипероптимизации параметров управления. Для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus'
функция сбора.
rng default Mdl = fitcecoc(X,Y,'OptimizeHyperparameters','auto',... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',... 'expected-improvement-plus'))
|====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Coding | BoxConstraint| KernelScale | | | result | | runtime | (observed) | (estim.) | | | | |====================================================================================================================| | 1 | Best | 0.10667 | 1.4019 | 0.10667 | 0.10667 | onevsone | 5.6939 | 200.36 | | 2 | Best | 0.066667 | 4.3304 | 0.066667 | 0.068735 | onevsone | 94.849 | 0.0032549 | | 3 | Accept | 0.08 | 0.4065 | 0.066667 | 0.066837 | onevsall | 0.01378 | 0.076021 | | 4 | Accept | 0.08 | 0.33179 | 0.066667 | 0.066676 | onevsall | 889 | 38.798 | | 5 | Best | 0.04 | 0.422 | 0.04 | 0.040502 | onevsone | 0.021561 | 0.01569 | | 6 | Accept | 0.04 | 0.33279 | 0.04 | 0.039999 | onevsone | 0.48338 | 0.02941 | | 7 | Accept | 0.04 | 0.35478 | 0.04 | 0.039989 | onevsone | 305.45 | 0.18647 | | 8 | Best | 0.026667 | 0.31222 | 0.026667 | 0.026674 | onevsone | 0.0010168 | 0.10757 | | 9 | Accept | 0.086667 | 0.29807 | 0.026667 | 0.026669 | onevsone | 0.001007 | 0.3275 | | 10 | Accept | 0.046667 | 1.3637 | 0.026667 | 0.026673 | onevsone | 736.18 | 0.071026 | | 11 | Accept | 0.04 | 0.33235 | 0.026667 | 0.035679 | onevsone | 35.928 | 0.13079 | | 12 | Accept | 0.033333 | 0.27242 | 0.026667 | 0.030065 | onevsone | 0.0017593 | 0.11245 | | 13 | Accept | 0.026667 | 0.26702 | 0.026667 | 0.026544 | onevsone | 0.0011306 | 0.062222 | | 14 | Accept | 0.026667 | 0.24452 | 0.026667 | 0.026089 | onevsone | 0.0011124 | 0.079161 | | 15 | Accept | 0.026667 | 0.2858 | 0.026667 | 0.026184 | onevsone | 0.0014395 | 0.073096 | | 16 | Best | 0.02 | 0.32467 | 0.02 | 0.021144 | onevsone | 0.0010299 | 0.035054 | | 17 | Accept | 0.02 | 0.319 | 0.02 | 0.020431 | onevsone | 0.0010379 | 0.03138 | | 18 | Accept | 0.033333 | 0.27855 | 0.02 | 0.024292 | onevsone | 0.0011889 | 0.02915 | | 19 | Accept | 0.02 | 0.24725 | 0.02 | 0.022327 | onevsone | 0.0011336 | 0.042445 | | 20 | Best | 0.013333 | 0.30737 | 0.013333 | 0.020178 | onevsone | 0.0010854 | 0.048345 | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Coding | BoxConstraint| KernelScale | | | result | | runtime | (observed) | (estim.) | | | | |====================================================================================================================| | 21 | Accept | 0.5 | 14.32 | 0.013333 | 0.020718 | onevsall | 689.42 | 0.001007 | | 22 | Accept | 0.33333 | 0.24297 | 0.013333 | 0.018299 | onevsall | 0.0011091 | 1.2155 | | 23 | Accept | 0.33333 | 0.25919 | 0.013333 | 0.017851 | onevsall | 529.11 | 372.18 | | 24 | Accept | 0.04 | 0.24993 | 0.013333 | 0.017879 | onevsone | 853.41 | 22.141 | | 25 | Accept | 0.046667 | 0.29265 | 0.013333 | 0.018114 | onevsone | 744.03 | 6.3339 | | 26 | Accept | 0.10667 | 0.28146 | 0.013333 | 0.018226 | onevsone | 0.0010775 | 999.54 | | 27 | Accept | 0.04 | 0.33384 | 0.013333 | 0.018557 | onevsone | 0.0020893 | 0.001005 | | 28 | Accept | 0.10667 | 0.2509 | 0.013333 | 0.019634 | onevsone | 0.0010666 | 12.404 | | 29 | Accept | 0.32 | 13.874 | 0.013333 | 0.018352 | onevsall | 951.6 | 0.027202 | | 30 | Accept | 0.04 | 0.26214 | 0.013333 | 0.018597 | onevsone | 936.87 | 1.7813 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 68.6281 seconds Total objective function evaluation time: 42.7994 Best observed feasible point: Coding BoxConstraint KernelScale ________ _____________ ___________ onevsone 0.0010854 0.048345 Observed objective function value = 0.013333 Estimated objective function value = 0.018594 Function evaluation time = 0.30737 Best estimated feasible point (according to models): Coding BoxConstraint KernelScale ________ _____________ ___________ onevsone 0.0011336 0.042445 Estimated objective function value = 0.018597 Estimated function evaluation time = 0.28751
Mdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsone' HyperparameterOptimizationResults: [1x1 BayesianOptimization] Properties, Methods
Создание двух многоклассовых моделей ECOC, обученных на высоких данных. Используйте линейных двоичных учащихся для одной из моделей и ядерных двоичных учащихся для другой. Сравните ошибку классификации реституции двух моделей.
В целом можно выполнить многоклассовую классификацию высоких данных при помощи fitcecoc
с линейными или ядерными двоичными учениками. Когда вы используете fitcecoc
чтобы обучить модель на длинных массивах, вы не можете использовать двоичных учащихся SVM непосредственно. Однако можно использовать или линейные, или ядерные двоичные модели классификации, которые используют SVM.
При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Если вы хотите запустить пример с помощью локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, можно изменить глобальное окружение выполнения, используя mapreducer
функция.
Создайте datastore, которое ссылается на папку, содержащую набор данных радужной оболочки глаза Фишера. Задайте 'NA'
значения как отсутствующие данные, так что datastore
заменяет их на NaN
значения. Создайте высокие версии предиктора и данных отклика.
ds = datastore('fisheriris.csv','TreatAsMissing','NA'); t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
X = [t.SepalLength t.SepalWidth t.PetalLength t.PetalWidth]; Y = t.Species;
Стандартизируйте данные предиктора.
Z = zscore(X);
Обучите многоклассовую модель ECOC, которая использует высокие данные и линейных двоичных учащихся. По умолчанию, когда вы передаете длинные массивы в fitcecoc
программное обеспечение обучает линейных двоичных учащихся, которые используют SVM. Поскольку данные отклика содержат только три уникальных класса, измените схему кодирования с «один против всех» (которая является по умолчанию, когда вы используете высокие данные) на «один от одного» (которая является по умолчанию, когда вы используете данные в памяти).
Для воспроизводимости установите начальные значения генераторов случайных чисел, используя rng
и tallrng
. Результаты могут варьироваться в зависимости от количества рабочих процессов и окружения выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление, Где Ваш Код Запуски.
rng('default') tallrng('default') mdlLinear = fitcecoc(Z,Y,'Coding','onevsone')
Training binary learner 1 (Linear) out of 3. Training binary learner 2 (Linear) out of 3. Training binary learner 3 (Linear) out of 3.
mdlLinear = CompactClassificationECOC ResponseName: 'Y' ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3×1 cell} CodingMatrix: [3×3 double] Properties, Methods
mdlLinear
является CompactClassificationECOC
модель, состоящая из трех двоичных учащихся.
Обучите многоклассовую модель ECOC, которая использует высокие данные и двоичных учащихся из ядра. Во-первых, создайте templateKernel
объект для определения свойств двоичных учащихся ядра; в частности, увеличить количество размерностей до .
tKernel = templateKernel('NumExpansionDimensions',2^16)
tKernel = Fit template for classification Kernel. BetaTolerance: [] BlockSize: [] BoxConstraint: [] Epsilon: [] NumExpansionDimensions: 65536 GradientTolerance: [] HessianHistorySize: [] IterationLimit: [] KernelScale: [] Lambda: [] Learner: 'svm' LossFunction: [] Stream: [] VerbosityLevel: [] Version: 1 Method: 'Kernel' Type: 'classification'
По умолчанию двоичные ученики ядра используют SVM.
Передайте templateKernel
объект к fitcecoc
и смените схему кодирования на «один против одного».
mdlKernel = fitcecoc(Z,Y,'Learners',tKernel,'Coding','onevsone')
Training binary learner 1 (Kernel) out of 3. Training binary learner 2 (Kernel) out of 3. Training binary learner 3 (Kernel) out of 3.
mdlKernel = CompactClassificationECOC ResponseName: 'Y' ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3×1 cell} CodingMatrix: [3×3 double] Properties, Methods
mdlKernel
также является CompactClassificationECOC
модель, состоящая из трех двоичных учащихся.
Сравните ошибку классификации реституции двух моделей.
errorLinear = gather(loss(mdlLinear,Z,Y))
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1.4 sec Evaluation completed in 1.6 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 15 sec Evaluation completed in 16 sec
errorKernel = 0.0067
mdlKernel
неверно классифицирует меньший процент обучающих данных, чем mdlLinear
.
Tbl
- Выборочные данныеВыборочные данные, заданный как таблица. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. Опционально Tbl
может содержать один дополнительный столбец для переменной отклика. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не приняты.
Если Tbl
содержит переменную отклика, и необходимо использовать все оставшиеся переменные в 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
функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName
функция.
Типы данных: 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 лог2 K | Для каждого двоичного ученика программа случайным образом назначает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации смотрите Random Coding Design Matrices. |
'onevsall' | K | Для каждого двоичного ученика один класс положителен, а остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений классов. |
'ordinal' | K – 1 | Для первого двоичного ученика первый класс отрицателен, а остальное положительно. Для второго двоичного ученика первые два класса отрицательны, остальные положительны и так далее. |
'sparserandom' | Случайный, но приблизительно 15 лог2 K | Для каждого двоичного ученика программа случайным образом присваивает классы как положительные или отрицательные с вероятностью 0,25 для каждого и игнорирует классы с вероятностью 0,5. Для получения дополнительной информации смотрите Random Coding Design Matrices. |
'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)
.
Все строки пользовательской матрицы кодирования должны быть различными.
Для получения дополнительной информации о форме пользовательских матриц проекта кодирования, см. Custom Coding Design Matrices.
Пример: 'Coding','ternarycomplete'
Типы данных: char
| string
| double
| single
| int16
| int32
| int64
| int8
'FitPosterior'
- Флаг, указывающий, преобразовывать ли счета в апостериорные вероятностиfalse
или 0
(по умолчанию) | true
или 1
Флаг, указывающий, преобразовать ли счета в апостериорные вероятности, заданный как разделенная разделенными запятой парами, состоящая из 'FitPosterior'
и a true
(1
) или false
(0
).
Если FitPosterior
является true
затем программное обеспечение преобразует классификационные оценки двоичных учащихся в апостериорные вероятности. Можно получить апостериорные вероятности при помощи kfoldPredict
, predict
, или resubPredict
.
fitcecoc
не поддерживает аппроксимацию апостериорных вероятностей, если:
Метод ансамбля AdaBoostM2
, LPBoost
, RUSBoost
, RobustBoost
, или TotalBoost
.
Двоичные ученики (Learners
) являются линейными или ядерными классификационными моделями, которые реализуют SVM. Чтобы получить апостериорные вероятности для линейных или ядерные модели классификации, реализуйте вместо этого логистическую регрессию.
Пример: 'FitPosterior',true
Типы данных: logical
'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'
значение пустое (по умолчанию), тогда fitcecoc
не содержит предикторов.
Если вы задаете 'NumBins'
значение как положительный целочисленный скаляр (numBins
), затем fitcecoc
помещает каждый числовой предиктор в самое большее numBins
equiprobable bins, а затем выращивает деревья на индексах интервал вместо исходных данных.
Количество интервалов может быть меньше numBins
если предиктор имеет меньше numBins
уникальные значения.
fitcecoc
не содержит категориальные предикторы.
Когда вы используете большой набор обучающих данных, эта опция binning ускоряет обучение, но может привести к потенциальному снижению точности. Можно попробовать 'NumBins',50
сначала, а затем измените значение в зависимости от точности и скорости обучения.
Обученная модель сохраняет границы интервала в 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
, Holdout
, KFold
, или Leaveout
.
Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp
.
'Holdout'
- Доля данных для валидации отключенияДоля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, затем программное обеспечение завершает следующие шаги:
Случайный выбор и резервирование p*100
% данных в качестве данных валидации и train модели с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Holdout',0.1
Типы данных: double
| single
'KFold'
- Количество складок10
(по умолчанию) | положительное целое значение, больше 1Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 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-на-1 в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно использовать только одну из следующих четырех опций: CVPartition
, Holdout
, KFold
, или Leaveout
.
Примечание
Для перекрестной проверки моделей ECOC, состоящих из учащихся, обучающихся линейной или классификационной модели ядра, не рекомендуется оставить один из них.
Пример: 'Leaveout','on'
'CategoricalPredictors'
- Категориальный список предикторов'all'
Категориальный список предикторов, заданный как одно из значений в этой таблице.
Значение | Описание |
---|---|
Вектор положительных целых чисел |
Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и Если |
Логический вектор |
A |
Матрица символов | Каждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames . Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину. |
Строковые массивы или массив ячеек векторов символов | Каждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames . |
'all' | Все предикторы категоричны. |
Спецификация 'CategoricalPredictors'
подходит, если:
По крайней мере, один предиктор является категориальным, и все двоичные ученики являются классификационными деревьями, наивными учениками Байеса, SVM, линейными учениками, учениками ядра или ансамблями классификационных деревьев.
Все предикторы категориальны, и, по крайней мере, один двоичный ученик является k NN.
Если вы задаете 'CategoricalPredictors'
для любого другого учащегося, тогда программное обеспечение предупреждает, что не может обучить этого двоичного учащегося. Для примера программное обеспечение не может обучать классификаторы дискриминантного анализа, используя категориальные предикторы.
Каждый учащийся идентифицирует и обрабатывает категориальные предикторы так же, как и функция подгонки, соответствующая учащемуся. См. 'CategoricalPredictors'
из fitckernel
для учащихся из ядра, 'CategoricalPredictors'
из fitcknn
для k - ближайших учащихся, 'CategoricalPredictors'
из fitclinear
для линейных учащихся, 'CategoricalPredictors'
из fitcnb
для наивных учеников Байеса, 'CategoricalPredictors'
из fitcsvm
для учащихся SVM и 'CategoricalPredictors'
из fitctree
для учащихся дерева.
Пример: 'CategoricalPredictors','all'
Типы данных: single
| double
| logical
| char
| string
| cell
'ClassNames'
- Имена классов, используемых для обученияИмена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames
должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl
или Y
.
Если ClassNames
является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.
Использование ClassNames
кому:
Задайте порядок классов во время обучения.
Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames
для определения порядка размерностей Cost
или порядок столбцов классификационных оценок, возвращаемых predict
.
Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y
является {'a','b','c'}
. Чтобы обучить модель с помощью наблюдений из классов 'a'
и 'c'
только, задайте 'ClassNames',{'a','c'}
.
Значение по умолчанию для ClassNames
- набор всех различных имен классов в переменной отклика в Tbl
или Y
.
Пример: 'ClassNames',{'b','g'}
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
'Cost'
- Расходы на неправильную классификациюСтоимость неправильной классификации, заданная как разделенная разделенными запятой парами, состоящая из 'Cost'
и квадратную матрицу или структуру. Если вы задаете:
Квадратная матрица Cost
, затем Cost(i,j)
- стоимость классификации точки в класс j
если его класс true i
. То есть строки соответствуют истинному классу, а столбцы - предсказанному классу. Чтобы задать порядок классов для соответствующих строк и столбцов Cost
, дополнительно задайте ClassNames
аргумент пары "имя-значение".
Структура S
, тогда он должен иметь два поля:
S.ClassNames
, который содержит имена классов как переменный совпадающий тип данных as Y
S.ClassificationCosts
, которая содержит матрицу затрат со строками и столбцами, упорядоченными как в S.ClassNames
По умолчанию это таковые
, где (K
) - глаз (K
)K
- количество различных классов.
Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]
Типы данных: double
| single
| struct
'Options'
- Опции параллельных вычислений[]
(по умолчанию) | массив структур, возвращенный statset
Опции параллельных вычислений, заданные как разделенная разделенными запятой парами, состоящая из 'Options'
и массив структур, возвращенный statset
. Эти опции требуют Parallel Computing Toolbox™. fitcecoc
использует 'Streams'
, 'UseParallel'
, и 'UseSubtreams'
поля.
В этой таблице представлены доступные опции.
Опция | Описание |
---|---|
'Streams' |
A
В этом случае используйте массив ячеек того же размера, что и параллельный пул. Если параллельный пул не открыт, то программное обеспечение пытается открыть его (в зависимости от ваших настроек), и |
'UseParallel' | Если у вас есть Parallel Computing Toolbox, то можно вызвать пул работников, установив Когда вы используете деревья принятия решений для двоичных учащихся, |
'UseSubstreams' | Установите значение true для параллельного вычисления с использованием потока, заданного как 'Streams' . По умолчанию это false . Для примера задайте Streams к типу, допускающему субпотоки, такому как 'mlfg6331_64' или 'mrg32k3a' . |
Лучшая практика для обеспечения более предсказуемых результатов - это использование parpool
(Parallel Computing Toolbox) и явным образом создать параллельный пул перед вызовом параллельных вычислений с помощью fitcecoc
.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
'PredictorNames'
- Имена переменных предиктораИмена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность PredictorNames
зависит от способа предоставления обучающих данных.
Если вы поставляете X
и Y
, тогда можно использовать PredictorNames
для назначения имен переменным предиктора в X
.
Порядок имен в PredictorNames
должен соответствовать порядку столбцов X
. То есть PredictorNames{1}
- имя X(:,1)
, PredictorNames{2}
- имя X(:,2)
и так далее. Кроме того, size(X,2)
и numel(PredictorNames)
должно быть равным.
По умолчанию PredictorNames
является {'x1','x2',...}
.
Если вы поставляете Tbl
, тогда можно использовать PredictorNames
выбрать, какие переменные предиктора использовать в обучении. То есть, fitcecoc
использует только переменные предиктора в PredictorNames
и переменной отклика во время обучения.
PredictorNames
должен быть подмножеством Tbl.Properties.VariableNames
и не может включать имя переменной отклика.
По умолчанию PredictorNames
содержит имена всех переменных предиктора.
Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames'
или formula
, но не то и другое.
Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}
Типы данных: string
| cell
'Prior'
- Предыдущие вероятности'empirical'
(по умолчанию) | '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'
(по умолчанию) | символьный вектор | строковый скалярИмя переменной отклика, заданное как вектор символов или строковый скаляр.
Если вы поставляете Y
, тогда можно использовать 'ResponseName'
чтобы задать имя для переменной отклика.
Если вы поставляете ResponseVarName
или formula
, тогда вы не можете использовать 'ResponseName'
.
Пример: 'ResponseName','response'
Типы данных: char
| string
'ScoreTransform'
- Преобразование счета'none'
(по умолчанию) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| указатель на функцию |...Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.
В этой таблице результирующие векторы символов и строковые скаляры.
Значение | Описание |
---|---|
'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' | 2 x – 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' , 'correlation' , 'cosine' , 'euclidean' , 'hamming' , 'jaccard' , 'mahalanobis' , 'minkowski' , 'seuclidean' , и 'spearman' |
DistanceWeight | 'equal' , 'inverse' , и 'squaredinverse' | |
Exponent | Положительные значения в [0.5,3] | |
NumNeighbors | Положительные целочисленные значения логарифмически масштабируются в области значений [1, max(2,round(NumObservations/2))] | |
Standardize | 'true' и 'false' | |
'linear' | Lambda | Положительные значения логарифмируются в области значений [1e-5/NumObservations,1e5/NumObservations] |
Learner | 'svm' и 'logistic' | |
Regularization | 'ridge' и 'lasso' | |
'naivebayes' | DistributionNames | 'normal' и 'kernel' |
Width | Положительные значения логарифмируются в области значений [MinPredictorDiff/4,max(MaxPredictorRange,MinPredictorDiff)] | |
Kernel | 'normal' , 'box' , 'epanechnikov' , и 'triangle' | |
'svm' | BoxConstraint | Положительные значения логарифмируются в области значений [1e-3,1e3] |
KernelScale | Положительные значения логарифмируются в области значений [1e-3,1e3] | |
KernelFunction | 'gaussian' , 'linear' , и 'polynomial' | |
PolynomialOrder | Целые числа в области значений [2,4] | |
Standardize | 'true' и 'false' | |
'tree' | MaxNumSplits | Целые числа, логарифмированные в области значений [1,max(2,NumObservations-1)] |
MinLeafSize | Целые числа, логарифмированные в области значений [1,max(2,floor(NumObservations/2))] | |
NumVariablesToSample | Целые числа в области значений [1,max(2,NumPredictors)] | |
SplitCriterion | 'gdi' , 'deviance' , и 'twoing' |
В качестве альтернативы используйте hyperparameters
с выбранной вами Learners
, таких как
load fisheriris % hyperparameters requires data and learner params = hyperparameters('fitcecoc',meas,species,'svm');
Чтобы увидеть подходящие и стандартные гиперпараметры, исследуйте params
.
Установите параметры nondefault путем передачи вектора optimizableVariable
объекты, которые имеют значения nondefault. Для примера,
load fisheriris params = hyperparameters('fitcecoc',meas,species,'svm'); params(2).Range = [1e-4,1e6];
Передайте params
как значение OptimizeHyperparameters
.
По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
Для получения примера см. раздел «Оптимизация классификатора ECOC».
Пример: 'auto'
'HyperparameterOptimizationOptions'
- Опции для оптимизацииОпции оптимизации, заданные как разделенная разделенными запятой парами, состоящая из '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 | A cvpartition объект, созданный cvpartition . | 'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки |
Holdout | Скаляр в области значений (0,1) представляющий фракцию удержания. | |
Kfold | Целое число, больше 1. |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl
- Обученная модель 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 et al.] класс, производящий минимальную сумму двоичных потерь по сравнению с двоичными учениками, определяет предсказанный класс наблюдения, то есть
В loss-weighted decoding [Escalera et al.] класс, производящий минимальное среднее значение двоичных потерь по сравнению с двоичными учениками, определяет предсказанный класс наблюдения, то есть
Allwein et al. предположим, что утраченное декодирование повышает точность классификации путем сохранения значений потерь для всех классов в одной динамической области значений.
В этой таблице приведены поддерживаемые функции потерь, где yj является меткой класса для конкретного двоичного обучающегося (в наборе {-1,1,0}), sj является счетом для j наблюдений и g (yj, sj).
Значение | Описание | Счет | g (yj, sj) |
---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | log [1 + exp (-2 yjsj) ]/[ 2log (2)] |
'exponential' | Экспоненциал | (–∞,∞) | exp (- yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞, ∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | макс (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 – yjsj)/2 |
'logit' | Логистический | (–∞,∞) | журнал [1 + exp (- yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1 – yj (2 sj – 1)]2/2 |
Программа нормализует двоичные потери таким образом, что потеря составляет 0,5 при yj = 0, и агрегирует, используя среднее значение двоичных учащихся [Allwein et al.].
Не путайте двоичные потери с общими классификационными потерями (заданными 'LossFun'
Аргумент пары "имя-значение" из loss
и predict
функции объекта), который измеряет, насколько хорошо классификатор ECOC работает в целом.
coding design является матрицей, где элементы направляют, какие классы обучаются каждым двоичным учеником, то есть как многоклассовая задача сводится к ряду двоичных задач.
Каждая строка проекта кодирования соответствует отдельному классу, и каждый столбец соответствует двоичному обучающему. В проекте троичного кодирования для конкретного столбца (или двоичного обучающегося):
Строка, содержащая 1, предписывает двоичному ученику сгруппировать все наблюдения в соответствующем классе в положительный класс.
Строка, содержащая -1, предписывает двоичному ученику сгруппировать все наблюдения в соответствующем классе в отрицательный класс.
Строка, содержащая 0, предписывает двоичному ученику игнорировать все наблюдения в соответствующем классе.
Матрицы проекта кодирования с большими, минимальными, попарными расстояниями в строках, основанными на мере Хемминга, оптимальны. Для получения дополнительной информации о парном расстоянии между строками смотрите Random Coding Design Matrices и [4].
Эта таблица описывает популярные проекты кодирования.
Проект кодирования | Описание | Количество учащихся | Минимальное парное расстояние по строке |
---|---|---|---|
один от всех (OVA) | Для каждого двоичного ученика один класс положителен, а остальные отрицательны. Этот проект исчерпывает все комбинации положительных присвоений классов. | K | 2 |
один от одного (OVO) | Для каждого двоичного ученика один класс положителен, другой отрицателен, а остальные игнорируются. Этот проект исчерпывает все комбинации присвоений пар классов. | K (K – 1)/2 | 1 |
бинарный полный | Этот проект разбивает классы на все двоичные комбинации и не игнорирует никакие классы. То есть все назначения классов | 2K – 1 – 1 | 2K – 2 |
ternary complete | Этот проект разделяет классы на все троичные комбинации. То есть все назначения классов | (3K – 2K + 1 + 1)/2 | 3K – 2 |
порядковый | Для первого двоичного ученика первый класс отрицателен, а остальные положительны. Для второго двоичного ученика первые два класса отрицательны, а остальные положительны, и так далее. | K – 1 | 1 |
плотный случайный | Для каждого двоичного ученика программа случайным образом назначает классы в положительные или отрицательные классы с по крайней мере одним из каждого типа. Для получения дополнительной информации смотрите Random Coding Design Matrices. | Случайный, но приблизительно 10 лог2 K | Переменная |
разреженный случайный | Для каждого двоичного ученика программа случайным образом присваивает классы как положительные или отрицательные с вероятностью 0,25 для каждого и игнорирует классы с вероятностью 0,5. Для получения дополнительной информации смотрите Random Coding Design Matrices. | Случайный, но приблизительно 15 лог2 K | Переменная |
Этот график сравнивает количество двоичных учащихся для проектов кодирования с увеличением K.
error-correcting output codes (ECOC) model сводит задачу классификации с тремя или более классами к набору двоичных задач классификации.
Классификация ECOC требует проекта кодирования, которая определяет классы, которые обучают двоичные ученики, и схемы декодирования, которая определяет, как агрегируются результаты (предсказания) двоичных классификаторов.
Предположим следующее:
Задача классификации имеет три класса.
Проект кодирования - один от одного. Для трех классов этот проект кодирования
Схема декодирования использует g потерь.
Учащиеся являются SVM.
Чтобы создать эту классификационную модель, алгоритм 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
в Командное окно.
Вы должны сформировать матрицу кодирования, используя интимное знание приложения и принимая во внимание вычислительные ограничения. Если у вас есть достаточная вычислительная степень и время, попробуйте несколько матриц кодирования и выберите ту, которая имеет лучшую эффективность (например, проверьте матрицы неточностей для каждой модели, используя confusionchart
).
Перекрестная валидация с одним выходом (Leaveout
) неэффективен для наборов данных со многими наблюдениями. Вместо этого используйте k -fold cross-validation (KFold
).
После обучения модели можно сгенерировать код C/C + +, который предсказывает метки для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .
Пользовательские матрицы кодирования должны иметь определенную форму. Программа проверяет пользовательские матрицы кодирования, гарантируя:
Каждый элемент имеет значения -1, 0 или 1.
Каждый столбец содержит по крайней мере один -1 и один 1.
Для всех отличных векторов - столбцов u и v, <reservedrangesplaceholder3> ≠ <reservedrangesplaceholder2> и <reservedrangesplaceholder1> ≠ - v.
Все векторы строк уникальны.
Матрица может разделить любые два класса. То есть можно перемещаться из любой строки в любую другую строку, следуя этим правилам:
Можно перемещаться вертикально от 1 до -1 или -1 до 1.
Можно перемещаться горизонтально от ненулевого элемента к другому ненулевому элементу.
Столбец матрицы можно использовать для вертикального перемещения только один раз.
Если невозможно переместиться из строки i в j-строку с помощью этих правил, то классы i и j не могут быть разделены проектом. Для примера в проекте кодирования
классы 1 и 2 не могут быть отделены от классов 3 и 4 (то есть вы не можете двигаться горизонтально от -1 в строке 2 к столбцу 2, так как в этой позиции есть 0). Поэтому программное обеспечение отклоняет этот проект кодирования.
Если вы используете параллельные вычисления (см Options
), затем fitcecoc
параллельно обучает двоичных учащихся.
Априорные вероятности - программное обеспечение нормализует указанные априорные вероятности класса (Prior
) для каждого двоичного ученика. Позвольте M быть матрицей проекта кодирования и I (A, c) быть матрицей индикатора. Матрица индикаторов имеет те же размерности, что и A. Если соответствующий элемент A c, то матрица индикатора имеет элементы, равные единице, и нуль в противном случае. Пусть M + 1 и M -1 будут K -by - L матрицами, такими что:
M + 1 = M ○ I (M, 1), где ○ - поэлементное умножение (то есть Mplus = M.*(M == 1)
). Кроме того, позвольте быть вектором-столбцом 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 учитывают затраты на неправильную классификацию путем включения их в классовые предыдущие вероятности. Если вы задаете 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 является элементом матричного < reservedrangesplaceholder0 > проекта кодирования.
По умолчанию и для эффективности, fitcecoc
опустошает Alpha
, SupportVectorLabels
, и SupportVectors
свойства для всех линейных двоичных учащихся SVM. fitcecoc
перечисляет Beta
, а не Alpha
, на отображении модели.
Для хранения Alpha
, SupportVectorLabels
, и SupportVectors
, передайте линейный шаблон SVM, который задает хранение поддержки векторов в fitcecoc
. Для примера введите:
t = templateSVM('SaveSupportVectors',true) Mdl = fitcecoc(X,Y,'Learners',t);
Можно удалить векторы поддержки и связанные значения путем передачи полученного ClassificationECOC
моделировать в discardSupportVectors
.
[1] Allwein, E., R. Schapire, and Y. Singer. «Сокращение многоклассового числа до двоичного: Унифицирующий подход к маржинальным classifiers». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.
[2] Fürnkranz, Johannes, «Round Robin Classification». Дж. Мач. Учись. Res., Vol. 2, 2002, pp. 721-747.
[3] Эскалера, С., О. Пужоль, и П. Радева. «О процессе декодирования в троичных выходных кодах с исправлением ошибок». Транзакции IEEE по шаблонному анализу и машинному анализу. Том 32, Выпуск 7, 2010, стр. 120-134.
[4] Эскалера, С., О. Пужоль, и П. Радева. «Разделяемость троичных кодов для разреженных проектов выходных кодов с исправлением ошибок». Pattern Recog. Lett., Vol. 30, Issue 3, 2009, pp. 285-297.
Указания и ограничения по применению:
Поддерживаемые синтаксисы:
Mdl = fitcecoc(X,Y)
Mdl = fitcecoc(X,Y,Name,Value)
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitcecoc(X,Y,Name,Value)
— fitcecoc
возвращает дополнительные выходные аргументы FitInfo
и HyperparameterOptimizationResults
когда вы задаете 'OptimizeHyperparameters'
аргумент пары "имя-значение".
The FitInfo
выходной аргумент является пустым массивом структур, зарезервированным в настоящее время для возможного будущего использования.
Опции, связанные с перекрестной проверкой, не поддерживаются. Поддерживаемые аргументы пары "имя-значение":
'ClassNames'
'Cost'
'Coding'
- Значение по умолчанию 'onevsall'
.
'HyperparameterOptimizationOptions'
- Для перекрестной валидации tall optimization поддерживает только 'Holdout'
валидация. По умолчанию программное обеспечение выбирает и резервирует 20% данных в качестве данных валидации удержания и обучает модель, используя остальную часть данных. Вы можете задать другое значение для задержанной дроби с помощью этого аргумента. Для примера задайте 'HyperparameterOptimizationOptions',struct('Holdout',0.3)
зарезервировать 30% данных в качестве данных валидации.
'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'
свойства в вашем Apache Spark строение. См. parallel.cluster.Hadoop
(Parallel Computing Toolbox) для получения дополнительной информации. Для получения дополнительной информации о Apache Spark и других окружениях выполнения, которые управляют выполняемым кодом, см. Раздел «Расширение длинных массивов другими продуктами».
Для получения дополнительной информации см. Раздел «Длинные массивы»
Чтобы запустить параллельно, установите 'UseParallel'
опция для true
одним из следующих способов:
Установите 'UseParallel'
поле структуры опций для true
использование statset
и задайте 'Options'
аргумент пары "имя-значение" в вызове fitceoc
.
Для примера: 'Options',statset('UseParallel',true)
Для получения дополнительной информации смотрите 'Options'
аргумент пары "имя-значение".
Выполните параллельную оптимизацию гипероптимизации параметров управления при помощи 'HyperparameterOptions',struct('UseParallel',true)
аргумент пары "имя-значение" в вызове fitceoc
.
Для получения дополнительной информации об оптимизации параллельной гипероптимизации параметров управления смотрите Parallel Bayesian Optimization.
ClassificationECOC
| ClassificationPartitionedECOC
| ClassificationPartitionedKernelECOC
| ClassificationPartitionedLinearECOC
| CompactClassificationECOC
| designecoc
| loss
| predict
| statset
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.