Прогнозируйте метки с помощью дискриминантной модели классификации анализа
[
также возвращает:label
,score
,cost
]
= predict(Mdl
,X
)
Матрица классификационных оценок (score
), указывающий вероятность того, что метка происходит от определенного класса. Для дискриминантного анализа счетов являются апостериорными вероятностями.
Матрица ожидаемых классификационных затрат (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
-by- K
. N
количество наблюдений (строк) в X
, и K
количество классов (в Mdl.ClassNames
). score(i,j)
- апостериорная вероятность того, что наблюдение i
в X
является классом j
в Mdl.ClassNames
.
cost
- Ожидаемые классификационные затратыОжидаемые классификационные затраты, возвращенные как матрица размера N
-by- 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
ошибочно классифицирует одну ирису версиколора как 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
{'setosa' }
{'versicolor'}
{'virginica' }
score
является матрицей апостериорных вероятностей классов. Столбцы соответствуют классам в Mdl.ClassNames
. Для примера, score(j,1)
- апостериорная вероятность того, что наблюдение j
является сетозой радужной оболочки.
Постройте график апостериорной вероятности классификации версиколоров для каждого наблюдения в сетке и постройте график обучающих данных.
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
Апостериорная область вероятности открывает фрагмент контура принятия решения.
Апостериорная вероятность того, что x точек принадлежит классу k, является продуктом априорной вероятности и многомерной нормальной плотности. Плотность распределения многомерного нормального с 1-by-<reservedrangesplaceholder6>, средним μk и d d ковариацией Σ <reservedrangesplaceholder2> в точке 1-by-<reservedrangesplaceholder1> x,
где является определяющим, и, k, - обратная матрица.
Пусть P (k) представляет априорную вероятность k класса. Тогда апостериорная вероятность того, что x наблюдения имеет класс k,
где P (<reservedrangesplaceholder6>) является постоянной нормализацией, сумма по k P (x | k) P (<reservedrangesplaceholder0>).
Предыдущая вероятность является одним из трех вариантов:
'uniform'
- априорная вероятность k
классов на единицу превышает общее количество классов.
'empirical'
- априорная вероятность k
классов количество обучающих выборок класса
k
разделенный на общее количество обучающих выборок.
Custom - априорная вероятность k
классов является
k
первый элемент prior
вектор. Посмотрите fitcdiscr
.
После создания классификационной модели (Mdl
) можно задать предшествующее с помощью записи через точку:
Mdl.Prior = v;
где v
является вектором положительных элементов, представляющих частоту, с которой происходит каждый элемент. Вам не нужно переобучать классификатор, когда вы задаете новый предыдущий.
Матрица ожидаемых затрат на наблюдение определяется в Затратах.
predict
классифицирует так, чтобы минимизировать ожидаемые классификационные затраты:
где
- предсказанная классификация.
K - количество классов.
- апостериорная вероятность k классов для x наблюдений.
- стоимость классификации наблюдения как y, когда его истинный класс k.
Эта функция полностью поддерживает длинные массивы. Вы можете использовать модели, обученные на памяти или высоких данных с этой функцией.
Для получения дополнительной информации см. Раздел «Длинные массивы»
Указания и ограничения по применению:
Использовать saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать одноточный код C/C + + для предсказания, задайте аргумент
имя-значение 'DataType','single'
когда вы вызываете loadLearnerForCoder
функция.
Эта таблица содержит примечания к аргументам predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний по применению и ограничений объекта модели, смотрите
Генерацию кода CompactClassificationDiscriminant |
X |
|
Для получения дополнительной информации смотрите Введение в генерацию кода.
ClassificationDiscriminant
| CompactClassificationDiscriminant
| edge
| fitcdiscr
| loss
| margin
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.