Предскажите ответы для новых наблюдений из наивной модели классификации Бейеса для пошагового обучения
задает опции с помощью одних или нескольких аргументов name-value. Например, можно задать пользовательскую матрицу стоимости misclassification (другими словами, заменить значение label
= predict(Mdl
,X
,Name,Value
)Mdl.Cost
) для вычислительных предсказаний путем определения Cost
аргумент.
[
также возвращает апостериорные вероятности (label
,Posterior
,Cost
] = predict(___)Posterior
) и предсказанный (ожидал) затраты misclassification (Cost
) соответствие наблюдениям (строки) в X
использование любой из комбинаций входных аргументов в предыдущих синтаксисах. Для каждого наблюдения в X
, предсказанная метка класса соответствует минимальной ожидаемой стоимости классификации среди всех классов.
Загрузите набор данных деятельности человека.
load humanactivity
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Подбирайте наивную модель классификации Бейеса к целому набору данных.
TTMdl = fitcnb(feat,actid)
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 24075 DistributionNames: {1×60 cell} DistributionParameters: {5×60 cell} Properties, Methods
TTMdl
ClassificationNaiveBayes
объект модели, представляющий традиционно обученную модель.
Преобразуйте традиционно обученную модель в наивную модель классификации Бейеса для пошагового обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1×2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1×60 cell} DistributionParameters: {5×60 cell} Properties, Methods
IncrementalMdl
incrementalClassificationNaiveBayes
объект модели подготовлен к пошаговому обучению.
incrementalLearner
функция инициализирует инкрементного ученика путем передачи изученных условных параметров распределения предиктора ему, наряду с другой информацией TTMdl
усвоенный из обучающих данных.
IncrementalMdl
является теплым (IsWarm
1
), что означает, что функции пошагового обучения могут начать отслеживать показатели производительности.
Инкрементный ученик, созданный из преобразования традиционно обученной модели, может сгенерировать предсказания без последующей обработки.
Предскажите метки класса для всех наблюдений с помощью обеих моделей.
ttlabels = predict(TTMdl,feat); illables = predict(IncrementalMdl,feat); sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
1
Обе модели предсказывают те же метки для каждого наблюдения.
В этом примере показано, как применить затраты misclassification для предсказания метки на входящих фрагментах данных при поддержании сбалансированного misclassification, стоившего за обучение.
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity n = numel(actid); rng(10); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Создайте наивную модель классификации Бейеса для пошагового обучения; задайте имена классов. Подготовьте его к predict
подбирая модель к первым 10 наблюдениям.
Mdl = incrementalClassificationNaiveBayes(ClassNames=unique(Y)); initobs = 10; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs)); canPredict = size(Mdl.DistributionParameters,1) == numel(Mdl.ClassNames)
canPredict = logical
1
Рассмотрите сильно наложение штрафа на модель для "рабочей" неправильной классификации (класса 4). Создайте матрицу стоимости, которая применяет 100 раз штраф за неправильную классификацию выполнения по сравнению с неправильной классификацией любого другого класса. Строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу.
k = numel(Mdl.ClassNames);
Cost = ones(k) - eye(k);
Cost(4,:) = Cost(4,:)*100; % Penalty for misclassifying "running"
Cost
Cost = 5×5
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
100 100 100 0 100
1 1 1 1 0
Симулируйте поток данных и выполните следующие действия с каждым входящим фрагментом 100 наблюдений.
Вызовите predict
предсказать метки для каждого наблюдения во входящем фрагменте данных.
Вызовите predict
снова, но задайте затраты misclassification при помощи Cost
аргумент.
Вызовите fit
подбирать модель к входящему фрагменту. Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
numObsPerChunk = 100; nchunk = ceil((n - initobs)/numObsPerChunk); labels = zeros(n,1); cslabels = zeros(n,1); cst = zeros(n,5); cscst = zeros(n,5); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [labels(idx),~,cst(idx,:)] = predict(Mdl,X(idx,:)); [cslabels(idx),~,cscst(idx,:)] = predict(Mdl,X(idx,:),Cost=Cost); Mdl = fit(Mdl,X(idx,:),Y(idx)); end labels = labels((initobs + 1):end); cslabels = cslabels((initobs + 1):end);
Сравните предсказанные распределения класса между методами предсказания путем графического вывода гистограмм.
figure; histogram(labels); hold on histogram(cslabels); legend(["Default-cost prediction" "Cost-sensitive prediction"])
Поскольку чувствительный к стоимости метод предсказания штрафует класс 4 неправильной классификации так сильно, больше предсказаний в результат класса 4 по сравнению с методом предсказания, который использует значение по умолчанию, сбалансированную стоимость.
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity n = numel(actid); rng(10); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Создайте наивную модель классификации Бейеса для пошагового обучения; задайте имена классов. Подготовьте его к predict
подбирая модель к первым 10 наблюдениям.
Mdl = incrementalClassificationNaiveBayes('ClassNames',unique(Y));
initobs = 10;
Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
canPredict = size(Mdl.DistributionParameters,1) == numel(Mdl.ClassNames)
canPredict = logical
1
Mdl
incrementalClassificationNaiveBayes
модель. Все его свойства только для чтения. Модель сконфигурирована, чтобы сгенерировать предсказания.
Симулируйте поток данных и выполните следующие действия с каждым входящим фрагментом 100 наблюдений.
Вызовите predict
вычислить апостериорные вероятности класса для каждого наблюдения во входящем фрагменте данных.
Рассмотрите инкрементно измерение, как хорошо модель предсказывает, танцует ли предмет (Y, 5). Можно выполнить это путем вычисления AUC кривой ROC, созданной путем передачи, для каждого наблюдения во фрагменте, различии между апостериорной вероятностью класса 5 и максимальной апостериорной вероятностью среди других классов к perfcurve
.
Вызовите fit
подбирать модель к входящему фрагменту. Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk) - 1; Posterior = zeros(nchunk,numel(Mdl.ClassNames)); auc = zeros(nchunk,1); classauc = 5; % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [~,Posterior(idx,:)] = predict(Mdl,X(idx,:)); diffscore = Posterior(idx,classauc) - max(Posterior(idx,setdiff(Mdl.ClassNames,classauc)),[],2); [~,~,~,auc(j)] = perfcurve(Y(idx),diffscore,Mdl.ClassNames(classauc)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
incrementalClassificationNaiveBayes
объект модели, обученный на всех данных в потоке.
Постройте AUC на входящих фрагментах данных.
plot(auc) ylabel('AUC') xlabel('Iteration')
AUC предполагает, что классификатор правильно предсказывает танцующие предметы хорошо во время пошагового обучения.
Mdl
— Наивная Байесова модель классификации для пошагового обученияincrementalClassificationNaiveBayes
объект моделиНаивная Байесова модель классификации для пошагового обучения в виде incrementalClassificationNaiveBayes
объект модели. Можно создать Mdl
непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения использование incrementalLearner
функция. Для получения дополнительной информации смотрите соответствующую страницу с описанием.
Необходимо сконфигурировать Mdl
предсказать метки для пакета наблюдений.
Если Mdl
конвертированная, традиционно обученная модель, можно предсказать метки без любых модификаций.
В противном случае, Mdl.DistributionParameters
должна быть матрица ячейки с Mdl.NumPredictors
> 0 столбцов и по крайней мере одна строка, где каждая строка соответствует каждому имени класса в Mdl.ClassNames
.
X
— Пакет данных о предиктореПакет данных о предикторе, для которых можно предсказать метки в виде n-by-Mdl.NumPredictors
матрица с плавающей точкой.
Продолжительность наблюдения маркирует Y
и количество наблюдений в X
должно быть равным; Y (
метка наблюдения j (строка или столбец) в j
)X
.
Типы данных: single
| double
Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN
, где Name
имя аргумента и Value
соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.
Cost=[0 2;1 0]
атрибуты удваивают штраф за неправильную классификацию наблюдений с истинным классом Mdl.ClassNames(1)
, чем для неправильной классификации наблюдений с истинным классом Mdl.ClassNames(2)
.Cost
— Стоимость неправильной классификации наблюденияMdl.Cost
(значение по умолчанию) | квадратная матрица | массив структурСтоимость неправильной классификации наблюдения в виде значения в таблице, где c является количеством классов в Mdl.ClassNames
. Заданное значение заменяет значение Mdl.Cost
.
Значение | Описание |
---|---|
c-by-c числовая матрица |
|
Массив структур | Массив структур, имеющий два поля:
|
Пример: Cost=struct('ClassNames',Mdl.ClassNames,'ClassificationCosts',[0 2; 1 0])
Типы данных: single
| double
| struct
Prior
— Предшествующие вероятности классаMdl.Prior
(значение по умолчанию) | числовой векторПредшествующие вероятности класса в виде значения в этом числовом векторе. Prior
имеет ту же длину как количество классов в Mdl.ClassNames
, и порядок элементов соответствует порядку класса в Mdl.ClassNames
. predict
нормирует вектор так, чтобы сумма результата равнялась 1.
Заданное значение заменяет значение Mdl.Prior
.
Типы данных: single
| double
ScoreTransform
— Выиграйте функцию преобразованияMdl.ScoreTransform
(значение по умолчанию) | строковый скаляр | вектор символовВыиграйте функцию преобразования описание, как функции пошагового обучения преобразовывают необработанные значения отклика в виде вектора символов, строкового скаляра или указателя на функцию. Заданное значение заменяет значение Mdl.ScoreTransform
.
Эта таблица описывает доступные встроенные функции для преобразования счета.
Значение | Описание |
---|---|
"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 |
Типы данных: char |
string
label
— Предсказанные ответыПредсказанные ответы (или метки), возвращенный как категориальное или символьный массив; с плавающей точкой, логический, или вектор строки; или массив ячеек из символьных векторов со строками n. n является количеством наблюдений в X
, и метка (
предсказанный ответ для наблюдения j
)
. j
label
имеет совпадающий тип данных как имена классов, сохраненные в Mdl.ClassNames
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Posterior
— Апостериорные вероятности классаАпостериорные вероятности класса, возвращенные как n-by-2 матрица с плавающей точкой. Следующий (
апостериорная вероятность то наблюдение j
K
)
находится в классе j
. k
Mdl.ClassNames
задает порядок классов.
Cost
— Ожидаемые затраты misclassificationОжидаемые затраты misclassification, возвращенные как n-by-numel(Mdl.ClassNames)
матрица с плавающей точкой.
Стойте (
ожидаемая misclassification стоимость наблюдения в строке j
K
)
из j
X
предсказанный в класс
(k
Mdl. ClassNames (
).k
)
misclassification cost является относительной серьезностью классификатора, маркирующего наблюдение в неправильный класс.
Существует два типа затрат misclassification: верный и ожидаемый. Позвольте K быть количеством классов.
True misclassification cost — K-by-K матрица, где элемент (i, j) указывает на misclassification стоимость предсказания наблюдения в класс j, если его истинным классом является i. Программное обеспечение хранит стоимость misclassification в свойстве Mdl.Cost
, и использование это в расчетах. По умолчанию, Mdl.Cost(i,j)
= 1, если i
≠ j
, и Mdl.Cost(i,j)
= 0, если i
= j
. Другими словами, стоимостью является 0
для правильной классификации и 1
для любой неправильной классификации.
Expected misclassification cost — K - размерный вектор, где элемент k является взвешенным средним misclassification стоимость классификации наблюдения в класс k, взвешенный апостериорными вероятностями класса.
Другими словами, программное обеспечение классифицирует наблюдения к классу, соответствующему с самой низкой ожидаемой стоимостью misclassification.
posterior probability является вероятностью, что наблюдение принадлежит конкретного класса, учитывая данные.
Для наивного Бейеса апостериорная вероятность, что классификацией является k для заданного наблюдения (x 1..., xP)
где:
условная объединенная плотность предикторов, учитывая, они находятся в классе k. Mdl.DistributionNames
хранит имена распределения предикторов.
π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior
хранит предшествующее распределение.
объединенная плотность предикторов. Классы дискретны, таким образом,
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.