Предскажите метки с помощью наивной модели классификации Бейеса
[
также возвращается:label
,Posterior
,Cost
]
= predict(Mdl
,X
)
Матрица A апостериорных вероятностей (Posterior
) указание на вероятность, что метка прибывает из конкретного класса.
Матрица A затрат 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
.
label
— Предсказанные метки классаПредсказанные метки класса, возвращенные как категориальный вектор, символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.
label
:
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 5238 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 12539 ClassificationNaiveBayes
CompactClassificationNaiveBayes
классификатор (CMdl
) использует меньше пространства, чем ClassificationNaiveBayes
классификатор (Mdl
) потому что последние хранилища данные.
Предскажите метки, апостериорные вероятности и ожидаемый класс misclassification затраты. Поскольку истинные метки доступны, сравнивают их с предсказанными метками.
CMdl.ClassNames
ans = 3x1 cell
{'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).
Указания и ограничения по применению:
Используйте saveLearnerForCoder
, loadLearnerForCoder
, и codegen
сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.