Классифицируйте наблюдения с помощью наивного классификатора Байеса
[
также возвращает апостериорную вероятность (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
-by- 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
объект модели
объект модели, возвращенный 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
значения при оценке затрат на неправильную классификацию и апостериорных вероятностей. В частности, программа вычисляет условную плотность предикторов, заданных классом, путем исключения факторов, соответствующих отсутствующим значениям предиктора.
Для распределения предиктора, заданного как '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)
).
А misclassification cost - это относительная серьезность классификатора, маркирующего наблюдение не в тот класс.
Существует два вида расходов на неправильную классификацию: истинные и ожидаемые. Позвольте K быть количеством классов.
True misclassification cost - A 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
для любой неправильной классификации.
Expected misclassification cost - K -мерный вектор, где k элемента - средневзвешенные затраты на неправильную классификацию классификации наблюдений в k классов, взвешенные апостериорными вероятностями классов.
Другими словами, программное обеспечение классифицирует наблюдения к классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.
Это 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 | Для указаний по применению и ограничений объекта модели, смотрите
Генерацию кода CompactClassificationNaiveBayes |
X |
|
Для получения дополнительной информации смотрите Введение в генерацию кода.
ClassificationNaiveBayes
| CompactClassificationNaiveBayes
| fitcnb
| loss
| resubPredict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.