ClassificationTree class

Суперклассы: CompactClassificationTree

Двоичное дерево принятия решений для многоклассовой классификации

Описание

A ClassificationTree объект представляет дерево решений с двоичными разделениями для классификации. Объект этого класса может предсказать ответы для новых данных, используя predict способ. Объект содержит данные, используемые для обучения, поэтому он также может вычислить предсказания реституции.

Конструкция

Создайте ClassificationTree объект при помощи fitctree.

Свойства

BinEdges

Границы интервала для числовых предикторов, заданные как массив ячеек из p числовых векторов, где p - количество предикторов. Каждый вектор включает границы интервала для числового предиктора. Элемент в массиве ячеек для категориального предиктора пуст, потому что программное обеспечение не встраивает категориальные предикторы.

Программное обеспечение помещает числовые предикторы только, если вы задаете 'NumBins' аргумент имя-значение как положительный целочисленный скаляр при обучении модели с учениками дерева. The BinEdges свойство пустое, если 'NumBins' значение пустое (по умолчанию).

Можно воспроизвести привязанные данные предиктора Xbinned при помощи BinEdges свойство обученной модели mdl.

X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x) 
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]); 
    Xbinned(:,j) = xbinned;
end
Xbinned содержит индексы интервала в диапазоне от 1 до количества интервалов для числовых предикторов. Xbinned значения 0 для категориальных предикторов. Если X содержит NaNs, затем соответствующее Xbinned значения NaNс.

CategoricalPredictors

Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]).

CategoricalSplit

Массив ячеек n -by-2, где n количество категориальных разделений в tree. Каждая строка в CategoricalSplits задает левое и правое значения для категориального разделения. Для каждого узла ветви с категориальным разделением j основанный на категориальной переменной предиктора z, левый дочерний элемент выбирается, если z находится в CategoricalSplits(j,1) и правильный ребенок выбирается, если z находится в CategoricalSplits(j,2). Разделения находятся в том же порядке, что и узлы дерева. Найдите узлы для этих разделений путем выбора 'categorical' вырезы сверху вниз в CutType свойство.

Children

Массив n -by-2, содержащий номера дочерних узлов для каждого узла в tree, где n является числом узлов. Конечные узлы имеют дочерний узел 0.

ClassCount

n -by k массив отсчётов классов для узлов в tree, где n - число узлов, а k - количество классов. Для любого номера узла i, класс отсчитывает ClassCount(i,:) являются счетчиками наблюдений (из данных, используемых при подборе кривой дерева) от каждого класса, удовлетворяющих условиям для узла i.

ClassNames

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

ClassProbability

n -by k массив вероятностей классов для узлов в tree, где n - число узлов, а k - количество классов. Для любого номера узла iвероятности классов ClassProbability(i,:) являются оцененными вероятностями для каждого класса для точки, удовлетворяющей условиям для узла i.

Cost

Квадратная матрица, где Cost(i,j) - стоимость классификации точки в класс j если его класс true i (строки соответствуют истинному классу, а столбцы - предсказанному классу). Порядок строк и столбцов Cost соответствует порядку классов в ClassNames. Количество строк и столбцов в Cost количество уникальных классов в ответе. Это свойство доступно только для чтения.

CutCategories

Массив ячеек n -by-2 категорий, используемых в ветвях в tree, где n является числом узлов. Для каждого узла ветви i основанный на категориальной переменной предиктора X, левый дочерний элемент выбирается, если X входит в число категорий, перечисленных в CutCategories{i,1}, и правильный ребенок выбирается, если X входит в число перечисленных в CutCategories{i,2}. Оба столбца CutCategories пусты для узлов ветви, основанных на непрерывных предикторах, и для узлов листа.

CutPoint содержит точки разреза для 'continuous' вырезы, и CutCategories содержит набор категорий.

CutPoint

Вектор- n значений, используемых в качестве точек разреза в tree, где n является числом узлов. Для каждого узла ветви i на основе непрерывной переменной предиктора X, левый дочерний элемент выбирается, если X<CutPoint(i) и правильный ребенок выбирается, если X>=CutPoint(i). CutPoint является NaN для узлов ветви, основанных на категориальных предикторах, и для узлов листа.

CutPoint содержит точки разреза для 'continuous' вырезы, и CutCategories содержит набор категорий.

CutType

Массив ячеек n-element, указывающий тип выреза в каждом узле в tree, где n является числом узлов. Для каждого узла i, CutType{i} является:

  • 'continuous' - Если вырез определен в форме X < v для переменной X и точки разреза v.

  • 'categorical' - Если вырез задан как переменная X принимает значение в наборе категорий.

  • '' - Если i является листовым узлом.

