Предскажите метки с помощью модели классификации дискриминантных анализов
[
также возвращается:label
,score
,cost
]
= predict(Mdl
,X
)
Матрица A баллов классификации (score
) указание на вероятность, что метка прибывает из конкретного класса. Для дискриминантного анализа баллы являются апостериорными вероятностями.
Матрица A ожидаемой стоимости классификации (cost
). Для каждого наблюдения в X
, предсказанная метка класса соответствует минимальной ожидаемой стоимости классификации среди всех классов.
Mdl
— Модель классификации дискриминантных анализовClassificationDiscriminant
объект модели | CompactClassificationDiscriminant
объект моделиМодель классификации дискриминантных анализов, заданная как ClassificationDiscriminant
или CompactClassificationDiscriminant
объект модели возвращен fitcdiscr
.
X
— Данные о предикторе, которые будут классифицированыДанные о предикторе, которые будут классифицированы, заданные как числовая матрица или таблица.
Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной. Все переменные предикторы в X
должны быть числовые векторы.
Для числовой матрицы, переменные, которые составляют столбцы X
должен иметь тот же порядок как переменные предикторы, которые обучили Mdl
.
Для таблицы:
predict
не поддерживает многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов.
Если вы обучили Mdl
с помощью таблицы (например, Tbl
), затем все переменные предикторы в X
должен иметь те же имена переменных и типы данных как те, которые обучили Mdl
(сохраненный в Mdl.PredictorNames
). Однако порядок следования столбцов X
не должен соответствовать порядку следования столбцов Tbl
tbl
и X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict
игнорирует их.
Если вы обучили Mdl
с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames
и соответствующий переменный предиктор называет в X
должно быть то же самое. Чтобы задать имена предиктора во время обучения, смотрите PredictorNames
аргумент пары "имя-значение" fitcdiscr
X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict
игнорирует их.
Типы данных: table
| double
| single
label
— Предсказанные метки классаПредсказанные метки класса, возвращенные как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.
label
:
score
— Предсказанные апостериорные вероятности классаПредсказанные апостериорные вероятности класса, возвращенные как числовая матрица размера N
- K
N
количество наблюдений (строки) в X
, и K
количество классов (в Mdl.ClassNames
). score(i,j)
апостериорная вероятность то наблюдение i
в X
имеет класс j
в Mdl.ClassNames
.
cost
— Ожидаемые затраты классификацииОжидаемые затраты классификации, возвращенные как матрица размера N
- K
N
количество наблюдений (строки) в X
, и K
количество классов (в Mdl.ClassNames
). cost(i,j)
стоимость классификации строки i
из X
как класс j
в Mdl.ClassNames
.
Загрузите ирисовый набор данных Фишера. Определите объем выборки.
load fisheriris
N = size(meas,1);
Разделите данные в наборы обучающих данных и наборы тестов. Протяните 10% данных для тестирования.
rng(1); % For reproducibility cvp = cvpartition(N,'Holdout',0.1); idxTrn = training(cvp); % Training set indices idxTest = test(cvp); % Test set indices
Храните обучающие данные в таблице.
tblTrn = array2table(meas(idxTrn,:)); tblTrn.Y = species(idxTrn);
Обучите модель дискриминантного анализа использование набора обучающих данных и опций по умолчанию.
Mdl = fitcdiscr(tblTrn,'Y');
Предскажите метки для набора тестов. Вы обучили Mdl
с помощью таблицы данных, но можно предсказать метки с помощью матрицы.
labels = predict(Mdl,meas(idxTest,:));
Создайте матрицу беспорядка для набора тестов.
confusionchart(species(idxTest),labels);
Mdl
неправильно классифицирует одну ирисовую диафрагму versicolor как virginica в наборе тестов.
Загрузите ирисовый набор данных Фишера. Рассмотрите обучение с помощью лепестковых длин и ширин только.
load fisheriris
X = meas(:,3:4);
Обучите квадратичную модель дискриминантного анализа использование целого набора данных.
Mdl = fitcdiscr(X,species,'DiscrimType','quadratic');
Задайте сетку значений на наблюдаемом пробеле предиктора. Предскажите апостериорные вероятности для каждого экземпляра в сетке.
xMax = max(X); xMin = min(X); d = 0.01; [x1Grid,x2Grid] = meshgrid(xMin(1):d:xMax(1),xMin(2):d:xMax(2)); [~,score] = predict(Mdl,[x1Grid(:),x2Grid(:)]); Mdl.ClassNames
ans = 3x1 cell array
{'setosa' }
{'versicolor'}
{'virginica' }
score
матрица апостериорных вероятностей класса. Столбцы соответствуют классам в Mdl.ClassNames
. Например, score(j,1)
апостериорная вероятность то наблюдение j
ирисовая диафрагма setosa.
Постройте апостериорную вероятность versicolor классификации для каждого наблюдения в сетке и отобразите обучающие данные на графике.
figure; contourf(x1Grid,x2Grid,reshape(score(:,2),size(x1Grid,1),size(x1Grid,2))); h = colorbar; caxis([0 1]); colormap jet; hold on gscatter(X(:,1),X(:,2),species,'mcy','.x+'); axis tight title('Posterior Probability of versicolor'); hold off
Область апостериорной вероятности отсоединяет фрагмент контура решения.
Апостериорная вероятность, что точка z принадлежит, чтобы классифицировать j, является продуктом априорной вероятности и многомерной нормальной плотности. Функция плотности многомерного нормального со средним μj и ковариацией Σj в точке z
где определитель Σk, и обратная матрица.
Позволенный P (k) представляют априорную вероятность класса k. Затем апостериорная вероятность, что наблюдение x имеет класс k,
где P (x) является постоянной нормализацией, сумма по k P (x |k) P (k).
Априорная вероятность является одним из трех вариантов:
'uniform'
— Априорная вероятность класса k
один по общему количеству классов.
'empirical'
— Априорная вероятность класса k
количество учебных выборок класса k
разделенный на общее количество учебных выборок.
Пользовательский — априорная вероятность класса k
k
элемент th prior
вектор. Смотрите fitcdiscr
.
После создания модели классификации (Mdl
) можно установить предшествующую запись через точку использования:
Mdl.Prior = v;
где v
вектор положительных элементов, представляющих частоту, с которой происходит каждый элемент. Вы не должны переобучать классификатор, когда вы устанавливаете новое предшествующее.
Матрица ожидаемых затрат на наблюдение задана в Стоимости.
predict
классифицирует, чтобы минимизировать ожидаемую стоимость классификации:
где
предсказанная классификация.
K является количеством классов.
апостериорная вероятность класса k для наблюдения x.
стоимость классификации наблюдения как y, когда его истинным классом является k.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Используйте saveLearnerForCoder
, loadLearnerForCoder
, и codegen
сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationDiscriminant
| CompactClassificationDiscriminant
| edge
| fitcdiscr
| loss
| margin
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.