Прогнозирование меток с использованием модели классификации анализа дискриминантов
[ также возвращает: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около-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
{'setosa' }
{'versicolor'}
{'virginica' }
score является матрицей классовых задних вероятностей. Столбцы соответствуют классам в Mdl.ClassNames. Например, score(j,1) - задняя вероятность того, что наблюдение j является сетозой радужной оболочки.
Постройте график апостериорной вероятности классификации 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

Задняя область вероятности обнажает часть границы принятия решения.
Апостериорная вероятность того, что точка x принадлежит классу k, является произведением предыдущей вероятности и многомерной нормальной плотности. Функция плотности многовариантной нормали со среднеквадратичной (1 на d) мкк и d на d ковариационной (d на d) α к в точке 1 на d x равна
)
где | - детерминант Startk, − 1 - обратная матрица.
Пусть P (k) представляет предшествующую вероятность класса k. Тогда апостериорная вероятность того, что наблюдение x имеет класс k
P (x),
где P (x) - константа нормализации, сумма по k P (x 'k) P (k).
Предварительная вероятность является одним из трех вариантов:
'uniform' - Предшествующая вероятность класса k равен единице от общего числа классов.
'empirical' - Предшествующая вероятность класса k - количество обучающих образцов класса k делят на общее количество обучающих образцов.
Custom - предыдущая вероятность класса k является k-й элемент prior вектор. Посмотрите fitcdiscr.
После создания классификационной модели (Mdl) можно задать предшествующее представление, используя точечную нотацию:
Mdl.Prior = v;
где v - вектор положительных элементов, представляющий частоту, с которой происходит каждый элемент. Не нужно переучивать классификатор при установке нового предшествующего.
Матрица ожидаемых затрат для каждого наблюдения определяется в разделе Затраты.
predict классифицирует таким образом, чтобы минимизировать ожидаемые затраты на классификацию:
C (y' k),
где
^ - прогнозируемая классификация.
K - количество классов.
k 'x) - задняя вероятность класса k для наблюдения x.
) - стоимость классификации наблюдения как y, когда его истинным классом является k.
Эта функция полностью поддерживает массивы tall. С помощью этой функции можно использовать модели, обученные работе с данными в памяти или с данными высокого уровня.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для predict функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen для создания кода для функции точки входа.
Чтобы создать код C/C + + с одной точностью для прогнозирования, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
X |
|
Дополнительные сведения см. в разделе Введение в создание кода.
ClassificationDiscriminant | CompactClassificationDiscriminant | edge | fitcdiscr | loss | margin
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.