Прогнозировать ответы для новых наблюдений из наивной модели классификации Байеса для инкрементного обучения
[ также возвращает задние вероятности (label,Posterior,Cost] = predict(Mdl,X)Posterior) и прогнозируемые (ожидаемые) затраты на неправильную классификацию (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
Обе модели предсказывают одинаковые метки для каждого наблюдения.
Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные.
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.
Примечание
predict поддерживает только входные данные предсказателя с плавающей запятой. Если входная модель Mdl представляет преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.
Типы данных: single | double
label - Прогнозируемые ответыПрогнозируемые ответы (или метки), возвращаемые в виде категориального или символьного массива; вектор с плавающей запятой, логический или строковый вектор; или массив ячеек символьных векторов с n строками. n - количество наблюдений в X, и label( - прогнозируемый отклик для наблюдения j). j
label имеет тот же тип данных, что и имена классов, хранящиеся в Mdl.ClassNames. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Posterior - Апостериорные вероятности классаАпостериорные вероятности класса, возвращаемые в виде матрицы с плавающей запятой n-by-2. Posterior( - задняя вероятность того, что наблюдение j,k) находится в классе j. kMdl.ClassNames определяет порядок классов.
Cost - Ожидаемые затраты на неправильную классификациюОжидаемые затраты на неправильную классификацию, возвращенные как n-by-numel(Mdl.ClassNames) матрица с плавающей запятой.
Cost( является ожидаемой стоимостью неправильной классификации наблюдения в строке j,k) из jX спрогнозировано в класс (kMdl.ClassNames().k)
Стоимость неправильной классификации - это относительная серьезность классификатора, маркирующего наблюдение в неправильный класс.
Существует два типа затрат на неправильную классификацию: истинные и ожидаемые. Пусть K - число классов.
Истинная стоимость неправильной классификации - матрица K-by-K, где элемент (i, j) указывает стоимость неправильной классификации предсказания наблюдения в класс j, если его истинный класс равен i. Программное обеспечение сохраняет стоимость неправильной классификации в свойствеMdl.Costи использует его в вычислениях. По умолчанию Mdl.Cost(i,j) = 1, если i ≠ j, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимость составляет 0 для правильной классификации и 1 для любой неправильной классификации.
Ожидаемая стоимость неправильной классификации - K-мерный вектор, где элемент k - средневзвешенная стоимость неправильной классификации при классификации наблюдения по классу k, взвешенная по апостериорным вероятностям класса.
Costjk.
Другими словами, программное обеспечение классифицирует наблюдения по классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.
Апостериорная вероятность - вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.
Для наивного Байеса апостериорная вероятность того, что классификация равна k для данного наблюдения (x1,...,xP), равна
k) P (X1,..., XP),
где:
= k) - условная плотность соединения предикторов при условии, что они находятся в классе k.Mdl.DistributionNames сохраняет имена распределения предикторов.
δ (Y = k) - класс, предшествующий распределению вероятности .Mdl.Prior сохраняет предыдущее распределение.
) - совместная плотность предикторов. Классы дискретны, поэтому δ (Y = k).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.