exponenta event banner

Класс DreamTree

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

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

Описание

A 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 содержит NaNs, затем соответствующее Xbinned значения NaNs.

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.

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

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

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

CutPredictor

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

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

CutPredictorIndex

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

NodeError

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

NodeProbability

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

NodeRisk

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

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, или если Z≥C и назначение разреза для этого суррогатного разделения равно -1. Аналогично, правильный нижестоящий элемент выбирается, если Z≥C и назначение вырезания для этого суррогатного разделения равно + 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, или если Z≥C иSurrogateCutFlip для этого суррогатного разделения -1. Аналогично, правильный ребенок выбирается, если Z≥C и 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.

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

compactКомпактное дерево
compareHoldoutСравнение точности двух классификационных моделей с использованием новых данных
crossvalДерево решений с перекрестной проверкой
cvlossОшибка классификации по перекрестной проверке
edgeКрай классификации
limeЛокальные интерпретируемые модели-агностические объяснения (LIME)
lossОшибка классификации
marginПоля классификации
partialDependenceВычислить частичную зависимость
plotPartialDependenceСоздание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE)
predictПрогнозирование меток с помощью дерева классификации
predictorImportanceОценки важности предиктора для дерева классификации
pruneСоздание последовательности поддеревьев классификации путем обрезки
resubEdgeКрай классификации путем повторной субституции
resubLossОшибка классификации в результате повторного предоставления
resubMarginКлассификационные маржи по возврату
resubPredictПрогнозирование меток повторного замещения дерева классификации
surrogateAssociationСредняя прогностическая мера ассоциации для суррогатных расщеплений в дереве классификации
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] Брейман, Л., Дж. Фридман, Р. Ольшен и К. Стоун. Деревья классификации и регрессии. Бока Ратон, FL: CRC Press, 1984.

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

.
Представлен в R2011a