Перекрестный подтвержденный мультикласс модель 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
Раздел Раздел данных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-by-L матрица, где L является количеством бинарных учеников (size(CodingMatrix,2)).
Элементами BinaryY является –1, 0 или 1, и значения соответствуют дихотомическим присвоениям класса. Эта таблица описывает, как ученик j присваивает наблюдение k дихотомическому классу, соответствующему значению BinaryY(k,j).
| Значение | Дихотомическое присвоение класса |
|---|---|
| –1 | Ученик j присваивает наблюдение k отрицательному классу. |
| 0 | Перед обучением ученик j удаляет наблюдение k из набора данных. |
| 1 | Ученик j присваивает наблюдение k положительному классу. |
Если матрица кодирования отличается через сгибы, то BinaryY пуст ([]).
Типы данных: 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 пуст ([]). Можно получить матрицу кодирования для каждого сгиба при помощи свойства 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 содержит NaN s, то соответствующими значениями Xbinned является NaN s.
ClassificationECOC | CompactClassificationECOC | crossval | cvpartiton | fitcecoc
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.