Прогнозируйте метки с помощью дискриминантной модели классификации анализа
[ также возвращает: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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.