Предскажите метки с помощью дерева классификации
дополнительные опции использования заданы одним или несколькими 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
не должен соответствовать порядку следования столбцов Tbl
tbl
и 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)
указывает на полностью сокращенное дерево (т.е. только корневой узел).
Если вы задаете '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 labels
ans = 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.ClassNames
ans = 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 (т.е. корневой узел).
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
возвращает метку с наибольшим числом обучающих выборок, которые достигают узла. Для определения смотрите Прогнозирующую Меру Ассоциации.
Эта функция полностью поддерживает "высокие" массивы. Можно использовать модели, обученные или на или на высоких данных в оперативной памяти с этой функцией.
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Можно сгенерировать код C/C++ для обоих predict
и update
при помощи кодера configurer. Или, сгенерируйте код только для predict
при помощи saveLearnerForCoder
, loadLearnerForCoder
, и codegen
.
Генерация кода для predict
и update
— Создайте кодер configurer при помощи learnerCoderConfigurer
и затем сгенерируйте код при помощи generateCode
. Затем можно обновить параметры модели в сгенерированном коде, не имея необходимость регенерировать код.
Генерация кода для predict
— Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Можно также сгенерировать фиксированную точку код C/C++ для predict
. Генерация фиксированной точки требует дополнительного шага, который задает типы данных с фиксированной точкой переменных, требуемых для предсказания. Создайте структуру типа данных с фиксированной точкой при помощи функции типа данных, сгенерированной generateLearnerDataTypeFcn
, и используйте структуру в качестве входного параметра loadLearnerForCoder
в функции точки входа. При генерации фиксированной точки код C/C++ требует MATLAB® Coder™ и Fixed-Point Designer™.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
label | Если типом данных ответа является char и codegen не может решить что значение Subtrees скаляр, затем label массив ячеек из символьных векторов. |
'Subtrees' |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationTree
| CompactClassificationTree
| compact
| edge
| fitctree
| loss
| margin
| prune
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.