Классифицируйте наблюдения с помощью наивного классификатора Байеса
[ также возвращает апостериорную вероятность (label,Posterior,Cost]
= predict(Mdl,X)Posterior) и предсказанные (ожидаемые) затраты на неправильную классификацию (Cost), соответствующий наблюдениям (строкам) в Mdl.X. Для каждого наблюдения в X, предсказанная метка класса соответствует минимальным ожидаемым затратам классификации среди всех классов.
Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит четыре измерения лепестков для 150 ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris X = meas; Y = species; rng('default') % for reproducibility
Случайным образом разбейте наблюдения на набор обучающих данных и тестовый набор с расслоением, используя информацию о классе в Y. Укажите 30% -ная выборка удержания для проверки.
cv = cvpartition(Y,'HoldOut',0.30);Извлеките индексы обучения и тестирования.
trainInds = training(cv); testInds = test(cv);
Укажите наборы обучающих и тестовых данных.
XTrain = X(trainInds,:); YTrain = Y(trainInds); XTest = X(testInds,:); YTest = Y(testInds);
Обучите наивный классификатор Байеса с помощью предикторов XTrain и метки классов YTrain. Рекомендуемая практика состоит в том, чтобы задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.
Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'})
Mdl =
ClassificationNaiveBayes
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
NumObservations: 105
DistributionNames: {'normal' 'normal' 'normal' 'normal'}
DistributionParameters: {3x4 cell}
Properties, Methods
Mdl является обученным ClassificationNaiveBayes классификатор.
Спрогнозируйте метки тестовых выборок.
idx = randsample(sum(testInds),10); label = predict(Mdl,XTest);
Отобразите результаты для случайного набора из 10 наблюдений в тестовой выборке.
table(YTest(idx),label(idx),'VariableNames',... {'TrueLabel','PredictedLabel'})
ans=10×2 table
TrueLabel PredictedLabel
______________ ______________
{'virginica' } {'virginica' }
{'versicolor'} {'versicolor'}
{'versicolor'} {'versicolor'}
{'virginica' } {'virginica' }
{'setosa' } {'setosa' }
{'virginica' } {'virginica' }
{'setosa' } {'setosa' }
{'versicolor'} {'versicolor'}
{'versicolor'} {'virginica' }
{'versicolor'} {'versicolor'}
Создайте график неточностей из истинных меток YTest и предсказанные метки label.
cm = confusionchart(YTest,label);

