предсказать

Предскажите метки с помощью модели классификации дискриминантных анализов

Синтаксис

label = predict(Mdl,X)
[label,score,cost] = predict(Mdl,X)

Описание

label = predict(Mdl,X) возвращает вектор предсказанных меток класса для данных о предикторе в таблице или матричном X, на основе обученной модели Mdl классификации дискриминантных анализов.

[label,score,cost] = predict(Mdl,X) также возвращается:

  • Матрица очков классификации (score), указывающий на вероятность, что метка прибывает из конкретного класса. Для дискриминантного анализа очки являются апостериорными вероятностями.

  • Матрица ожидаемой классификации стоила (cost). Для каждого наблюдения в X предсказанная метка класса соответствует минимальной ожидаемой стоимости классификации среди всех классов.

Входные параметры

развернуть все

Модель классификации дискриминантных анализов, заданная как ClassificationDiscriminant или объект модели CompactClassificationDiscriminant, возвращенный fitcdiscr.

Данные о предикторе, которые будут классифицированы, заданные как числовая матрица или таблица.

Каждая строка 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

Выходные аргументы

развернуть все

Предсказанные метки класса, возвращенные как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.

метка:

  • Совпадающий тип данных, когда наблюдаемый класс маркирует (Y), который обучил Mdl. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)

  • Имеет длину, равную количеству строк X.

Предсказанные апостериорные вероятности класса, возвращенные как числовая матрица размера N-by-K. N является количеством наблюдений (строки) в X, и K является количеством классов (в Mdl.ClassNames). score(i,j) является апостериорной вероятностью, что наблюдение i в X имеет класс j в Mdl.ClassNames.

Ожидаемые затраты классификации, возвращенные как матрица размера 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 неправильно классифицирует одну ирисовую диафрагму 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

Область апостериорной вероятности представляет фрагмент контура решения.

Больше о

развернуть все

Расширенные возможности

Представленный в R2011b