Оценки важности предиктора для дерева классификации
imp = predictorImportance(tree)
вычисляет оценки важности предиктора для imp
= predictorImportance(tree
)tree
путем подведения итогов изменений в риске из-за разделений на каждом предикторе и деления суммы на количество узлов ветви.
|
Вектор-строка с тем же числом элементов как количество предикторов (столбцы) в |
Загрузите ирисовый набор данных Фишера.
load fisheriris
Вырастите дерево классификации.
Mdl = fitctree(meas,species);
Вычислите оценки важности предиктора для всех переменных предикторов.
imp = predictorImportance(Mdl)
imp = 1×4
0 0 0.0907 0.0682
Первые два элемента imp
нуль. Поэтому первые два предиктора не вводят в Mdl
вычисления для классификации ирисовых диафрагм.
Оценки важности предиктора не зависят от порядка предикторов, если вы используете суррогатные разделения, но действительно зависите от порядка, если вы не используете суррогатные разделения.
Переставьте порядок столбцов данных в предыдущем примере, вырастите другое дерево классификации, и затем вычислите оценки важности предиктора.
measPerm = meas(:,[4 1 3 2]); MdlPerm = fitctree(measPerm,species); impPerm = predictorImportance(MdlPerm)
impPerm = 1×4
0.1515 0 0.0074 0
Оценки важности предиктора не являются сочетанием imp
.
Загрузите ирисовый набор данных Фишера.
load fisheriris
Вырастите дерево классификации. Задайте использование суррогатных разделений.
Mdl = fitctree(meas,species,'Surrogate','on');
Вычислите оценки важности предиктора для всех переменных предикторов.
imp = predictorImportance(Mdl)
imp = 1×4
0.0791 0.0374 0.1530 0.1529
Все предикторы имеют некоторую важность. Первые два предиктора менее важны, чем итоговые два.
Переставьте порядок столбцов данных в предыдущем примере, вырастите другое дерево классификации определение использования суррогатных разделений, и затем вычислите оценки важности предиктора.
measPerm = meas(:,[4 1 3 2]); MdlPerm = fitctree(measPerm,species,'Surrogate','on'); impPerm = predictorImportance(MdlPerm)
impPerm = 1×4
0.1529 0.0791 0.1530 0.0374
Оценки важности предиктора являются сочетанием imp
.
Загрузите census1994
набор данных. Рассмотрите модель, которая предсказывает категорию зарплаты человека, учитывая их возраст, рабочий класс, образовательный уровень, военное состояние, гонку, пол, прирост капитала и потерю и номер рабочего времени в неделю.
load census1994 X = adultdata(:,{'age','workClass','education_num','marital_status','race',... 'sex','capital_gain','capital_loss','hours_per_week','salary'});
Отобразите количество категорий, представленных в категориальных переменных с помощью summary
.
summary(X)
Variables: age: 32561x1 double Values: Min 17 Median 37 Max 90 workClass: 32561x1 categorical Values: Federal-gov 960 Local-gov 2093 Never-worked 7 Private 22696 Self-emp-inc 1116 Self-emp-not-inc 2541 State-gov 1298 Without-pay 14 NumMissing 1836 education_num: 32561x1 double Values: Min 1 Median 10 Max 16 marital_status: 32561x1 categorical Values: Divorced 4443 Married-AF-spouse 23 Married-civ-spouse 14976 Married-spouse-absent 418 Never-married 10683 Separated 1025 Widowed 993 race: 32561x1 categorical Values: Amer-Indian-Eskimo 311 Asian-Pac-Islander 1039 Black 3124 Other 271 White 27816 sex: 32561x1 categorical Values: Female 10771 Male 21790 capital_gain: 32561x1 double Values: Min 0 Median 0 Max 99999 capital_loss: 32561x1 double Values: Min 0 Median 0 Max 4356 hours_per_week: 32561x1 double Values: Min 1 Median 40 Max 99 salary: 32561x1 categorical Values: <=50K 24720 >50K 7841
Поскольку существует немного категорий, представленных в категориальных переменных по сравнению с уровнями в непрерывных переменных, стандартном CART, разделяющий предиктор алгоритм предпочитает разделять непрерывный предиктор по категориальным переменным.
Обучите дерево классификации использование целого набора данных. Чтобы вырастить несмещенные деревья, задайте использование теста искривления для разделения предикторов. Поскольку там пропускают наблюдения в данных, задают использование суррогатных разделений.
Mdl = fitctree(X,'salary','PredictorSelection','curvature',... 'Surrogate','on');
Оцените значения важности предиктора путем подведения итогов изменений в риске из-за разделений на каждом предикторе и деления суммы на количество узлов ветви. Сравните оценки с помощью столбчатого графика.
imp = predictorImportance(Mdl); figure; bar(imp); title('Predictor Importance Estimates'); ylabel('Estimates'); xlabel('Predictors'); h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none';
В этом случае, capital_gain
самый важный предиктор, сопровождаемый education_num
.
predictorImportance
вычисляет оценки важности предиктора для tree
путем подведения итогов изменений в risk из-за разделений на каждом предикторе и деления суммы на количество узлов ветви. Если tree
выращен без суррогатных разделений, эта сумма взята по лучшим разделениям, найденным в каждом узле ветви. Если tree
выращен с суррогатными разделениями, эта сумма взята по всем разделениям в каждом узле ветви включая суррогатные разделения. imp
имеет один элемент для каждого входного предиктора в данных, используемых, чтобы обучить tree
. Важность предиктора, сопоставленная с этим разделением, вычисляется как различие между риском для родительского узла и общим риском для двух дочерних элементов.
Оценки важности предиктора не зависят от порядка предикторов, если вы используете суррогатные разделения, но действительно зависите от порядка, если вы не используете суррогатные разделения.
Если вы используете суррогатные разделения, predictorImportance
вычисляет оценки, прежде чем дерево будет уменьшаться путем сокращения или слияния листов. Если вы не используете суррогатные разделения, predictorImportance
вычисляет оценки после того, как дерево будет уменьшаться путем сокращения или слияния листов. Поэтому сокращение дерева сокращением влияет на важность предиктора для дерева, выращенного без суррогатных разделений, и не влияет на важность предиктора для дерева, выращенного с суррогатными разделениями.
ClassificationTree
узлы разделений или на основе impurity или на основе node error.
Примесь означает одну из нескольких вещей, в зависимости от вашего выбора SplitCriterion
аргумент пары "имя-значение":
Индекс разнообразия Джини (gdi
) — Индекс Gini узла
где суммой является по классам i в узле, и p (i) является наблюдаемой частью классов с классом i, которые достигают узла. Узел со всего одним классом (узел pure) сделал, чтобы Gini индексировал 0
; в противном случае индекс Gini положителен. Таким образом, индекс Gini является мерой примеси узла.
Отклонение ('deviance'
) — С p (i) задал то же самое что касается индекса Gini, отклонение узла
Чистый узел имеет отклонение 0
; в противном случае отклонение положительно.
Правило Twoing ('twoing'
) — Twoing не является мерой по чистоте узла, но является различной мерой для решения, как разделить узел. Позволенный L (i) обозначает часть членов класса i в левом дочернем узле после разделения, и R (i) обозначает часть членов класса i в правильном дочернем узле после разделения. Выберите критерий разделения, чтобы максимизировать
где P (L) и P (R) является частями наблюдений, которые разделяют налево и право соответственно. Если выражение является большим, разделение сделало каждый дочерний узел более чистым. Точно так же, если выражение мало, разделение сделало каждый дочерний узел похожим друг на друга, и поэтому похожим на родительский узел. Разделение не увеличило чистоту узла.
Ошибка узла — ошибка узла является частью неправильно классифицированных классов в узле. Если j является классом с наибольшим числом обучающих выборок в узле, ошибка узла
1 – p (j).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.