Классификация наблюдений с использованием многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
использует дополнительные параметры, заданные одним или несколькими аргументами пары имя-значение. Например, можно задать метод оценки апостериорной вероятности, схему декодирования и уровень детализации.label = predict(Mdl,X,Name,Value)
[ использует любую из комбинаций входных аргументов в предыдущих синтаксисах и дополнительно возвращает: label,NegLoss,PBScore] = predict(___)
Массив отрицаемых средних двоичных потерь (NegLoss). Для каждого наблюдения в X, predict присваивает метку класса, дающую наибольшую отрицаемую среднюю двоичную потерю (или, что эквивалентно, наименьшую среднюю двоичную потерю).
Массив положительных оценок класса (PBScore) для наблюдений, классифицированных каждым двоичным учеником.
[ дополнительно возвращает оценки вероятности апостериорного класса для наблюдений (label,NegLoss,PBScore,Posterior] = predict(___)Posterior).
Для получения вероятности заднего класса необходимо установить 'FitPosterior',true при обучении модели ECOC с использованием fitcecoc. В противном случае predict выдает ошибку.
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
Обучение модели ECOC с использованием двоичных классификаторов SVM. Укажите 30% -ную выборку, стандартизируйте предикторы с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl является ClassificationPartitionedECOC модель. Имеет свойство Trained, массив ячеек 1 на 1, содержащий CompactClassificationECOC модель, которую программное обеспечение обучило с использованием обучающего набора.
Спрогнозировать метки тестового образца. Печать случайного подмножества истинных и прогнозируемых меток.
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); labels = predict(Mdl,XTest); idx = randsample(sum(testInds),10); table(YTest(idx),labels(idx),... 'VariableNames',{'TrueLabels','PredictedLabels'})
ans=10×2 table
TrueLabels PredictedLabels
__________ _______________
setosa setosa
versicolor virginica
setosa setosa
virginica virginica
versicolor versicolor
setosa setosa
virginica virginica
virginica virginica
setosa setosa
setosa setosa
Mdl правильно маркирует все, кроме одного из наблюдений тестового образца, индексами idx.
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
Обучайте модель ECOC с помощью двоичных классификаторов SVM и укажите 30% -ный образец задержки. Стандартизируйте предикторы с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl является ClassificationPartitionedECOC модель. Имеет свойство Trained, массив ячеек 1 на 1, содержащий CompactClassificationECOC модель, которую программное обеспечение обучило с использованием обучающего набора.
Оценки SVM подписаны расстояниями от наблюдения до границы принятия решения. Поэтому ) является доменом. Создайте пользовательскую двоичную функцию потери, которая выполняет следующие действия:
Сопоставьте матрицу дизайна кодирования (M) и оценки классификации положительного класса для каждого учащегося с двоичными потерями для каждого наблюдения.
Используйте линейные потери.
Агрегируйте двоичные потери учащихся с помощью медианы.
Можно создать отдельную функцию для двоичной функции потери, а затем сохранить ее на пути MATLAB ®. Также можно указать анонимную двоичную функцию потери. В этом случае создайте дескриптор функции (customBL) к анонимной двоичной функции потери.
customBL = @(M,s) median(1 - bsxfun(@times,M,s),2,'omitnan')/2;Спрогнозировать метки тестовой выборки и оценить медианные двоичные потери на класс. Распечатайте средние отрицательные двоичные потери на класс для случайного набора из 10 наблюдений тестовой выборки.
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); [label,NegLoss] = predict(Mdl,XTest,'BinaryLoss',customBL); idx = randsample(sum(testInds),10); classOrder
classOrder = 3x1 categorical
setosa
versicolor
virginica
table(YTest(idx),label(idx),NegLoss(idx,:),'VariableNames',... {'TrueLabel','PredictedLabel','NegLoss'})
ans=10×3 table
TrueLabel PredictedLabel NegLoss
__________ ______________ __________________________________
setosa versicolor 0.18569 1.989 -3.6747
versicolor virginica -1.3316 -0.12346 -0.044933
setosa versicolor 0.13897 1.9274 -3.5664
virginica virginica -1.5133 -0.38288 0.39616
versicolor versicolor -0.87209 0.74813 -1.376
setosa versicolor 0.4838 1.9987 -3.9825
virginica virginica -1.9363 -0.67586 1.1122
virginica virginica -1.5789 -0.8337 0.91265
setosa versicolor 0.50999 2.1223 -4.1323
setosa versicolor 0.36117 2.0608 -3.922
Порядок столбцов соответствует элементам classOrder. Программное обеспечение прогнозирует метку на основе максимальной отрицательной потери. Результаты показывают, что медиана линейных потерь может работать не так хорошо, как другие потери.
Обучение классификатора ECOC с использованием двоичных учеников SVM. Сначала спрогнозируйте метки тренировочной выборки и апостериорные вероятности классов. Затем предсказать максимальную апостериорную вероятность класса в каждой точке сетки. Визуализация результатов.
Загрузите набор данных радужки Фишера. Укажите размеры лепестков в качестве предикторов и названия видов в качестве ответа.
load fisheriris X = meas(:,3:4); Y = species; rng(1); % For reproducibility
Создайте шаблон SVM. Стандартизируйте предикторы и укажите гауссово ядро.
t = templateSVM('Standardize',true,'KernelFunction','gaussian');
t является шаблоном SVM. Большинство его свойств пусты. Когда программное обеспечение обучает классификатор ECOC, оно устанавливает соответствующие свойства для их значений по умолчанию.
Обучение классификатора ECOC с использованием шаблона SVM. Преобразовать оценки классификации в апостериорные вероятности класса (которые возвращаются predict или resubPredict) с использованием 'FitPosterior' аргумент пары имя-значение. Укажите порядок классов с помощью 'ClassNames' аргумент пары имя-значение. Отображение диагностических сообщений во время обучения с помощью 'Verbose' аргумент пары имя-значение.
Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,... 'ClassNames',{'setosa','versicolor','virginica'},... 'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 2 Positive class indices: 1 Fitting posterior probabilities for learner 1 (SVM). Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 1 Fitting posterior probabilities for learner 2 (SVM). Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations. Negative class indices: 3 Positive class indices: 2 Fitting posterior probabilities for learner 3 (SVM).
Mdl является ClassificationECOC модель. Один и тот же шаблон SVM применяется к каждому двоичному ученику, но можно настроить параметры для каждого двоичного ученика, передав вектор ячеек шаблонов.
Предсказать метки обучающей выборки и апостериорные вероятности класса. Отображать диагностические сообщения при вычислении меток и апостериорных вероятностей классов с помощью 'Verbose' аргумент пары имя-значение.
[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);Predictions from all learners have been computed. Loss for all observations has been computed. Computing posterior probabilities...
Mdl.BinaryLoss
ans = 'quadratic'
Программное обеспечение назначает наблюдение классу, которое дает наименьшие средние двоичные потери. Поскольку все двоичные ученики вычисляют апостериорные вероятности, функция двоичных потерь quadratic.
Отображение случайного набора результатов.
idx = randsample(size(X,1),10,1); Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
table(Y(idx),label(idx),Posterior(idx,:),... 'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
TrueLabel PredLabel Posterior
______________ ______________ ______________________________________
{'virginica' } {'virginica' } 0.0039322 0.003987 0.99208
{'virginica' } {'virginica' } 0.017067 0.018263 0.96467
{'virginica' } {'virginica' } 0.014948 0.015856 0.9692
{'versicolor'} {'versicolor'} 2.2197e-14 0.87318 0.12682
{'setosa' } {'setosa' } 0.999 0.00025092 0.00074638
{'versicolor'} {'virginica' } 2.2195e-14 0.05943 0.94057
{'versicolor'} {'versicolor'} 2.2194e-14 0.97001 0.029985
{'setosa' } {'setosa' } 0.999 0.00024991 0.0007474
{'versicolor'} {'versicolor'} 0.0085642 0.98259 0.0088487
{'setosa' } {'setosa' } 0.999 0.00025013 0.00074717
Столбцы Posterior соответствуют порядку классов Mdl.ClassNames.
Определите сетку значений в наблюдаемом предикторном пространстве. Предсказать апостериорные вероятности для каждого случая в сетке.
xMax = max(X); xMin = min(X); x1Pts = linspace(xMin(1),xMax(1)); x2Pts = linspace(xMin(2),xMax(2)); [x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts); [~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Для каждой координаты на сетке постройте график максимальной апостериорной вероятности класса среди всех классов.
contourf(x1Grid,x2Grid,... reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2))); h = colorbar; h.YLabel.String = 'Maximum posterior'; h.YLabel.FontSize = 15; hold on gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8); gh(2).LineWidth = 2; gh(3).LineWidth = 2; title('Iris Petal Measurements and Maximum Posterior') xlabel('Petal length (cm)') ylabel('Petal width (cm)') axis tight legend(gh,'Location','NorthWest') hold off

