Перекрестный подтвержденный мультикласс модель ECOC для машин опорных векторов (SVMs) и других классификаторов
ClassificationPartitionedECOC набор моделей выходных кодов с коррекцией ошибок (ECOC), обученных на перекрестных подтвержденных сгибах. Оцените качество перекрестной подтвержденной классификации при помощи одной или нескольких функций “kfold”: kfoldPredict, kfoldLoss, kfoldMargin, kfoldEdge, и kfoldfun.
Каждые “kfold” модели использования метода, обученные на учебном сгибе, (окутывают) наблюдения, чтобы предсказать ответ для сгиба валидации наблюдения (из сгиба). Например, предположите, что вы перекрестный подтверждаете использование пяти сгибов. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение в пять групп равного размера (примерно). training fold содержит четыре из групп (примерно 4/5 данных), и validation fold содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка продолжает можно следующим образом:
Программное обеспечение обучает первую модель (сохраненный в CVMdl.Trained{1}) при помощи наблюдений в последних четырех группах и резервах наблюдения в первой группе для валидации.
Программное обеспечение обучает вторую модель (сохраненный в CVMdl.Trained{2}) при помощи наблюдений в первой группе и последних трех группах. Программное обеспечение резервирует наблюдения во второй группе для валидации.
Программное обеспечение продолжает подобным способом для третьих, четвертых, и пятых моделей.
Если вы подтверждаете при помощи kfoldPredict, программное обеспечение вычисляет прогнозы для наблюдений в группе i при помощи i th модель. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения при помощи модели, обученной без того наблюдения.
Можно создать ClassificationPartitionedECOC модель двумя способами:
CrossValidatedModel — Перекрестное подтвержденное имя моделиПерекрестное подтвержденное имя модели, заданное как вектор символов.
Например, 'ECOC' задает перекрестную подтвержденную модель ECOC.
Типы данных: char
KFold — Количество перекрестных подтвержденных сгибовКоличество перекрестных подтвержденных сгибов, заданных как положительное целое число.
Типы данных: double
ModelParameters — Значения параметров перекрестной проверки Значения параметров перекрестной проверки, заданные как объект. Значения параметров соответствуют значениям аргумента пары "имя-значение", используемым, чтобы перекрестный подтвердить классификатор ECOC. ModelParameters не содержит оцененные параметры.
Можно получить доступ к свойствам ModelParameters использование записи через точку.
NumObservations — Количество наблюденийКоличество наблюдений в обучающих данных, заданных в виде положительного числа.
Типы данных: double
Partition — Раздел данныхcvpartition модельРаздел данных, указывающий, как программное обеспечение разделяет данные в сгибы перекрестной проверки, заданные как cvpartition модель.
Trained — Компактные классификаторы обучены на сгибах перекрестной проверкиCompactClassificationECOC моделиКомпактные классификаторы обучены на сгибах перекрестной проверки, заданных как массив ячеек CompactClassificationECOC модели. Trained имеет ячейки k, где k является количеством сгибов.
Типы данных: cell
W — Веса наблюденияВеса наблюдения раньше перекрестный подтверждали модель, заданную как числовой вектор. W имеет NumObservations элементы.
Программное обеспечение нормирует веса, используемые в обучении так, чтобы nansum(W) 1.
Типы данных: single | double
X — Нестандартизированные данные о предиктореНестандартизированные данные о предикторе раньше перекрестный подтверждали классификатор, заданный как числовая матрица или таблица.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single | double | table
Y — Наблюдаемые метки классаНаблюдаемые метки класса раньше перекрестный подтверждали модель, заданную как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов. Y имеет NumObservations элементы и имеют совпадающий тип данных как входной параметр Y то, что вы передаете fitcecoc перекрестный подтверждать модель. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Каждая строка Y представляет наблюдаемую классификацию соответствующей строки X.
Типы данных: categorical | char | logical | single | double | cell
BinaryLoss — Бинарная функция потерь ученика'binodeviance' | 'exponential' | 'hamming' | 'hinge' | 'linear' | 'logit' | 'quadratic'Бинарная функция потерь ученика, заданная как вектор символов, представляющий имя функции потерь.
Если вы обучаете использующих бинарных учеников, которые используют различные функции потерь, то программное обеспечение устанавливает BinaryLoss к 'hamming'. Чтобы потенциально увеличить точность, задайте бинарную функцию потерь кроме значения по умолчанию во время прогноза или расчета потерь при помощи 'BinaryLoss' аргумент пары "имя-значение" kfoldPredict или kfoldLoss.
Типы данных: char
BinaryY — Бинарные метки класса ученика[]Бинарные метки класса ученика, заданные как числовая матрица или [].
Если матрица кодирования является тем же самым через все сгибы, то BinaryY NumObservations- L матрица, где L является количеством бинарных учеников (size(CodingMatrix,2)).
Элементы BinaryY –1, 0, или 1, и значения соответствуют дихотомическим присвоениям класса. Эта таблица описывает как ученик j наблюдение присвоений k к дихотомическому классу, соответствующему значению BinaryY(k,j).
| Значение | Дихотомическое присвоение класса |
|---|---|
–1 | Ученик j наблюдение присвоений k к отрицательному классу. |
0 | Перед обучением, ученик j удаляет наблюдение k от набора данных. |
1 | Ученик j наблюдение присвоений k к положительному классу. |
Если матрица кодирования варьируется через сгибы, то BinaryY isempty).
Типы данных: double
CodingMatrix — Коды, задающие присвоения класса[]Коды, задающие присвоения класса для бинарных учеников, заданных как числовая матрица или [].
Если матрица кодирования является тем же самым через все сгибы, то CodingMatrix K-by-L матрица, где K является количеством классов, и L является количеством бинарных учеников.
Элементы CodingMatrix –1, 0, или 1, и значения соответствуют дихотомическим присвоениям класса. Эта таблица описывает как ученик j наблюдения присвоений в классе i к дихотомическому классу, соответствующему значению CodingMatrix(i,j).
| Значение | Дихотомическое присвоение класса |
|---|---|
–1 | Ученик j наблюдения присвоений в классе i к отрицательному классу. |
0 | Перед обучением, ученик j удаляет наблюдения в классе i от набора данных. |
1 | Ученик j наблюдения присвоений в классе i к положительному классу. |
Если матрица кодирования варьируется через сгибы, то CodingMatrix isempty). Можно получить матрицу кодирования для каждого сгиба при помощи Trained свойство. Например, CVMdl.Trained{1}.CodingMatrix матрица кодирования в первом сгибе перекрестной подтвержденной модели ECOC CVMdl.
Типы данных: double | single | int8 | int16 | int32 | int64
CategoricalPredictors — Категориальные индексы предиктора[]Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных о предикторе, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пусто ([]).
Типы данных: single | double
ClassNames — Уникальные метки классаУникальные метки класса используются в обучении, заданном как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames имеет совпадающий тип данных, когда класс маркирует Y. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
ClassNames также определяет порядок класса.
Типы данных: categorical | char | logical | single | double | cell
Cost — Затраты MisclassificationЭто свойство доступно только для чтения.
Затраты Misclassification, заданные как квадратная числовая матрица. Cost имеет строки и столбцы K, где K является количеством классов.
Cost(i,j) стоимость классификации точки в класс j если его истинным классом является i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.
fitcecoc включает затраты misclassification по-другому среди различных типов бинарных учеников.
Типы данных: double
PredictorNames — Имена предиктораПредиктор называет в порядке их внешнего вида в данных о предикторе X, заданный как массив ячеек из символьных векторов. Длина PredictorNames равно количеству столбцов в X.
Типы данных: cell
Prior — Предшествующие вероятности классаЭто свойство доступно только для чтения.
Предшествующие вероятности класса, заданные как числовой вектор. Prior имеет столько же элементов сколько количество классов в ClassNames, и порядок элементов соответствует порядку классов в ClassNames.
fitcecoc включает затраты misclassification по-другому среди различных типов бинарных учеников.
Типы данных: double
ResponseName — Имя переменной откликаИмя переменной отклика, заданное как вектор символов.
Типы данных: char
ScoreTransform — Выиграйте функцию преобразования, чтобы примениться к предсказанным баллам'doublelogit' | 'invlogit' | 'ismax' | 'logit' | 'none' | указатель на функцию |...Выиграйте функцию преобразования, чтобы примениться к предсказанным баллам, определенному функцией имени или указателю на функцию.
Чтобы изменить преобразование счета функционируют к function, например, используйте запись через точку.
Для встроенной функции введите этот код и замените function со значением в таблице.
Mdl.ScoreTransform = 'function';
| Значение | Описание |
|---|---|
'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® или функции, которую вы задаете, введите ее указатель на функцию.
Mdl.ScoreTransform = @function;
function должен принять матрицу (исходные баллы) и возвратить матрицу, одного размера (преобразованные баллы).
Типы данных: char | function_handle
kfoldEdge | Ребро классификации для перекрестной подтвержденной модели ECOC |
kfoldLoss | Потеря классификации для перекрестной подтвержденной модели ECOC |
kfoldMargin | Поля классификации для перекрестной подтвержденной модели ECOC |
kfoldPredict | Классифицируйте наблюдения на перекрестную подтвержденную модель ECOC |
kfoldfun | Перекрестный подтвердите функцию с помощью перекрестной подтвержденной модели ECOC |
Перекрестный подтвердите классификатор 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 делает вывод довольно хорошо.
Этот пример использует:
Обучите 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 содержит NaNs, затем соответствующий Xbinned значениями является NaNs.
ClassificationECOC | CompactClassificationECOC | crossval | cvpartiton | fitcecoc
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.