Классифицируйте наблюдения с помощью наивного классификатора Байеса
[
также возвращает Апостериорную вероятность (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 12731 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
не должен соответствовать порядку следования столбцов Tbl
tbl
и X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Если вы обучаете Mdl
с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames
должен совпасть с соответствующими именами переменного предиктора в X
. Чтобы задать имена предиктора во время обучения, используйте 'PredictorNames
'аргумент пары "имя-значение" fitcnb
. Все переменные предикторы в X
должны быть числовые векторы. X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Типы данных: table
| double
| single
Примечания:
Если Mdl.DistributionNames
'mn'
, затем программное обеспечение возвращает NaN
s соответствие строкам 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++ с одинарной точностью для predict
, задайте аргумент 'DataType','single'
значения имени когда вы вызываете
loadLearnerForCoder
функция.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationNaiveBayes
| CompactClassificationNaiveBayes
| loss
| resubPredict
| fitcnb
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.