предсказать

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

Синтаксис

label = predict(Mdl,X)
label = predict(Mdl,X,Name,Value)
[label,score,node,cnum] = predict(___)

Описание

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

label = predict(Mdl,X,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value. Например, можно задать, чтобы сократить Mdl к конкретному уровню прежде, чем предсказать метки.

[label,score,node,cnum] = predict(___) использование любой входной параметр в предыдущих синтаксисах и дополнительно возвращается:

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

  • Вектор предсказанных чисел узла для классификации (node).

  • Вектор предсказанного классификационного индекса для классификации (cnum).

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

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

Обученное дерево классификации, заданное как ClassificationTree или объект модели CompactClassificationTree. Таким образом, Mdl является обученной моделью классификации, возвращенной fitctree или compact.

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

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные, составляющие столбцы X, должны иметь тот же порядок как переменные прогноза, которые обучили Mdl.

    • Если вы обучили Mdl с помощью таблицы (например, Tbl), то X может быть числовой матрицей, если Tbl содержит все числовые переменные прогноза. Чтобы обработать числовые предикторы в Tbl как категориальные во время обучения, идентифицируйте категориальные предикторы с помощью аргумента пары "имя-значение" CategoricalPredictors fitctree. Если Tbl содержит неоднородные переменные прогноза (например, типы числовых и категориальных данных), и X является числовой матрицей, то predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов.

    • Если бы вы обучили Mdl с помощью таблицы (например, Tbl), то все переменные прогноза в X должны иметь те же имена переменных и типы данных как те, которые обучили Mdl (сохраненный в Mdl.PredictorNames). Однако порядок следования столбцов X не должен соответствовать порядку следования столбцов Tbl. Tbl и X могут содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict игнорирует их.

    • Если бы вы обучили Mdl с помощью числовой матрицы, то имена предиктора в Mdl.PredictorNames и соответствующие имена переменной прогноза в X должны быть тем же самым. Чтобы задать имена предиктора во время обучения, смотрите аргумент пары "имя-значение" PredictorNames fitctree. Все переменные прогноза в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict игнорирует их.

Типы данных: table | double | single

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Сокращение уровня, заданного как пара, разделенная запятой, состоящая из 'Subtrees' и вектор неотрицательных целых чисел в порядке возрастания или 'all'.

Если вы задаете вектор, то всеми элементами должен быть, по крайней мере, 0 и в большей части max(Mdl.PruneList). 0 указывает на полное, несокращенное дерево, и max(Mdl.PruneList) указывает на полностью сокращенное дерево (т.е. только корневой узел).

Если вы задаете 'all', то predict работает со всеми поддеревьями (т.е. целая последовательность сокращения). Эта спецификация эквивалентна использованию 0:max(Mdl.PruneList).

predict сокращает Mdl к каждому уровню, обозначенному в Subtrees, и затем оценивает соответствующие выходные аргументы. Размер Subtrees определяет размер некоторых выходных аргументов.

Чтобы вызвать Subtrees, свойства PruneList и PruneAlpha Mdl должны быть непустыми. Другими словами, вырастите Mdl установкой 'Prune','on', или путем сокращения Mdl с помощью prune.

Пример: 'Subtrees','all'

Типы данных: single | double | char | string

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

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

Предсказанные метки класса, возвращенные как вектор или массив. Каждая запись label соответствует классу с минимальной ожидаемой стоимостью для соответствующей строки X.

Предположим, что Subtrees является числовым вектором, содержащим элементы T (для 'all', смотрите Subtrees), и X имеет строки N.

  • Если типом данных ответа является char и:

    • T = 1, затем label является символьной матрицей, содержащей строки N. Каждая строка содержит предсказанную метку, произведенную поддеревом Subtrees.

    • T> 1, затем label является N-by-T массив ячеек.

  • В противном случае label является N-by-T массив, имеющий совпадающий тип данных как ответ. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)

В последних двух случаях столбец j label содержит вектор предсказанных меток, произведенных поддеревом Subtrees(j).

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

Если Subtrees имеет элементы T, и X имеет строки N, то score является N-by-K-by-T массив, и node и cnum является N-by-T матрицы.

Числа узла для предсказанных классов, возвращенных как числовой вектор. Каждая запись соответствует предсказанному узлу в Mdl для соответствующей строки X.

Классификационные индексы, соответствующие предсказанному labels, возвращенному как числовой вектор. Каждая запись cnum соответствует предсказанному классификационному индексу для соответствующей строки X.

Примеры

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

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

Загрузите ирисовый набор данных Фишера.

load fisheriris

Разделите данные в обучение (50%) и валидацию (50%-е) наборы.

n = size(meas,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices
idxVal = idxTrn == false;                  % Validation set logical indices

Вырастите дерево классификации использование набора обучающих данных.

Mdl = fitctree(meas(idxTrn,:),species(idxTrn));

Предскажите метки для данных о валидации. Считайте количество неправильно классифицированных наблюдений.

label = predict(Mdl,meas(idxVal,:));
label(randsample(numel(label),5)) % Display several predicted labels
ans = 5x1 cell array
    {'setosa'    }
    {'setosa'    }
    {'setosa'    }
    {'virginica' }
    {'versicolor'}

numMisclass = sum(~strcmp(label,species(idxVal)))
numMisclass = 3

Программное обеспечение неправильно классифицирует три наблюдения из выборки.

Загрузите ирисовый набор данных Фишера.

load fisheriris

Разделите данные в обучение (50%) и валидацию (50%-е) наборы.

n = size(meas,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices
idxVal = idxTrn == false;                  % Validation set logical indices

Вырастите дерево классификации использование набора обучающих данных, и затем просмотрите его.

Mdl = fitctree(meas(idxTrn,:),species(idxTrn));
view(Mdl,'Mode','graph')

Получившееся дерево имеет четыре уровня.

Оцените апостериорные вероятности для набора тестов с помощью поддеревьев, сокращенных к уровням 1 и 3.

[~,Posterior] = predict(Mdl,meas(idxVal,:),'SubTrees',[1 3]);
Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Posterior(randsample(size(Posterior,1),5),:,:),...
    % Display several posterior probabilities
ans = 
ans(:,:,1) =

    1.0000         0         0
    1.0000         0         0
    1.0000         0         0
         0         0    1.0000
         0    0.8571    0.1429


ans(:,:,2) =

    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067

Элементы Posterior являются апостериорными вероятностями класса:

  • Строки соответствуют наблюдениям в наборе валидации.

  • Столбцы соответствуют классам, как перечислено в Mdl.ClassNames.

  • Страницы соответствуют поддеревьям.

Поддерево, сокращенное к уровню 1, более уверено в своих прогнозах, чем поддерево, сокращенное к уровню 3 (т.е. корневой узел).

Больше о

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

Алгоритмы

predict генерирует прогнозы следующим ответвления Mdl, пока это не достигает вершины или отсутствующего значения. Если predict достигает вершины, он возвращает классификацию того узла.

Если predict достигает узла с отсутствующим значением для предиктора, его поведение зависит от установки пары "имя-значение" Surrogate, когда fitctree создает Mdl.

  • Surrogate = 'off' (значение по умолчанию) — predict возвращает метку с наибольшим числом учебных выборок, которые достигают узла.

  • Surrogate = 'on'predict использует лучшее суррогатное разделение в узле. Если все суррогатные переменные разделения с положительным predictive measure of association отсутствуют, predict возвращает метку с наибольшим числом учебных выборок, которые достигают узла. Для определения смотрите Прогнозирующую Меру Ассоциации.

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

Введенный в R2011a