Многоклассная модель ECOC с перекрестной проверкой для вспомогательных векторных машин (SVM) и других классификаторов
ClassificationPartitionedECOC представляет собой набор моделей выходных кодов с исправлением ошибок (ECOC), обученных на перекрестно проверенных складках. Оцените качество перекрестно проверенной классификации с помощью одной или нескольких функций «kfold»: kfoldPredict, kfoldLoss, kfoldMargin, kfoldEdge, и kfoldfun.
Каждый метод «kfold» использует модели, обученные тренировочным (кратным) наблюдениям, чтобы предсказать ответ для валидационных (многократных) наблюдений. Например, предположим, что выполняется перекрестная проверка с использованием пяти сгибов. В этом случае программное обеспечение случайным образом распределяет каждое наблюдение на пять групп одинакового размера (примерно). Тренировочная складка содержит четыре группы (примерно 4/5 данных), а проверочная складка содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка выполняется следующим образом:
Программное обеспечение обучает первую модель (хранится в CVMdl.Trained{1}) с использованием наблюдений в последних четырех группах и резервирует наблюдения в первой группе для проверки.
Программное обеспечение обучает вторую модель (хранится в CVMdl.Trained{2}) с использованием наблюдений в первой и последних трех группах. Программа резервирует наблюдения во второй группе для проверки.
Программное обеспечение работает аналогичным образом для третьей, четвертой и пятой моделей.
При проверке с помощью kfoldPredictпрограммное обеспечение вычисляет прогнозы для наблюдений в группе i с использованием i-й модели. Короче говоря, программное обеспечение оценивает отклик для каждого наблюдения, используя модель, обученную без этого наблюдения.
Можно создать 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 элементы.
Программное обеспечение нормализует веса, используемые для обучения, так, чтобы sum(W,'omitnan') является 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).
| Стоимость | Назначение класса Dichotomous |
|---|---|
–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).
| Стоимость | Назначение класса Dichotomous |
|---|---|
–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 - Расходы на неправильную классификациюЭто свойство доступно только для чтения.
Затраты на неправильную классификацию, указанные как квадратная числовая матрица. Cost имеет K строк и столбцов, где K - количество классов.
Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.
fitcecoc включает в себя затраты на неправильную классификацию различных типов двоичных учеников.
Типы данных: double
PredictorNames - Имена предикторовИмена предикторов в порядке их появления в данных предиктора X, задается как массив ячеек символьных векторов. Длина PredictorNames равно количеству столбцов в X.
Типы данных: cell
Prior - Вероятности предыдущего классаЭто свойство доступно только для чтения.
Вероятности предшествующего класса, определенные как числовой вектор. Prior имеет столько же элементов, сколько и число классов в ClassNames, и порядок элементов соответствует порядку классов в ClassNames.
fitcecoc включает в себя затраты на неправильную классификацию различных типов двоичных учеников.
Типы данных: double
ResponseName - Имя переменной ответаИмя ответной переменной, указанное как символьный вектор.
Типы данных: char
ScoreTransform - Функция преобразования баллов для применения к прогнозируемым баллам'doublelogit' | 'invlogit' | 'ismax' | 'logit' | 'none' | дескриптор функции |...Функция преобразования баллов для применения к прогнозируемым баллам, заданная как имя функции или дескриптор функции.
Изменение функции преобразования баллов на function, например, использовать точечную нотацию.
Для встроенной функции введите этот код и замените function со значением в таблице.
Mdl.ScoreTransform = 'function';
| Стоимость | Описание |
|---|---|
'doublelogit' | 1/( 1 + e-2x) |
'invlogit' | log (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 достаточно хорошо обобщается.
Обучение классификатора ECOC «один против всех» с помощью GentleBoost ансамбль деревьев решений с суррогатными расколами. Чтобы ускорить обучение, используйте числовые предикторы и параллельные вычисления. Binning допустим только тогда, когда fitcecoc использует учащегося дерева. После обучения оцените ошибку классификации, используя 10-кратную перекрестную проверку. Обратите внимание, что параллельные вычисления требуют 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 «один против всех» с использованием ансамблей деревьев решений в качестве двоичных учеников. Для ускорения обучения используйте binning и параллельные вычисления.
Биннинг ('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 | cvpartition | fitcecoc
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.