Обучайте многоклассную модель ECOC и оцените апостериорные вероятности с помощью параллельных вычислений.
Загрузить arrhythmia набор данных. Анализ данных ответа Yи определить количество классов.
load arrhythmia
Y = categorical(Y);
tabulate(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%
K = numel(unique(Y));
Несколько классов не представлены в данных, и многие другие классы имеют низкие относительные частоты.
Укажите шаблон обучения ансамбля, использующий метод GentleBoost и 50 слабых учеников дерева классификации.
t = templateEnsemble('GentleBoost',50,'Tree');
t является объектом шаблона. Большинство его свойств пусты ([]). Во время обучения программа использует значения по умолчанию для всех пустых свойств.
Поскольку переменная ответа содержит много классов, укажите схему разреженного произвольного кодирования.
rng(1); % For reproducibility Coding = designecoc(K,'sparserandom');
Обучение модели ECOC с помощью параллельных вычислений. Укажите 15% удерживаемый образец и подгоните задние вероятности.
pool = parpool; % Invokes workersStarting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
options = statset('UseParallel',true); PMdl = fitcecoc(X,Y,'Learner',t,'Options',options,'Coding',Coding,... 'FitPosterior',true,'Holdout',0.15); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl является ClassificationPartitionedECOC модель. Имеет свойство Trained, массив ячеек 1 на 1, содержащий CompactClassificationECOC модель, которую программное обеспечение обучило с использованием обучающего набора.
Пул вызывает шесть работников, хотя число работников может различаться в разных системах.
Оценить апостериорные вероятности и показать апостериорную вероятность быть классифицированным как не имеющий аритмии (класс 1), учитывая данные для случайного набора наблюдений тестовой выборки.
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); [~,~,~,posterior] = predict(Mdl,XTest,'Options',options); idx = randsample(sum(testInds),10); table(idx,YTest(idx),posterior(idx,1),... 'VariableNames',{'TestSampleIndex','TrueLabel','PosteriorNoArrhythmia'})
ans=10×3 table
TestSampleIndex TrueLabel PosteriorNoArrhythmia
_______________ _________ _____________________
11 6 0.60631
41 4 0.23674
51 2 0.13802
33 10 0.43831
12 1 0.94332
8 1 0.97278
37 1 0.62807
24 10 0.96876
56 16 0.29375
30 1 0.64512
Mdl - Полная или компактная многоклассная модель ECOCClassificationECOC объект модели | CompactClassificationECOC объект моделиПолная или компактная многоклассная модель ECOC, заданная как ClassificationECOC или CompactClassificationECOC объект модели.
Чтобы создать полную или компактную модель ECOC, см. раздел ClassificationECOC или CompactClassificationECOC.
X - Данные предиктора должны быть классифицированыДанные предиктора, подлежащие классификации, указываются как числовая матрица или таблица.
По умолчанию каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные, составляющие столбцы X должен иметь тот же порядок, что и переменные предиктора, которые Mdl.
Если вы тренируетесь Mdl использование таблицы (например, Tbl), то X может быть числовой матрицей, если Tbl содержит все числовые переменные предиктора. Чтобы обработать числовые предикторы в Tbl в качестве категориального во время обучения, определить категориальные предикторы, используя CategoricalPredictors аргумент пары имя-значение fitcecoc. Если Tbl содержит разнородные переменные предиктора (например, числовые и категориальные типы данных) и X является числовой матрицей, то predict выдает ошибку.
Для таблицы:
predict не поддерживает многозначные переменные или массивы ячеек, отличные от массивов ячеек символьных векторов.
Если вы тренируетесь Mdl использование таблицы (например, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и переменные предиктора, которые Mdl (хранится в Mdl.PredictorNames). Однако порядок столбцов X не обязательно соответствовать порядку столбцов Tbl. Оба Tbl и X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.
Если вы тренируетесь Mdl используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames и соответствующие имена переменных предиктора в X должно быть то же самое. Чтобы указать имена предикторов во время обучения, см. PredictorNames аргумент пары имя-значение fitcecoc. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.
Примечание
Если Mdl.BinaryLearners содержит модели линейной классификации (ClassificationLinear), то вы можете ориентировать матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и указать 'ObservationsIn','columns'. Однако вы не можете указать 'ObservationsIn','columns' для данных предиктора в таблице.
При обучении Mdl, предположим, что вы установили 'Standardize',true для объекта шаблона, указанного в 'Learners' аргумент пары имя-значение fitcecoc. В этом случае для соответствующего двоичного ученика j, программное обеспечение стандартизирует столбцы новых данных предиктора, используя соответствующие средства в Mdl.BinaryLearner{j}.Mu и стандартные отклонения в Mdl.BinaryLearner{j}.Sigma.
Типы данных: table | double | single
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
predict(Mdl,X,'BinaryLoss','quadratic','Decoding','lossbased') определяет квадратную двоичную функцию потери ученика и схему декодирования на основе потерь для агрегирования двоичных потерь.'BinaryLoss' - Двоичная функция потери ученика'hamming' | 'linear' | 'logit' | 'exponential' | 'binodeviance' | 'hinge' | 'quadratic' | дескриптор функцииДвоичная функция потери ученика, заданная как разделенная запятыми пара, состоящая из 'BinaryLoss' и встроенное имя или дескриптор функции потери.
В этой таблице описываются встроенные функции, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, а g (yj, sj) - формула двоичных потерь.
| Стоимость | Описание | Домен оценки | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | журнал [1 + exp (-2yjsj) ]/[ 2log (2)] |
'exponential' | Показательный | (–∞,∞) | exp (-yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞,∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | max (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 - yjsj )/2 |
'logit' | Логистический | (–∞,∞) | log [1 + exp (-yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1-yj (2sj-1)] 2/2 |
Программное обеспечение нормализует двоичные потери так, чтобы потери были 0,5, когда yj = 0. Кроме того, программное обеспечение вычисляет средние двоичные потери для каждого класса.
Например, для пользовательской двоичной функции потери customFunction, укажите его функциональный дескриптор 'BinaryLoss',@customFunction.
customFunction имеет следующую форму:
bLoss = customFunction(M,s)
M - матрица кодирования K-by-L, сохраненная в Mdl.CodingMatrix.
s - вектор 1-by-L строк классификационных баллов.
bLoss - потеря классификации. Этот скаляр агрегирует двоичные потери для каждого учащегося в конкретном классе. Например, можно использовать среднюю двоичную потерю для суммирования потерь по учащимся для каждого класса.
K - количество классов.
L - количество двоичных учеников.
Пример передачи пользовательской двоичной функции потери см. в разделе Прогнозирование меток тестовой выборки модели ECOC с использованием пользовательской двоичной функции потери.
Дефолт BinaryLoss значение зависит от диапазонов баллов, возвращаемых двоичными учениками. В этой таблице описаны некоторые значения по умолчанию BinaryLoss значения, основанные на данных допущениях.
| Предположение | Значение по умолчанию |
|---|---|
| Все двоичные ученики являются SVM или линейными или классификационными моделями SVM. | 'hinge' |
Все бинарные учащиеся являются ансамблями, обученными AdaboostM1 или GentleBoost. | 'exponential' |
Все бинарные учащиеся являются ансамблями, обученными LogitBoost. | 'binodeviance' |
Все двоичные ученики являются линейными или классификационными моделями ядра учащихся логистической регрессии. Или вы указываете, чтобы предсказать апостериорные вероятности класса путем установки 'FitPosterior',true в fitcecoc. | 'quadratic' |
Чтобы проверить значение по умолчанию, используйте точечную нотацию для отображения BinaryLoss свойство обучаемой модели в командной строке.
Пример: 'BinaryLoss','binodeviance'
Типы данных: char | string | function_handle
'Decoding' - Схема декодирования'lossweighted' (по умолчанию) | 'lossbased'Схема декодирования, которая агрегирует двоичные потери, заданная как разделенная запятыми пара, состоящая из 'Decoding' и 'lossweighted' или 'lossbased'. Дополнительные сведения см. в разделе Потери двоичного кода.
Пример: 'Decoding','lossbased'
'NumKLInitializations' - Количество случайных начальных значений0 (по умолчанию) | неотрицательный целочисленный скалярЧисло случайных начальных значений для аппроксимации задних вероятностей минимизацией расходимости Куллбэка-Лейблера, определяемых как пара, разделенная запятыми, состоящая из 'NumKLInitializations' и неотрицательный целочисленный скаляр.
Если не запросить четвертый выходной аргумент (Posterior) и установить 'PosteriorMethod','kl' (по умолчанию), то программное обеспечение игнорирует значение NumKLInitializations.
Дополнительные сведения см. в разделе Апостериорная оценка с использованием дивергенции Kullback-Leibler.
Пример: 'NumKLInitializations',5
Типы данных: single | double
'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'columns' или 'rows'. Mdl.BinaryLearners должен содержать ClassificationLinear модели.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', можно значительно сократить время выполнения. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
'Options' - Варианты оценки[] (по умолчанию) | массив структуры, возвращенный statsetОпции оценки, указанные как пара, разделенная запятыми, состоящая из 'Options' и массив структуры, возвращенный statset.
Для вызова параллельных вычислений:
Вам нужна лицензия Parallel Computing Toolbox™.
Определить 'Options',statset('UseParallel',true).
'PosteriorMethod' - Метод оценки апостериорной вероятности'kl' (по умолчанию) | 'qp'Метод оценки апостериорной вероятности, определяемый как разделенная запятыми пара, состоящая из 'PosteriorMethod' и 'kl' или 'qp'.
Если PosteriorMethod является 'kl'затем программное обеспечение оценивает мультиклассовые апостериорные вероятности путем минимизации расхождения Куллбэка-Лейблера между предсказанной и ожидаемой апостериорной вероятностями, возвращаемыми двоичными учениками. Дополнительные сведения см. в разделе Задняя оценка с использованием дивергенции Kullback-Leibler.
Если PosteriorMethod является 'qp', то программное обеспечение оценивает мультиклассовые апостериорные вероятности, решая задачу наименьших квадратов с помощью квадратичного программирования. Для использования этого параметра необходима лицензия Optimization Toolbox™. Дополнительные сведения см. в разделе Апостериорная оценка с использованием квадратичного программирования.
Если не запросить четвертый выходной аргумент (Posterior), то программное обеспечение игнорирует значение PosteriorMethod.
Пример: 'PosteriorMethod','qp'
'Verbose' - Уровень детализации0 (по умолчанию) | 1Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и 0 или 1. Verbose управляет количеством диагностических сообщений, отображаемых программой в окне команд.
Если Verbose является 0, то программное обеспечение не отображает диагностические сообщения. В противном случае программа отображает диагностические сообщения.
Пример: 'Verbose',1
Типы данных: single | double
label - Прогнозируемые метки классовПрогнозируемые метки класса, возвращаемые как категориальный, символьный, логический или числовой массив или массив ячеек символьных векторов. Программное обеспечение предсказывает классификацию наблюдения, присваивая наблюдение классу, давая наибольшую отрицаемую среднюю двоичную потерю (или, что эквивалентно, наименьшую среднюю двоичную потерю).
label имеет тот же тип данных, что и метки классов, используемые для обучения Mdl и имеет то же количество строк, что и X. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Если Mdl.BinaryLearners содержит ClassificationLinear модели, затем label - матрица m-by-L, где m - количество наблюдений в Xи L - количество уровней регуляризации в моделях линейной классификации (numel(Mdl.BinaryLearners{1}.Lambda)). Стоимость label(i,j) - прогнозируемая метка наблюдения i для модели, обученной с использованием силы регуляризации Mdl.BinaryLearners{1}.Lambda(j).
В противном случае label - вектор столбца длиной m.
NegLoss - Сведенные на нет средние двоичные потериОтрицательные средние двоичные потери, возвращаемые в виде числовой матрицы или массива.
Если Mdl.BinaryLearners содержит ClassificationLinear модели, затем NegLoss является массивом m-by-K-by-L.
m - количество наблюдений в X.
K - количество отдельных классов в данных обучения (numel(Mdl.ClassNames)).
L - количество уровней регуляризации в моделях линейной классификации (numel(Mdl.BinaryLearners{1}.Lambda)).
NegLoss(i,k,j) - отрицательная средняя двоичная потеря для наблюдения i, соответствующий классу Mdl.ClassNames(k), для модели, обученной с использованием силы регуляризации Mdl.BinaryLearners{1}.Lambda(j).
В противном случае NegLoss является матрицей m-by-K.
PBScore - Положительные оценки классаПоложительные оценки для каждого двоичного ученика, возвращаемые в виде числовой матрицы или массива.
Если Mdl.BinaryLearners содержит ClassificationLinear модели, затем PBScore является массивом m-by-B-by-L.
m - количество наблюдений в X.
B - количество двоичных учеников (numel(Mdl.BinaryLearners)).
L - количество уровней регуляризации в моделях линейной классификации (numel(Mdl.BinaryLearners{1}.Lambda)).
PBScore(i,b,j) является положительным классом оценки для наблюдения i, использование двоичного ученика b, для модели, обученной с использованием силы регуляризации Mdl.BinaryLearners{1}.Lambda(j).
В противном случае PBScore является матрицей m-by-B.
Posterior - Вероятности заднего классаАпостериорные вероятности классов, возвращаемые в виде числовой матрицы или массива.
Если Mdl.BinaryLearners содержит ClassificationLinear модели, затем Posterior является массивом m-by-K-by-L. Определения размеров см. в разделе NegLoss. Posterior(i,k,j) - задняя вероятность того, что наблюдение i происходит от класса Mdl.ClassNames(k), для модели, обученной с использованием силы регуляризации Mdl.BinaryLearners{1}.Lambda(j).
В противном случае Posterior является матрицей m-by-K.
Двоичная потеря - это функция класса и оценки классификации, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в классе.
Предположим, что:
mkj - элемент (k, j) матрицы M дизайна кодирования (то есть код, соответствующий классу k двоичного учащегося j).
sj - оценка двоичного ученика j для наблюдения.
g - функция двоичных потерь.
^ - прогнозируемый класс для наблюдения.
При декодировании на основе потерь [Escalera et al.] класс, производящий минимальную сумму двоичных потерь над двоичными учениками, определяет прогнозируемый класс наблюдения, то есть
).
При декодировании со взвешенными потерями [Escalera et al.] класс, производящий минимальное среднее двоичных потерь по двоичным ученикам, определяет прогнозируемый класс наблюдения, то есть
∑j=1L'mkj|.
Allwein et al. предполагают, что взвешенное по потерям декодирование улучшает точность классификации, сохраняя значения потерь для всех классов в одном динамическом диапазоне.
Эта таблица суммирует поддерживаемые функции потерь, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, и g (yj, sj).
| Стоимость | Описание | Домен оценки | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | журнал [1 + exp (-2yjsj) ]/[ 2log (2)] |
'exponential' | Показательный | (–∞,∞) | exp (-yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞,∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | max (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 - yjsj )/2 |
'logit' | Логистический | (–∞,∞) | log [1 + exp (-yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1-yj (2sj-1)] 2/2 |
Программное обеспечение нормализует двоичные потери так, что потери составляют 0,5, когда yj = 0, и агрегирует, используя среднее значение двоичных учеников [Allwein et al.].
Не путайте бинарную потерю с общей классификационной потерей (указанной 'LossFun' аргумент пары имя-значение loss и predict объектные функции), который измеряет, насколько хорошо классификатор ECOC работает в целом.
Программное обеспечение может оценивать апостериорные вероятности классов, минимизируя дивергенцию Куллбэка-Лейблера или используя квадратичное программирование. Для следующих описаний алгоритмов апостериорной оценки предположим, что:
mkj - элемент (k, j) матрицы M дизайна кодирования.
I - функция индикатора.
k - оценка апостериорной вероятности класса для класса k наблюдения, k = 1,...,K.
rj - апостериорная вероятность положительного класса для двоичного учащегося j. То есть, rj - вероятность того, что двоичный ученик j классифицирует наблюдение в положительный класс, учитывая данные обучения.
По умолчанию программное обеспечение минимизирует дивергенцию Kullback-Leibler для оценки апостериорных вероятностей класса. Расхождение Куллбака-Лейблера между ожидаемой и наблюдаемой апостериорной вероятностями положительного класса составляет
rj1 − r ^ j],
где - вес для двоичного ученика j.
Sj - это набор показателей наблюдения, на которых обучается двоичный ученик j.
- вес наблюдения i.
Программное обеспечение минимизирует расхождение итеративно. Первым шагом является выбор начальных значений .., K для апостериорных вероятностей класса.
Если не указать 'NumKLIterations'затем программное обеспечение пробует оба набора детерминированных начальных значений, описанных далее, и выбирает набор, который минимизирует Δ.
..., K.
.., K - решение системы
= r,
где M01 - M со всеми mkj = -1, замененными на 0, и r - вектор апостериорных вероятностей положительного класса, возвращаемый L двоичными учениками [Dietterich et al.]. Программное обеспечение использует lsqnonneg для решения системы.
При указании 'NumKLIterations',c, где c является натуральным числом, то программное обеспечение делает следующее, чтобы выбрать множество .., K, и выбирает множество, которое минимизирует Δ.
Программное обеспечение пробует оба набора детерминированных начальных значений, как описано выше.
Программное обеспечение случайным образом генерирует c векторы длины К с использованием rand, а затем нормализует каждый вектор для суммирования в 1.
При итерации t программное обеспечение выполняет следующие действия:
Вычислить
mkj=+1∪mkj=−1).
Оценить апостериорную вероятность следующего класса, используя
mkj = + 1) + (1 − r ^ j (t)) I (mkj = − 1)].
Нормализовать ,..., K так, чтобы они были равны 1.
Проверьте сходимость.
Более подробно см. [Hastie et al.] и [Zadrozny].
Для оценки апостериорной вероятности с помощью квадратичного программирования требуется лицензия Optimization Toolbox. Чтобы оценить апостериорные вероятности для наблюдения с помощью этого метода, программное обеспечение выполняет следующие шаги:
Оцените апостериорные вероятности положительного класса, rj, для двоичных учеников j = 1,...,L.
Используя взаимосвязь между rj и k [Wu et al.], минимизируйте
(mkj = + 1)] 2
в отношении k и ограничений
Программа выполняет минимизацию с помощью quadprog(Панель инструментов оптимизации).
[1] Allwein, E., R. Schapire и Y. Singer. «Сокращение мультиклассов до двоичных: унифицирующий подход к classifiers маржи». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.
[2] Диттерих, Т. и Г. Бакири. «Решение проблем многоклассового обучения с помощью кодов вывода с исправлением ошибок». Журнал исследований искусственного интеллекта. Том 2, 1995, стр. 263-286.
[3] Эскалера, С., О. Пужоль и П. Радева. «Процесс декодирования в выходных кодах с тройной коррекцией ошибок». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Том 32, выпуск 7, 2010, стр. 120-134.
[4] Эскалера, С., О. Пужоль и П. Радева. «Разделяемость троичных кодов для разреженных конструкций выходных кодов с исправлением ошибок». Распознавание образов. Том 30, выпуск 3, 2009, стр. 285-297.
[5] Хасти, Т. и Р. Тибширани. «Классификация по парной муфте». Анналы статистики. Том 26, выпуск 2, 1998, стр. 451-471.
[6] Wu, T.F., C. J. Лин и Р. Венг. «Оценки вероятности для классификации нескольких классов по парному соединению». Журнал исследований машинного обучения. Том 5, 2004, стр. 975-1005.
[7] Задрозный, В. «Уменьшение мультикласса до двоичного путем оценки вероятности связи». NIPS 2001: Proceedings of Advances in Neural Information Processing Systems 14, 2001, pp. 1041-1048.
Примечания и ограничения по использованию:
predict не поддерживает высокий table данные при Mdl содержит ядро или линейные двоичные ученики.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Можно создать код C/C + + для обоихpredict и update с помощью конфигуратора кодера. Или создайте код только для predict с помощью saveLearnerForCoder, loadLearnerForCoder, и codegen.
Создание кода для predict и update - Создание конфигуратора кодера с помощью learnerCoderConfigurer а затем создать код с помощью generateCode. Затем можно обновить параметры модели в сгенерированном коде без необходимости регенерации кода.
Создание кода для predict - сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen (Кодер MATLAB) для создания кода для функции точки входа.
Чтобы создать код C/C + + с одной точностью для прогнозирования, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
X |
|
Posterior | Этот выходной аргумент не поддерживается. |
| Аргументы пары имя-значение | Имена в аргументах пары имя-значение должны быть константами времени компиляции. |
BinaryLoss |
|
NumKLInitializations | Этот аргумент пары имя-значение не поддерживается. |
ObservationsIn | Значение для 'ObservationsIn' аргумент пары имя-значение должен быть константой времени компиляции. Например, для использования 'ObservationsIn','columns' аргумент пары имя-значение в сгенерированном коде, включить {coder.Constant('ObservationsIn'),coder.Constant('columns')} в -args значение codegen (Кодер MATLAB). |
Options | Этот аргумент пары имя-значение не поддерживается. |
PosteriorMethod | Этот аргумент пары имя-значение не поддерживается. |
Verbose | Если планируется создать файл MEX без использования конфигуратора кодера, можно указать Verbose. В противном случае codegen не поддерживает Verbose. |
Дополнительные сведения см. в разделе Введение в создание кода.
Для параллельного выполнения укажите 'Options' аргумент name-value в вызове этой функции и установка 'UseParallel' поле структуры опций для true использование statset.
Например: 'Options',statset('UseParallel',true)
Дополнительные сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
ClassificationECOC | CompactClassificationECOC | fitcecoc | loss | resubPredict | statset | quadprog (панель инструментов оптимизации)
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.