CutPoint содержит точки разреза для 'continuous' вырезы, и CutCategories содержит набор категорий.

CutPredictor

Массив ячеек n-element из имен переменных, используемых для ответвления в каждом узле в tree, где n является числом узлов. Эти переменные иногда известны как переменные разреза. Для листовых узлов, CutPredictor содержит пустой символьный вектор.

CutPoint содержит точки разреза для 'continuous' вырезы, и CutCategories содержит набор категорий.

CutPredictorIndex

Массив n-element из числовых индексов для переменных, используемых для ответвления в каждом узле в tree, где n является числом узлов. Для получения дополнительной информации смотрите CutPredictor.

ExpandedPredictorNames

Расширенные имена предикторов, сохраненные как массив ячеек из векторов символов.

Если модель использует кодировку для категориальных переменных, то ExpandedPredictorNames включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames то же, что и PredictorNames.

HyperparameterOptimizationResults

Описание оптимизации гиперпараметров перекрестной валидации, сохраненное как BayesianOptimization объект или таблица гиперпараметров и связанных значений. Непусто, когда OptimizeHyperparameters Пара "имя-значение" не пуста при создании. Значение зависит от настройки HyperparameterOptimizationOptions Пара "имя-значение" при создании:

  • 'bayesopt' (по умолчанию) - Объект класса BayesianOptimization

  • 'gridsearch' или 'randomsearch' - Таблица используемых гиперпараметров, наблюдаемых значений целевой функции (потери перекрестной валидации) и ранг наблюдений от самого низкого (лучшего) до самого высокого (худшего)

IsBranchNode

Логический вектор n -элемент, который true для каждого узла ветви и false для каждого листового узла tree.

ModelParameters

Параметры, используемые в обучающих tree. Чтобы отобразить все значения параметров, введите tree.ModelParameters. Для доступа к конкретному параметру используйте запись через точку.

NumObservations

Количество наблюдений в обучающих данных, числовой скаляр. NumObservations может быть меньше, чем количество строк входных данных X когда есть отсутствующие значения в X или ответ Y.

NodeClass

Массив ячеек n-element с именами наиболее вероятных классов в каждом узле tree, где n - число узлов в дереве. Каждый элемент этого массива является вектором символов, равным одному из имен классов в ClassNames.

NodeError

Вектор- n ошибок узлов в tree, где n является числом узлов. NodeError(i) - вероятность неправильной классификации для узла i.

NodeProbability

Вектор n-элемента вероятностей узлов в tree, где n является числом узлов. Вероятность узла вычисляется как доля наблюдений из исходных данных, которые удовлетворяют условиям для узла. Эта пропорция корректируется для любых предыдущих вероятностей, присвоенных каждому классу.

NodeRisk

Вектор n-element риска узлов в дереве, где n количество узлов. Риск для каждого узла является мерой примеси (индекс Джини или отклонение) для этого узла, взвешенной по вероятности узла. Если дерево выращивается двумя узлами, риск для каждого узла равен нулю.

NodeSize

Вектор- n размеров узлов в tree, где n является числом узлов. Размер узла определяется как количество наблюдений из данных, используемых для создания дерева, которые удовлетворяют условиям для узла.

NumNodes

Число узлов в tree.

Parent

Вектор n-element, содержащий номер родительского узла для каждого узла в tree, где n является числом узлов. Родительский элемент корневого узла 0.

PredictorNames

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

Prior

Числовой вектор априорных вероятностей для каждого класса. Порядок элементов Prior соответствует порядку классов в ClassNames. Количество элементов Prior количество уникальных классов в ответе. Это свойство доступно только для чтения.

PruneAlpha

Числовой вектор с одним элементом на уровень обрезки. Если уровень обрезки колеблется от 0 до M, то PruneAlpha имеет M + 1 элементов, отсортированных в порядке возрастания. PruneAlpha(1) для уровня обрезки 0 (без обрезки), PruneAlpha(2) для уровня обрезки 1 и так далее.

PruneList

Числовой вектор n-элемента с уровнями обрезки в каждом узле tree, где n является числом узлов. Уровни обрезки варьируются от 0 (без обрезки) до M, где M расстояние между самым глубоким листом и корневым узлом.

ResponseName

Вектор символов, который задает имя переменной отклика (Y).

RowsUsed

Логический вектор n-element, указывающий, какие строки исходных данных предиктора (X) использовались в подборе кривой. Если программное обеспечение использует все строки X, затем RowsUsed - пустой массив ([]).

ScoreTransform

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

none означает отсутствие преобразования или @(x)x.

