Предскажите метки с помощью наивной модели классификации Бейеса
label = predict(Mdl,X)
[label,Posterior,Cost]
= predict(Mdl,X)
[
также возвращается:label
,Posterior
,Cost
]
= predict(Mdl
,X
)
Матрица апостериорных вероятностей (Posterior
), указывающий на вероятность, что метка прибывает из конкретного класса.
Матрица misclassification стоит (Cost
). Для каждого наблюдения в X
предсказанная метка класса соответствует минимальным ожидаемым затратам классификации среди всех классов.
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
.
метка
Предсказанные метки классаПредсказанные метки класса, возвращенные как категориальный вектор, символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.
метка:
Posterior
— Апостериорные вероятности классаАпостериорные вероятности класса, возвращенные как числовая матрица. Posterior
имеет строки, равные количеству строк X
и столбцов, равных количеству отличных классов в данных тренировки (size(Mdl.ClassNames,1)
).
Posterior(j,k)
является предсказанной апостериорной вероятностью класса k
(т.е. в классе Mdl.ClassNames(k)
), учитывая наблюдение в строке j
X
.
Типы данных: double
Cost
— Ожидаемые затраты misclassificationОжидаемые затраты misclassification, возвращенные как числовая матрица. Cost
имеет строки, равные количеству строк X
и столбцов, равных количеству отличных классов в данных тренировки (size(Mdl.ClassNames,1)
).
Cost(j,k)
является ожидаемой misclassification стоимостью наблюдения в строке j
X
, предсказываемого в класс k
(т.е. в классе Mdl.ClassNames(k)
).
Загрузите ирисовый набор данных Фишера.
load fisheriris X = meas; % Predictors Y = species; % Response rng(1);
Обучите наивный классификатор Байеса и задайте к затяжке 30% данных для тестовой выборки. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку.
CVMdl = fitcnb(X,Y,'Holdout',0.30,... 'ClassNames',{'setosa','versicolor','virginica'}); CMdl = CVMdl.Trained{1}; % Extract trained, compact classifier testIdx = test(CVMdl.Partition); % Extract the test indices XTest = X(testIdx,:); YTest = Y(testIdx);
CVMdl
является классификатором ClassificationPartitionedModel
. Это содержит свойство Trained
, которое является массивом ячеек 1 на 1, содержащим классификатор CompactClassificationNaiveBayes
, что программное обеспечение обучило использование набора обучающих данных.
Маркируйте тестовые демонстрационные наблюдения. Отобразите результаты для случайного набора 10 наблюдений в тестовой выборке.
idx = randsample(sum(testIdx),10); label = predict(CMdl,XTest); table(YTest(idx),label(idx),'VariableNames',... {'TrueLabel','PredictedLabel'})
ans=10×2 table
TrueLabel PredictedLabel
____________ ______________
'setosa' 'setosa'
'versicolor' 'versicolor'
'setosa' 'setosa'
'virginica' 'virginica'
'versicolor' 'versicolor'
'setosa' 'setosa'
'virginica' 'virginica'
'virginica' 'virginica'
'setosa' 'setosa'
'setosa' 'setosa'
Цель классификации состоит в том, чтобы оценить апостериорные вероятности новых наблюдений с помощью обученного алгоритма. Много приложений обучают алгоритмы на больших наборах данных, которые могут использовать ресурсы, которые лучше используются в другом месте. Этот пример показывает, как эффективно оценить апостериорные вероятности новых наблюдений с помощью Наивного классификатора Байеса.
Загрузите ирисовый набор данных Фишера.
load fisheriris X = meas; % Predictors Y = species; % Response rng(1);
Разделите набор данных в два набора: один в наборе обучающих данных и другом новые ненаблюдаемые данные. Зарезервируйте 10 наблюдений для нового набора данных.
n = size(X,1); newInds = randsample(n,10); inds = ~ismember(1:n,newInds); XNew = X(newInds,:); YNew = Y(newInds);
Обучите наивный классификатор Байеса. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку. Сохраните память путем сокращения размера обученного классификатора SVM.
Mdl = fitcnb(X(inds,:),Y(inds),... 'ClassNames',{'setosa','versicolor','virginica'}); CMdl = compact(Mdl); whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 5346 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 12671 ClassificationNaiveBayes
Классификатор CompactClassificationNaiveBayes
(CMdl
) использует меньше пространства, чем классификатор ClassificationNaiveBayes
(Mdl
) потому что последние хранилища данные.
Предскажите метки, апостериорные вероятности и ожидаемый класс misclassification затраты. Поскольку истинные метки доступны, сравнивают их с предсказанными метками.
CMdl.ClassNames
ans = 3x1 cell array
{'setosa' }
{'versicolor'}
{'virginica' }
[labels,PostProbs,MisClassCost] = predict(CMdl,XNew); table(YNew,labels,PostProbs,'VariableNames',... {'TrueLabels','PredictedLabels',... 'PosteriorProbabilities'})
ans=10×3 table
TrueLabels PredictedLabels PosteriorProbabilities
____________ _______________ _________________________________________
'setosa' 'setosa' 1 4.1259e-16 1.1846e-23
'versicolor' 'versicolor' 1.0373e-60 0.99999 5.8053e-06
'virginica' 'virginica' 4.8708e-211 0.00085645 0.99914
'setosa' 'setosa' 1 1.4053e-19 2.2672e-26
'versicolor' 'versicolor' 2.9308e-75 0.99987 0.00012869
'setosa' 'setosa' 1 2.629e-18 4.4297e-25
'versicolor' 'versicolor' 1.4238e-67 0.99999 9.733e-06
'versicolor' 'versicolor' 2.0667e-110 0.94237 0.057625
'setosa' 'setosa' 1 4.3779e-19 3.5139e-26
'setosa' 'setosa' 1 1.1792e-17 2.2912e-24
MisClassCost
MisClassCost = 10×3
0.0000 1.0000 1.0000
1.0000 0.0000 1.0000
1.0000 0.9991 0.0009
0.0000 1.0000 1.0000
1.0000 0.0001 0.9999
0.0000 1.0000 1.0000
1.0000 0.0000 1.0000
1.0000 0.0576 0.9424
0.0000 1.0000 1.0000
0.0000 1.0000 1.0000
PostProbs
и MisClassCost
является 15
3
числовыми матрицами, где каждая строка соответствует новому наблюдению, и каждый столбец соответствует классу. Порядок столбцов соответствует порядку CMdl.ClassNames
.
Загрузите ирисовый набор данных Фишера. Обучите классификатор с помощью лепестковых длин и ширин.
load fisheriris
X = meas(:,3:4);
Y = species;
Обучите наивный классификатор Байеса. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку.
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(:)]);
Постройте области апостериорной вероятности и данные тренировки.
figure; % Plot posterior regions scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion); % Adjust color bar options h = colorbar; h.Ticks = [0 0.5 1]; h.TickLabels = {'setosa','versicolor','virginica'}; h.YLabel.String = 'Posterior'; h.YLabel.Position = [-0.5 0.5 0]; % Adjust color map options d = 1e-2; cmap = zeros(201,3); cmap(1:101,1) = 1:-d:0; cmap(1:201,2) = [0:d:1 1-d:-d:0]; cmap(101:201,3) = 0:d:1; colormap(cmap); % Plot data 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
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 класса является относительной частотой, которой верят, с которой наблюдения от того класса происходят в генеральной совокупности.
[1] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы статистического изучения, второго выпуска. Нью-Йорк: Спрингер, 2008.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Используйте saveCompactModel
, loadCompactModel
и codegen
, чтобы сгенерировать код для функции predict
. Сохраните обученную модель при помощи saveCompactModel
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadCompactModel
и вызывает функцию predict
. Затем используйте codegen
, чтобы сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода объекта |
X |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.