Классифицируйте наблюдения с помощью наивного классификатора Байеса
[ также возвращает Апостериорную вероятность (label,Posterior,Cost]
= predict(Mdl,X)Posterior) и предсказанный (ожидал) Стоимость Misclassification (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);

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