Чтобы изменить функцию преобразования счета на, например, function, используйте запись через точку.

  • Для доступных функций (см. fitctree), введите

    Mdl.ScoreTransform = 'function';
  • Можно задать указатель на функцию для доступной функции или функцию, которую вы сами задаете, вводя

    tree.ScoreTransform = @function;

SurrogateCutCategories

Массив ячеек n-element категорий, используемых для суррогатных расщеплений в tree, где n числа узлов в tree. Для каждого узла k, SurrogateCutCategories{k} - массив ячеек. Длина SurrogateCutCategories{k} равен количеству суррогатных предикторов, найденных в этом узле. Каждый элемент SurrogateCutCategories{k} является либо пустым символьным вектором для непрерывного суррогатного предиктора, либо представляет собой двухэлементный массив ячеек с категориями для категориального суррогатного предиктора. Первый элемент этого двухэлементного массива ячеек приводит категории, присвоенные левому дочернему элементу этим суррогатным разделением, а второй элемент этого двухэлементного массива ячеек - категории, присвоенные правому дочернему элементу этим суррогатным разделением. Порядок суррогатных разделенных переменных в каждом узле согласован с порядком переменных в SurrogateCutPredictor. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogateCutCategories содержит пустую камеру.

SurrogateCutFlip

Массив ячеек n-element из числовых назначений вырезов, используемых для суррогатных разделений в tree, где n числа узлов в tree. Для каждого узла k, SurrogateCutFlip{k} является числовым вектором. Длина SurrogateCutFlip{k} равен количеству суррогатных предикторов, найденных в этом узле. Каждый элемент SurrogateCutFlip{k} является либо нулем для категориального суррогатного предиктора, либо числовым разрезом для непрерывного суррогатного предиктора. Числовое назначение выреза может быть либо -1, либо + 1. Для каждого суррогатного разделения с числовым C разреза, основанным на непрерывном Z переменной предиктора, левый дочерний элемент выбирается, если Z < C, и назначение разреза для этого суррогатного разделения составляет + 1, или если Z ≥ C и назначение разреза для этого суррогатного разделения составляет -1. Точно так же выбирается правый дочерний элемент, если Z ≥ C и назначение выреза для этого суррогатного разделения - + 1, или если Z < C, и назначение выреза для этого суррогатного разделения - -1. Порядок суррогатных разделенных переменных в каждом узле согласован с порядком переменных в SurrogateCutPredictor. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogateCutFlip содержит пустой массив.

SurrogateCutPoint

Массив ячеек n-element из числовых значений, используемых для суррогатных разделений в tree, где n числа узлов в tree. Для каждого узла k, SurrogateCutPoint{k} является числовым вектором. Длина SurrogateCutPoint{k} равен количеству суррогатных предикторов, найденных в этом узле. Каждый элемент SurrogateCutPoint{k} является либо NaN для категориального суррогатного предиктора или числового выреза для непрерывного суррогатного предиктора. Для каждого суррогатного разделения с числовым C разреза, основанным на непрерывной переменной предиктора Z, левый дочерний элемент выбирается, если Z < C и SurrogateCutFlip поскольку это суррогатное разделение +1, или если <reservedrangesplaceholder2>  <reservedrangesplaceholder1> и SurrogateCutFlip для этого суррогатного разделения -1. Точно так же правильный ребенок выбран если <reservedrangesplaceholder2>  <reservedrangesplaceholder1> и SurrogateCutFlip для этого суррогатного разделения + 1, или если Z < C и SurrogateCutFlip для этого суррогатного разделения -1. Порядок суррогатных разделенных переменных в каждом узле согласован с порядком переменных, возвращаемых SurrogateCutPredictor. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogateCutPoint содержит пустую камеру.

SurrogateCutType

Массив ячеек n-element, указывающий типы суррогатных разделений в каждом узле в tree, где n числа узлов в tree. Для каждого узла k, SurrogateCutType{k} - массив ячеек с типами суррогатных разделенных переменных в этом узле. Переменные сортируются по прогнозирующей мере ассоциации с оптимальным предиктором в порядке убывания, и включаются только переменные с положительной прогнозирующей мерой. Порядок суррогатных разделенных переменных в каждом узле согласован с порядком переменных в SurrogateCutPredictor. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogateCutType содержит пустую камеру. Суррогатный тип разделения может быть либо 'continuous' если вырез определен в форме Z<V для переменной Z и точки разреза V или 'categorical' если вырез задан тем, Z принимает значение в наборе категорий.

SurrogateCutPredictor

