Классифицировать наблюдения с помощью наивного классификатора Байеса
[ также возвращает заднюю вероятность (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около-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 не обязательно соответствовать порядку столбцов 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)).
Стоимость неправильной классификации - это относительная серьезность классификатора, маркирующего наблюдение в неправильный класс.
Существует два типа затрат на неправильную классификацию: истинные и ожидаемые. Пусть 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).
Предшествующая вероятность класса - предполагаемая относительная частота, с которой наблюдения из этого класса происходят в популяции.
Эта функция полностью поддерживает массивы tall. С помощью этой функции можно использовать модели, обученные работе с данными в памяти или с данными высокого уровня.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для predict функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen для создания кода для функции точки входа.
Чтобы создать код C/C + + с одной точностью для прогнозирования, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
X |
|
Дополнительные сведения см. в разделе Введение в создание кода.
ClassificationNaiveBayes | CompactClassificationNaiveBayes | fitcnb | loss | resubPredict
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.