Предскажите метки с помощью дерева классификации
дополнительные опции использования заданы одним или несколькими label = predict(Mdl,X,Name,Value)Name,Value парные аргументы. Например, можно задать, чтобы сократить Mdl к конкретному уровню прежде, чем предсказать метки.
[ использование любой входной параметр в предыдущих синтаксисах и дополнительно возвращается:label,score,node,cnum]
= predict(___)
Матрица A классификационных оценок (score) указание на вероятность, что метка прибывает из конкретного класса. Для деревьев классификации баллы являются апостериорными вероятностями. Для каждого наблюдения в X, предсказанная метка класса соответствует ожидаемой стоимости misclassification минимума среди всех классов.
Вектор из предсказанных чисел узла для классификации (node).
Вектор из предсказанного классификационного индекса для классификации (cnum).
Mdl — Обученное дерево классификацииClassificationTree объект модели | CompactClassificationTree объект моделиОбученное дерево классификации в виде ClassificationTree или CompactClassificationTree объект модели. Таким образом, Mdl обученная модель классификации, возвращенная fitctree или compact.
X — Данные о предикторе, которые будут классифицированыДанные о предикторе, которые будут классифицированы в виде числовой матрицы или таблицы.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные, составляющие столбцы X должен иметь тот же порядок как переменные предикторы, которые обучили Mdl.
Если вы обучили Mdl с помощью таблицы (например, Tbl), затем X может быть числовая матрица если Tbl содержит все числовые переменные предикторы. Обрабатывать числовые предикторы в Tbl как категориальные во время обучения, идентифицируйте категориальные предикторы с помощью CategoricalPredictors аргумент пары "имя-значение" fitctree. Если Tbl содержит неоднородные переменные предикторы (например, типы числовых и категориальных данных) и X числовая матрица, затем predict выдает ошибку.
Для таблицы:
predict не поддерживает многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов.
Если вы обучили Mdl с помощью таблицы (например, Tbl), затем все переменные предикторы в X должен иметь те же имена переменных и типы данных как те, которые обучили Mdl (сохраненный в Mdl.PredictorNames). Однако порядок следования столбцов X не должен соответствовать порядку следования столбцов Tbltbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict игнорирует их.
Если вы обучили Mdl с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames и соответствующий переменный предиктор называет в X должно быть то же самое. Чтобы задать имена предиктора во время обучения, смотрите PredictorNames аргумент пары "имя-значение" fitctree. Все переменные предикторы в X должны быть числовые векторы. X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict игнорирует их.
Типы данных: table | double | single
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Subtrees' — Сокращение уровня'all'Сокращение уровня в виде разделенной запятой пары, состоящей из 'Subtrees' и вектор из неотрицательных целых чисел в порядке возрастания или 'all'.
Если вы задаете вектор, то всеми элементами должен быть, по крайней мере, 0 и в большей части max(Mdl.PruneList). 0 указывает на полное, несокращенное дерево и max(Mdl.PruneList) указывает на полностью сокращенное дерево (i.e., только корневой узел).
Если вы задаете 'all'то predict работает со всеми поддеревьями (т.е. целая последовательность сокращения). Эта спецификация эквивалентна использованию 0:max(Mdl.PruneList).
predict чернослив Mdl к каждому уровню, обозначенному в Subtrees, и затем оценивает соответствующие выходные аргументы. Размер Subtrees определяет размер некоторых выходных аргументов.
Вызвать Subtrees, свойства PruneList и PruneAlpha из Mdl mustBeNonempty. Другими словами, вырастите Mdl установкой 'Prune','on', или путем сокращения Mdl использование prune.
Пример: 'Subtrees','all'
Типы данных: single | double | char | string
label — Предсказанные метки классаПредсказанные метки класса, возвращенные как вектор или массив. Каждая запись label соответствует классу с минимальной ожидаемой стоимостью для соответствующей строки X.
Предположим Subtrees числовой вектор, содержащий T элементы (для 'all', смотрите Subtrees), и X имеет N 'Строки' .
Если типом данных ответа является char и:
T = 1, затем label символьная матрица, содержащая N 'Строки' . Каждая строка содержит предсказанную метку, произведенную поддеревом Subtrees.
T > 1, затем label N- T cellArray.
В противном случае, label N- T массив, имеющий совпадающий тип данных как ответ. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
В последних двух случаях, столбец j из label содержит вектор из предсказанных меток, произведенных Поддеревьями поддерева (.j)
score — Апостериорные вероятностиАпостериорные вероятности, возвращенные как числовая матрица размера N- K, где N количество наблюдений (строки) в X, и K количество классов (в Mdl.ClassNames). score(i,j) апостериорная вероятность та строка i из X имеет класс j.
Если Subtrees имеет T элементы и X имеет N строки, затем score N- K- T массив и node и cnum N- T матрицы.
cnum — Классификационные индексыКлассификационные индексы, соответствующие предсказанному 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 labelsans = 5x1 cell
{'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.ClassNamesans = 3x1 cell
{'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 (i.e., корневой узел).
predict классифицирует путем минимизации ожидаемой стоимости классификации:
где
предсказанная классификация.
K является количеством классов.
апостериорная вероятность класса j для наблюдения x.
стоимость классификации наблюдения как y, когда его истинным классом является j.
Для деревьев score классификации вершины является апостериорной вероятностью классификации в том узле. Апостериорная вероятность классификации в узле является количеством обучающих последовательностей, которые приводят к тому узлу с классификацией, разделенной на количество обучающих последовательностей, которые приводят к тому узлу.
Например, считайте классификацию предиктора X как true когда X< 0.15 или X> 0.95 , и X является ложным в противном случае.
Сгенерируйте 100 случайных точек и классифицируйте их:
rng(0,'twister') % for reproducibility X = rand(100,1); Y = (abs(X - .55) > .4); tree = fitctree(X,Y); view(tree,'Mode','Graph')

Сократите дерево:
tree1 = prune(tree,'Level',1); view(tree1,'Mode','Graph')

Сокращенное дерево правильно классифицирует наблюдения, которые меньше 0.15 как true. Это также правильно классифицирует наблюдения от.15 до.94 как false. Однако это неправильно классифицирует наблюдения, которые больше.94 как false. Поэтому счет к наблюдениям, которые больше.15, должен быть о.05/.85 =. 06 для true, и о.8/.85 =. 94 для false.
Вычислите музыку предсказания к первым 10 строкам X:
[~,score] = predict(tree1,X(1:10)); [score X(1:10,:)]
ans = 10×3
0.9059 0.0941 0.8147
0.9059 0.0941 0.9058
0 1.0000 0.1270
0.9059 0.0941 0.9134
0.9059 0.0941 0.6324
0 1.0000 0.0975
0.9059 0.0941 0.2785
0.9059 0.0941 0.5469
0.9059 0.0941 0.9575
0.9059 0.0941 0.9649
Действительно, каждое значение X (крайний правый столбец), который меньше 0.15, сопоставил баллы (левые и центральные столбцы) 0 и 1, в то время как другие значения X сопоставили множество 0.91 и 0.09. Различие (выигрывают 0.09 вместо ожидаемого .06) происходит из-за статистического колебания: существует 8 наблюдения в X в области значений (.95,1) вместо ожидаемого 5 наблюдения.
Существует два затрат, сопоставленные с классификацией: истинная стоимость misclassification в классе и ожидаемый misclassification стоятся на наблюдение.
Можно установить истинную стоимость misclassification в классе в Cost пара "имя-значение", когда вы создаете классификатор с помощью fitctree метод. Cost(i,j) стоимость классификации наблюдения в класс j если его истинным классом является i. По умолчанию, Cost(i,j)=1 если i~=j, и Cost(i,j)=0 если i=j. Другими словами, стоимостью является 0 для правильной классификации и 1 для неправильной классификации.
Существует два затрат, сопоставленные с классификацией: истинная стоимость misclassification в классе и ожидаемый misclassification стоятся на наблюдение.
Предположим, что у вас есть Nobs наблюдения, что вы хотите классифицировать с обученным классификатором. Предположим, что у вас есть K классы. Вы помещаете наблюдения в матричный Xnew с одним наблюдением на строку.
Ожидаемая матрица стоимости CE имеет размер Nobs- K. Каждая строка CE содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждый K классы. CE(n,k)
где
K является количеством классов.
апостериорная вероятность класса i для наблюдения Xnew (n).
истинная misclassification стоимость классификации наблюдения как k, когда его истинным классом является i.
predictive measure of association является значением, которое указывает, что подобие между решением управляет что наблюдения разделения. Среди всех возможных разделений решения, которые сравниваются с оптимальным разделением (найденный путем роста дерева), лучшее суррогатное разделение решения дает к максимальной прогнозирующей мере ассоциации. Второсортное суррогатное разделение имеет вторую по величине прогнозирующую меру ассоциации.
Предположим, что xj и xk являются переменными предикторами j и k, соответственно, и j ≠ k. В узле t прогнозирующая мера ассоциации между оптимальным разделением xj <u и суррогат разделяют xk <v
PL является пропорцией наблюдений в узле t, такой что xj <u. Индекс L выдерживает за покинутый дочерний элемент узла t.
PR является пропорцией наблюдений в узле t, такой что xj ≥ u. Индекс R выдерживает за правильный дочерний элемент узла t.
пропорция наблюдений в узле t, такой что xj <u и xk <v.
пропорция наблюдений в узле t, такой что xj ≥ u и xk ≥ v.
Наблюдения с отсутствующими значениями для xj или xk не способствуют вычислениям пропорции.
λjk является значением в (– ∞, 1]. Если λjk> 0, то xk <v является стоящим суррогатным разделением для xj <u.
predict генерирует предсказания следующим ветви Mdl пока это не достигает вершины или отсутствующего значения. Если predict достигает вершины, она возвращает классификацию того узла.
Если predict достигает узла с отсутствующим значением для предиктора, его поведение зависит от установки Surrogate пара "имя-значение", когда fitctree построения Mdl.
Surrogate = 'off' (значение по умолчанию) — predict возвращает метку с наибольшим числом обучающих выборок, которые достигают узла.
Surrogate = 'on' — predict использует лучшее суррогатное разделение в узле. Если все суррогатные переменные разделения с положительным predictive measure of association отсутствуют, predict возвращает метку с наибольшим числом обучающих выборок, которые достигают узла. Для определения смотрите Прогнозирующую Меру Ассоциации.
Эта функция полностью поддерживает "высокие" массивы. Можно использовать модели, обученные или на или на высоких данных в оперативной памяти с этой функцией.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Указания и ограничения по применению:
Можно сгенерировать код C/C++ для обоих predict и update при помощи кодера configurer. Или, сгенерируйте код только для predict при помощи saveLearnerForCoder, loadLearnerForCoder, и codegen.
Генерация кода для predict и update — Создайте кодер configurer при помощи learnerCoderConfigurer и затем сгенерируйте код при помощи generateCode. Затем можно обновить параметры модели в сгенерированном коде, не имея необходимость регенерировать код.
Генерация кода для predict — Сохраните обученную модель при помощи saveLearnerForCoder. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder и вызывает predict функция. Затем используйте codegen (MATLAB Coder), чтобы сгенерировать код для функции точки входа.
Можно также сгенерировать код C/C++ с одинарной точностью для predict. Для генерации кода с одинарной точностью задайте аргумент пары "имя-значение" 'DataType','single' как дополнительный вход к loadLearnerForCoder функция.
Можно также сгенерировать фиксированную точку код C/C++ для predict. Генерация фиксированной точки требует дополнительного шага, который задает типы данных с фиксированной точкой переменных, требуемых для предсказания. Создайте структуру типа данных с фиксированной точкой при помощи функции типа данных, сгенерированной generateLearnerDataTypeFcn, и используйте структуру в качестве входного параметра loadLearnerForCoder в функции точки входа. При генерации фиксированной точки код C/C++ требует MATLAB® Coder™ и Fixed-Point Designer™.
Эта таблица содержит примечания об аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
label | Если типом данных ответа является char и codegen не может решить что значение Subtrees скаляр, затем label массив ячеек из символьных векторов. |
'Subtrees' |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationTree | compact | CompactClassificationTree | edge | fitctree | loss | margin | prune
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.