Класс ClassificationTree

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

Дерево выбора из двух альтернатив для классификации

Описание

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

Конструкция

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

Свойства

BinEdges

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

Числовые предикторы интервалов программного обеспечения, только если вы задаете аргумент пары "имя-значение" 'NumBins' как положительный целочисленный скаляр когда обучение модель с древовидными учениками. Свойство 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 содержит NaN s, то соответствующими значениями Xbinned является NaN s.

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, если его истинным классом является 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 - массив ячеек элемента, указывающий на тип сокращения в каждом узле в tree, где n является количеством узлов. Для каждого узла i CutType{i}:

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

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

  • '' — Если i является вершиной.

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

CutPredictor

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

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

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 - массив ячеек элемента с именами самых вероятных классов в каждом узле tree, где n является количеством узлов в дереве. Каждый элемент этого массива является вектором символов, равным одним из имен классов в ClassNames.

NodeError

n - вектор элемента ошибок узлов в tree, где n является количеством узлов. NodeError(i) является misclassification вероятностью для узла i.

NodeProbability

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

NodeRisk

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

NodeSize

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

NumNodes

Количество узлов в tree.

Parent

n - вектор элемента, содержащий количество родительского узла для каждого узла в 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 - элемент логический вектор, указывающий, какие строки исходных данных о предикторе (X) использовались в подборе кривой. Если программное обеспечение использует все строки X, то RowsUsed является пустым массивом ([]).

ScoreTransform

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

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

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

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

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

    tree.ScoreTransform = @function;

SurrogateCutCategories

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

SurrogateCutFlip

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

SurrogateCutPoint

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

SurrogateCutType

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

SurrogateCutPredictor

n - массив ячеек элемента имен переменных использовал для суррогатных разделений в каждом узле в 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.

Методы

компактныйКомпактное дерево
crossvalПерекрестное подтвержденное дерево решений
cvlossОшибка классификации перекрестной проверкой
черносливПроизведите последовательность поддеревьев путем сокращения
resubEdgeРебро классификации перезаменой
resubLossОшибка классификации перезаменой
resubMarginПоля классификации перезаменой
resubPredictПредскажите метки перезамены дерева классификации

Унаследованные методы

реброРебро классификации
потеряОшибка классификации
полеПоля классификации
предсказатьПредскажите метки с помощью дерева классификации
predictorImportanceОценки важности предиктора
surrogateAssociationСледует иметь в виду прогнозирующую меру ассоциации для суррогатных разделений в дереве решений
представлениеДерево представления

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

Значение. Чтобы изучить, как классы значения влияют на операции копии, смотрите Копирование Объектов (MATLAB).

Примеры

свернуть все

Вырастите дерево классификации использование набора данных 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)

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

Среднее количество разделений - приблизительно 15.

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

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

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

classErrorDefault = kfoldLoss(MdlDefault)
classErrorDefault = 0.1140
classError7 = kfoldLoss(Mdl7)
classError7 = 0.1254

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

Больше о

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

Ссылки

[1] Бреимен, L., Дж. Фридман, Р. Олшен и К. Стоун. Классификация и деревья регрессии. Бока-Ратон, FL: нажатие CRC, 1984.

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

Введенный в R2011a