Классификационное ребро для наивного классификатора Байеса
возвращает классификационное ребро (e
= edge(Mdl
,tbl
,ResponseVarName
)e
) для наивного классификатора Байеса Mdl
использование данных предиктора в таблице tbl
и метки классов в tbl.ResponseVarName
.
Классификационное ребро (e
) - скалярное значение, которое представляет средневзвешенное значение классификационных полей.
Оцените ребро тестовой выборки (среднее значение запаса классификации) наивного классификатора Байеса. Ребро тестовой выборки является средним различием тестовой выборки между оцененной апостериорной вероятностью для предсказанного класса и апостериорной вероятностью для класса со следующей самой низкой апостериорной вероятностью.
Загрузите 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
классификатор.
Оцените ребро тестовой выборки.
e = edge(Mdl,XTest,YTest)
e = 0.8658
Маржинальное среднее значение приблизительно 0.87
. Этот результат предполагает, что классификатор помечает предикторы с высоким доверием.
Оцените взвешенное ребро тестовой выборки (среднее значение взвешенного запаса) наивного классификатора Байеса. Ребро тестовой выборки является средним различием тестовой выборки между оцененной апостериорной вероятностью для предсказанного класса и апостериорной вероятностью для класса со следующей самой низкой апостериорной вероятностью. Взвешенное ребро выборки оценивает среднее значение запаса, когда программа присваивает вес каждому наблюдению.
Загрузите fisheriris
набор данных. Создание X
как числовая матрица, которая содержит четыре измерения лепестков для 150 ирисов. Создание Y
как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris X = meas; Y = species; rng('default') % for reproducibility
Предположим, что некоторые измерения имеют более низкое качество, потому что они были измерены по старой технологии. Чтобы симулировать этот эффект, добавьте шум к случайному подмножеству из 20 измерений.
idx = randperm(size(X,1),20); X(idx,:) = X(idx,:) + 2*randn(20,size(X,2));
Случайным образом разбейте наблюдения на набор обучающих данных и тестовый набор с расслоением, используя информацию о классе в 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
классификатор.
Оцените ребро тестовой выборки.
e = edge(Mdl,XTest,YTest)
e = 0.5920
Средний запас составляет примерно 0,59.
Один из способов уменьшить эффект шумных измерений - назначить им меньше веса, чем другим наблюдениям. Задайте вектор веса, который дает лучшие наблюдения качества в два раза больше, чем другие наблюдения.
n = size(X,1); weights = ones(size(X,1),1); weights(idx) = 0.5; weightsTrain = weights(trainInds); weightsTest = weights(testInds);
Обучите наивный классификатор Байеса с помощью предикторов XTrain
, метки классов YTrain
, и веса weightsTrain
.
Mdl_W = fitcnb(XTrain,YTrain,'Weights',weightsTrain,... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl_W
является обученным ClassificationNaiveBayes
классификатор.
Оцените взвешенное ребро тестовой выборки с помощью схемы взвешивания.
e_W = edge(Mdl_W,XTest,YTest,'Weights',weightsTest)
e_W = 0.6816
Средневзвешенная маржа составляет приблизительно 0,69. Этот результат указывает, что в среднем взвешенный классификатор помечает предикторы с более высоким доверием, чем шум, поврежденный предикторами.
Классификатор ребра измеряет среднее значение полей классификатора. Один из способов выполнить выбор признаков - сравнить ребра тестовой выборки из нескольких моделей. Исходя исключительно из этого критерия, классификатор с самым высоким ребром является лучшим классификатором.
Загрузите ionosphere
набор данных. Удалите первые два предиктора устойчивости.
load ionosphere X = X(:,3:end); 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);
Задайте эти два набора обучающих данных:
fullXTrain
содержит все предикторы.
partXTrain
содержит 10 наиболее важных предикторов.
fullXTrain = XTrain; idx = fscmrmr(XTrain,YTrain); partXTrain = XTrain(:,idx(1:10));
Обучите наивный классификатор Байеса для каждого набора предикторов.
fullMdl = fitcnb(fullXTrain,YTrain); partMdl = fitcnb(partXTrain,YTrain);
fullMdl
и partMdl
обучаются ClassificationNaiveBayes
классификаторы.
Оцените ребро тестовой выборки для каждого классификатора.
fullEdge = edge(fullMdl,XTest,YTest)
fullEdge = 0.5831
partEdge = edge(partMdl,XTest(:,idx(1:10)),YTest)
partEdge = 0.7593
Тестовое ребро выборки классификатора с использованием 10 наиболее важных предикторов больше.
Mdl
- Наивная классификационная модель БайесаClassificationNaiveBayes
объект модели | CompactClassificationNaiveBayes
объект моделиНаивная классификационная модель Байеса, заданная как ClassificationNaiveBayes
объект модели
объект модели, возвращенный fitcnb
или compact
, соответственно.
tbl
- Выборочные данныеВыборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка tbl
соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. tbl
должны содержать все предикторы, используемые для обучения Mdl
. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены. Опционально tbl
может содержать дополнительные столбцы для переменной отклика и весов наблюдений.
Если вы обучаете Mdl
используя выборочные данные, содержащуюся в таблице, затем входные данные для edge
также должно быть в таблице.
ResponseVarName
- Имя переменной откликаtbl
Имя переменной отклика, заданное как имя переменной в tbl
.
Вы должны задать ResponseVarName
как вектор символов или строковый скаляр. Для примера, если переменная отклика y
хранится как tbl.y
, затем укажите его следующим 'y'
. В противном случае программное обеспечение обрабатывает все столбцы tbl
, включая y
, как предикторы.
Если tbl
содержит переменную отклика, используемую для обучения Mdl
, тогда вам не нужно указывать ResponseVarName
.
Переменная отклика должна быть категориальными символьными или строковыми массивами, логическим или числовым вектором или массивом ячеек из векторов символов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char
| string
X
- Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка X
соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной (также известной как функция). Переменные в столбцах X
должно быть таким же, как переменные, которые обучили Mdl
классификатор.
Длина Y
и количество строк X
должно быть равным.
Типы данных: double
| single
Y
- Метки классовМетки класса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Y
должны иметь тот совпадающий тип данных, что и Mdl.ClassNames
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Длина Y
должно быть равно количеству строк tbl
или X
.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
Weights
- Веса наблюденийones(size(X,1),1)
(по умолчанию) | числовой вектор | имя переменной в tbl
Веса наблюдений, заданные как числовой вектор или имя переменной в tbl
. Программа взвешивает наблюдения в каждой строке X
или tbl
с соответствующими весами в Weights
.
Если вы задаете Weights
в виде числового вектора, затем размера Weights
должно быть равно количеству строк X
или tbl
.
Если вы задаете Weights
как имя переменной в tbl
, тогда имя должно быть вектором символов или строковым скаляром. Для примера, если веса сохранены как tbl.w
, затем задайте Weights
как 'w'
. В противном случае программное обеспечение обрабатывает все столбцы tbl
, включая tbl.w
, как предикторы.
Типы данных: double
| char
| string
Это classification edge - средневзвешенное значение классификационных полей.
Если вы поставляете веса, то программное обеспечение нормализует их, чтобы суммировать с предыдущей вероятностью их соответствующего класса. Программа использует нормированные веса, чтобы вычислить взвешенное среднее.
При выборе из нескольких классификаторов для выполнения задачи, такой как сечение функции, выберите классификатор, который приводит к наивысшему ребру.
classification margin для каждого наблюдения является различие между счетом для истинного класса и максимальным счетом для ложных классов. Маржи обеспечивают классификационную доверительную меру; среди нескольких классификаторов лучше те, которые дают большие маржи (по одной шкале).
Это posterior probability вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.
Для наивного Байеса апостериорная вероятность того, что классификация k для заданного наблюдения (x 1,..., xP), является
где:
- условная плотность соединений предикторов, заданная ими в k классов. Mdl.DistributionNames
сохраняет имена распределения предикторов.
π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior
сохраняет предыдущее распределение.
- плотность соединений предикторов. Классы дискретны, поэтому
prior probability класса является предполагаемой относительной частотой, с которой наблюдения из этого класса происходят в населении.
Наивная score Байеса является апостериорной вероятностью класса, учитывая наблюдение.
Эта функция полностью поддерживает длинные массивы. Для получения дополнительной информации см. Раздел «Длинные массивы»
ClassificationNaiveBayes
| CompactClassificationNaiveBayes
| fitcnb
| loss
| margin
| predict
| resubEdge
| resubLoss
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.