Перекрестный подтвержденный мультикласс модель 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
элементы.
Программное обеспечение нормирует веса, используемые для обучения так, чтобы 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
- 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
содержит NaN
s, затем соответствующий Xbinned
значениями является NaN
s.
ClassificationECOC
| CompactClassificationECOC
| crossval
| cvpartition
| fitcecoc
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.