Оцените апостериорные вероятности и затраты на неправильную классификацию для новых наблюдений с помощью наивного классификатора Байеса. Классификация новых наблюдений с помощью предварительно обученного классификатора эффективности памяти.
Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит четыре измерения лепестков для 150 ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris X = meas; Y = species; rng('default') % for reproducibility
Разделите набор данных на два набора: один содержит набор обучающих данных, а другой содержит новые, незащищенные данные. Резервируйте 10 наблюдений для нового набора данных.
n = size(X,1); newInds = randsample(n,10); inds = ~ismember(1:n,newInds); XNew = X(newInds,:); YNew = Y(newInds);
Обучите наивный классификатор Байеса с помощью предикторов X и метки классов Y. Рекомендуемая практика состоит в том, чтобы задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.
Mdl = fitcnb(X(inds,:),Y(inds),... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl является обученным ClassificationNaiveBayes классификатор.
Сохраните память путем уменьшения размера обученного наивного классификатора Байеса.
CMdl = compact(Mdl); whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 5406 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 12707 ClassificationNaiveBayes
CMdl является CompactClassificationNaiveBayes классификатор. Он использует меньше памяти, чем Mdl потому что Mdl сохраняет данные.
Отображение имен классов CMdl использование записи через точку.
CMdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
Спрогнозируйте метки. Оцените апостериорные вероятности и ожидаемые классы затраты на неправильную классификацию.
[labels,PostProbs,MisClassCost] = predict(CMdl,XNew);
Сравните истинные метки с предсказанными метками.
table(YNew,labels,PostProbs,MisClassCost,'VariableNames',... {'TrueLabels','PredictedLabels',... 'PosteriorProbabilities','MisclassificationCosts'})
ans=10×4 table
TrueLabels PredictedLabels PosteriorProbabilities MisclassificationCosts
______________ _______________ _________________________________________ ______________________________________
{'virginica' } {'virginica' } 4.0832e-268 4.6422e-09 1 1 1 4.6422e-09
{'setosa' } {'setosa' } 1 3.0706e-18 4.6719e-25 3.0706e-18 1 1
{'virginica' } {'virginica' } 1.0007e-246 5.8758e-10 1 1 1 5.8758e-10
{'versicolor'} {'versicolor'} 1.2022e-61 0.99995 4.9859e-05 1 4.9859e-05 0.99995
{'virginica' } {'virginica' } 2.687e-226 1.7905e-08 1 1 1 1.7905e-08
{'versicolor'} {'versicolor'} 3.3431e-76 0.99971 0.00028983 1 0.00028983 0.99971
{'virginica' } {'virginica' } 4.05e-166 0.0028527 0.99715 1 0.99715 0.0028527
{'setosa' } {'setosa' } 1 1.1272e-14 2.0308e-23 1.1272e-14 1 1
{'virginica' } {'virginica' } 1.3292e-228 8.3604e-10 1 1 1 8.3604e-10
{'setosa' } {'setosa' } 1 4.5023e-17 2.1724e-24 4.5023e-17 1 1
PostProbs и MisClassCost являются 10-by- 3 числовые матрицы, где каждая строка соответствует новому наблюдению, а каждый столбец соответствует классу. Порядок столбцов соответствует порядку CMdl.ClassNames.
Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит четыре измерения лепестков для 150 ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris
X = meas(:,3:4);
Y = species;Обучите наивный классификатор Байеса с помощью предикторов X и метки классов Y. Рекомендуемая практика состоит в том, чтобы задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.
Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'});
Mdl является обученным ClassificationNaiveBayes классификатор.
Задайте сетку значений в наблюдаемом пространстве предикторов.
xMax = max(X); xMin = min(X); h = 0.01; [x1Grid,x2Grid] = meshgrid(xMin(1):h:xMax(1),xMin(2):h:xMax(2));
Спрогнозируйте апостериорные вероятности для каждого образца в сетке.
[~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Постройте график апостериорных областей вероятностей и обучающих данных.
h = scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion); h.MarkerEdgeAlpha = 0.3;
Постройте график данных.
hold on gh = gscatter(X(:,1),X(:,2),Y,'k','dx*'); title 'Iris Petal Measurements and Posterior Probabilities'; xlabel 'Petal length (cm)'; ylabel 'Petal width (cm)'; axis tight legend(gh,'Location','Best') hold off

Mdl - Наивная классификационная модель БайесаClassificationNaiveBayes объект модели | CompactClassificationNaiveBayes объект моделиНаивная классификационная модель Байеса, заданная как ClassificationNaiveBayesобъект модели объект модели, возвращенный fitcnb или compact, соответственно.
X - Данные предиктора, которые будут классифицированыДанные предиктора, которые будут классифицированы, заданные как числовая матрица или таблица.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные, составляющие столбцы X должен иметь тот же порядок, что и переменные предиктора, которые обучали Mdl.
Если вы обучаете Mdl использование таблицы (для примера, Tbl), затем X может быть числовой матрицей, если Tbl содержит только числовые переменные предиктора. Для лечения числовых предикторов в Tbl как категориальный во время обучения, идентифицируйте категориальные предикторы, используя 'CategoricalPredictors' Аргумент пары "имя-значение" из fitcnb. Если Tbl содержит неоднородные переменные предиктора (для примера, числовых и категориальных типов данных) и X является числовой матрицей, тогда predict выдает ошибку.
Для таблицы:
predict не поддерживает многополюсные переменные или массивы ячеек, отличные от массивов ячеек векторов символов.
Если вы обучаете Mdl использование таблицы (для примера, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и обученные переменные Mdl (хранится в Mdl.PredictorNames). Однако порядок столбцов X не должен соответствовать порядку столбцов Tbl. Tbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.
Если вы обучаете Mdl используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames должен быть таким же, как и соответствующий предиктор, имена переменных в X. Чтобы задать имена предикторов во время обучения, используйте 'PredictorNames'аргумент в виде пары имя-значение' fitcnb. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.
Типы данных: table | double | single
Примечания:
Если Mdl.DistributionNames является 'mn', затем программное обеспечение возвращается NaNs, соответствующий строкам X которые содержат по крайней мере один NaN.
Если Mdl.DistributionNames не 'mn', затем программное обеспечение игнорирует NaN значения при оценке затрат на неправильную классификацию и апостериорных вероятностей. В частности, программа вычисляет условную плотность предикторов, заданных классом, путем исключения факторов, соответствующих отсутствующим значениям предиктора.
Для распределения предиктора, заданного как 'mvmn', если X содержит уровни, которые не представлены в обучающих данных (то есть не на Mdl.CategoricalLevels для этого предиктора), тогда условная плотность предикторов, заданных классом, равна 0. Для этих наблюдений программное обеспечение возвращает соответствующее значение Posterior как NaN. Программа определяет метку класса для таких наблюдений, используя предшествующую вероятность класса, сохраненную в Mdl.Prior.
label - Предсказанные метки классовПредсказанные метки классов, возвращенные как категориальный вектор, символьный массив, логический или числовой вектор или массив ячеек из векторов символов.
Предсказанные метки классов имеют следующее:
Совпадающий тип данных, что и наблюдаемые метки классов (Mdl.Y). (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Длина, равная количеству строк Mdl.X.
Класс, дающий самые низкие ожидаемые затраты на неправильную классификацию (Cost).
Posterior - Апостериорная вероятность классаАпостериорная вероятность класса, возвращенная как числовая матрица. Posterior имеет строки, равные количеству строк Mdl.X и столбцы, равные количеству отдельных классов в обучающих данных (size(Mdl.ClassNames,1)).
Posterior(j,k) - предсказанная апостериорная вероятность класса k (в классе Mdl.ClassNames(k)) учитывая наблюдение в строке j от Mdl.X.
Cost - Ожидаемые расходы на неправильную классификациюОжидаемые затраты на неправильную классификацию, возвращенные как числовая матрица. Cost имеет строки, равные количеству строк Mdl.X и столбцы, равные количеству отдельных классов в обучающих данных (size(Mdl.ClassNames,1)).
Cost(j,k) - ожидаемая стоимость неправильной классификации наблюдения в строке j от Mdl.X предсказано в k классов (в классе Mdl.ClassNames(k)).
А misclassification cost - это относительная серьезность классификатора, маркирующего наблюдение не в тот класс.
Существует два вида расходов на неправильную классификацию: истинные и ожидаемые. Позвольте K быть количеством классов.
True misclassification cost - A 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 для любой неправильной классификации.
Expected misclassification cost - K -мерный вектор, где k элемента - средневзвешенные затраты на неправильную классификацию классификации наблюдений в k классов, взвешенные апостериорными вероятностями классов.
Другими словами, программное обеспечение классифицирует наблюдения к классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.
Это posterior probability вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.
Для наивного Байеса апостериорная вероятность того, что классификация k для заданного наблюдения (x 1,..., xP), является
где:
- условная плотность соединений предикторов, заданная ими в k классов. Mdl.DistributionNames сохраняет имена распределения предикторов.
π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior сохраняет предыдущее распределение.
- плотность соединений предикторов. Классы дискретны, поэтому
prior probability класса является предполагаемой относительной частотой, с которой наблюдения из этого класса происходят в населении.
Эта функция полностью поддерживает длинные массивы. Вы можете использовать модели, обученные на памяти или высоких данных с этой функцией.
Для получения дополнительной информации см. Раздел «Длинные массивы»
Указания и ограничения по применению:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (MATLAB Coder), чтобы сгенерировать код для predict функция. Сохраните обученную модель при помощи saveLearnerForCoder. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder и вызывает predict функция. Затем используйте codegen чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать одноточный код C/C + + для предсказания, задайте аргумент имя-значение 'DataType','single' когда вы вызываете loadLearnerForCoder функция.
Эта таблица содержит примечания к аргументам predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Для указаний по применению и ограничений объекта модели, смотрите
Генерацию кода CompactClassificationNaiveBayes |
X |
|
Для получения дополнительной информации смотрите Введение в генерацию кода.
ClassificationNaiveBayes | CompactClassificationNaiveBayes | fitcnb | loss | resubPredict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.