Массив ячеек n-element из имен переменных, используемых для суррогатных разделений в каждом узле в tree, где n числа узлов в tree. Каждый элемент SurrogateCutPredictor - массив ячеек с именами суррогатных разделенных переменных в этом узле. Переменные сортируются по прогнозирующей мере ассоциации с оптимальным предиктором в порядке убывания, и включаются только переменные с положительной прогнозирующей мерой. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogateCutPredictor содержит пустую камеру.

SurrogatePredictorAssociation

Массив n-элементных клеток прогнозирующих мер ассоциации для суррогатных расщеплений у tree, где n числа узлов в tree. Для каждого узла k, SurrogatePredictorAssociation{k} является числовым вектором. Длина SurrogatePredictorAssociation{k} равен количеству суррогатных предикторов, найденных в этом узле. Каждый элемент SurrogatePredictorAssociation{k} дает прогнозирующую меру связи между оптимальным разделением и этим суррогатным разделением. Порядок суррогатных разделенных переменных в каждом узле является порядком переменных в SurrogateCutPredictor. Переменная оптимального разделения в этом узле не отображается. Для небранчевых (листовых) узлов, SurrogatePredictorAssociation содержит пустую камеру.

W

Масштабированный weights, вектор с n длины, количеством строк в X.

X

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

Y

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

Функции объекта

compactКомпактное дерево
compareHoldoutСравните точности двух классификационных моделей с помощью новых данных
crossvalПерекрестная проверка дерева решений
cvlossОшибка классификации путем перекрестной валидации
edgeКлассификационное ребро
limeЛокальные интерпретируемые модели-агностические объяснения (LIME)
lossОшибка классификации
marginКлассификационные поля
partialDependenceВычисление частичной зависимости
plotPartialDependenceСоздайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE)
predictСпрогнозируйте метки с помощью дерева классификации
predictorImportanceОценки предикторной важности для дерева классификации
pruneПроизведите последовательность классификационных подтеревов путем обрезки
resubEdgeКлассификационное ребро путем реподституции
resubLossОшибка классификации путем реподституции
resubMarginКлассификационные погрешности путем реподституции
resubPredictПредсказание меток реституции классификационного дерева
surrogateAssociationСредняя прогнозирующая мера ассоциации для суррогатных расщеплений в классификационном дереве
shapleyЗначения Shapley
testckfoldСравните точности двух классификационных моделей путем повторной перекрестной валидации
viewПросмотрите дерево классификации

Копировать семантику

Значение. Чтобы узнать, как классы значений влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

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

load ionosphere
tc = fitctree(X,Y)
tc = 
  ClassificationTree
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351


  Properties, Methods

Вы можете управлять глубиной деревьев, используя MaxNumSplits, MinLeafSize, или MinParentSize пары "имя-значение". fitctree по умолчанию выращивает глубокие деревья решений. Можно выращивать более мелкие деревья, чтобы уменьшить сложность модели или время расчетов.

Загрузите ionosphere набор данных.

load ionosphere

Значения по умолчанию для древовидных контроллеров глубины для растущих деревьев классификации:

  • n - 1 для MaxNumSplits. n - размер обучающей выборки.

  • 1 для MinLeafSize.

  • 10 для MinParentSize.

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

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

rng(1); % For reproducibility
MdlDefault = fitctree(X,Y,'CrossVal','on');

Нарисуйте гистограмму количества наложенных разделений на деревья. Также просмотрите одно из деревьев.

numBranches = @(x)sum(x.IsBranch);
mdlDefaultNumSplits = cellfun(numBranches, MdlDefault.Trained);

figure;
histogram(mdlDefaultNumSplits)

Figure contains an axes. The axes contains an object of type histogram.

view(MdlDefault.Trained{1},'Mode','graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 51 objects of type line, text.

Среднее количество расщеплений составляет около 15.

Предположим, что вам нужно дерево классификации, которое не является таким комплексным (глубоким), как те, которые обучены с использованием количества разделений по умолчанию. Обучите другое дерево классификации, но установите максимальное количество разделений равным 7, что составляет примерно половину среднего количества разделений из дерева классификации по умолчанию. Перекрестная валидация модели с помощью 10-кратной перекрестной валидации.

Mdl7 = fitctree(X,Y,'MaxNumSplits',7,'CrossVal','on');
view(Mdl7.Trained{1},'Mode','graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 21 objects of type line, text.

Сравните ошибки классификации перекрестной валидации моделей.

classErrorDefault = kfoldLoss(MdlDefault)
classErrorDefault = 0.1168
classError7 = kfoldLoss(Mdl7)
classError7 = 0.1311

Mdl7 намного менее сложен и выполняет лишь немного хуже MdlDefault.

Подробнее о

расширить все

Ссылки

[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Деревья классификации и регрессии. Бока Ратон, FL: CRC Press, 1984.

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

.
Введенный в R2011a