Перекрестный мультикласс модель ECOC для машин опорных векторов (SVM) и других классификаторов
ClassificationPartitionedECOC
- набор моделей выходных кодов с исправлением ошибок (ECOC), обученных на перекрестных проверенных складках. Оцените качество перекрестно проверенной классификации с помощью одной или нескольких функций «kfold»: kfoldPredict
, kfoldLoss
, kfoldMargin
, kfoldEdge
, и kfoldfun
.
Каждый метод «kfold» использует модели, обученные на обучающих-складных (in-fold) наблюдениях, чтобы предсказать ответ для валидационных-складных (out-of-fold) наблюдений. Например, предположим, что вы перекрестно проверяете с помощью пяти складок. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение пяти группам равного размера (примерно). training fold содержит четыре группы (примерно 4/5 данных), а validation fold - другую группу (примерно 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)
.
Значение | Присвоение дихотомических классов |
---|---|
–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
- Расходы на неправильную классификациюЭто свойство доступно только для чтения.
Затраты на неправильную классификацию, заданные как квадратная числовая матрица. Cost
имеет K строки и столбцы, где K количество классов.
Cost(i,j)
- стоимость классификации точки в класс j
если его класс true 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' | журнал (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® function или функция, которую вы задаете, вводите указатель на функцию.
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
ансамбль деревьев решений с суррогатными сплитами. Чтобы ускорить обучение, числовые предикторы интервал и используйте параллельные вычисления. Раскладывание действительно только при 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
с.
ClassificationECOC
| CompactClassificationECOC
| crossval
| cvpartition
| fitcecoc
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.