Оценки предикторной важности для дерева классификации
imp = predictorImportance(tree)
вычисляет оценки предикторной важности для imp
= predictorImportance(tree
)tree
путем суммирования изменений риска из-за разбиений на каждом предикторе и деления суммы на количество узлов ветви.
|
A вектора-строки с таким же количеством элементов, как и количество предикторов (столбцов) в |
Загрузите набор данных радужки Фишера.
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
Поскольку в категориальных переменных представлено немного категорий по сравнению с уровнями в непрерывных переменных, стандартный алгоритм разделения предикторов ТЕЛЕЖКА предпочитает разделение непрерывного предиктора над категориальными переменными.
Обучите дерево классификации, используя весь набор данных. Чтобы вырастить объективные деревья, задайте использование теста кривизны для разделения предикторов. Поскольку в данных отсутствуют наблюдения, задайте использование суррогатных расщеплений.
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
вычисляет значения предикторов в дереве путем суммирования изменений в риске узла из-за разбиения на каждый предиктор, а затем деления суммы на общее количество узлов ветви. Изменение риска узла является различием между риском для родительского узла и общим риском для двух дочерних элементов. Для примера, если дерево разделяет родительский узел (для примера, узел 1) на два дочерних узла (для примера, узлов 2 и 3), то predictorImportance
увеличивает важность разделения предиктора на
(R1 - R2 - R3 )/ N ветвь,
где Ri - риск узла для i, а N ветвь - общее количество узлов филиала. node risk определяется как ошибка узла или примесь узла, взвешенная вероятностью узла:
Ri = <reservedrangesplaceholder1> <reservedrangesplaceholder0>,
где Pi - вероятность узла i, и Ei - это ошибка узла (для дерева, выращенного путем минимизации критерия двойки) или примесь узла (для дерева, выращенного путем минимизации критерия примеси, такого как индекс Джини или отклонение) узла i.
Оценки предикторной важности зависят от того, используете ли вы суррогатные расщепления для обучения.
Если вы используете суррогатные расщепления, predictorImportance
суммирует изменения риска узла по всем разделениям в каждом узле ветви, включая суррогатные разделения. Если вы не используете суррогатные разделения, то функция принимает сумму над лучшими разделениями, найденными в каждом узле ветви.
Оценки предикторной важности не зависят от порядка предикторов, если вы используете суррогатные расщепления, но зависят от порядка, если вы не используете суррогатные расщепления.
Если вы используете суррогатные расщепления, predictorImportance
вычисляет оценки до уменьшения дерева путем обрезки (или слияния листьев). Если вы не используете суррогатные расщепления, predictorImportance
вычисляет оценки после уменьшения дерева путем обрезки. Поэтому обрезка влияет на предикторную важность для дерева, выращенного без суррогатных расщеплений, и не влияет на предикторную важность для дерева, выращенного с суррогатными расщеплениями.
Дерево решений разделяет узлы на основе impurity или node error.
Примесь означает одну из нескольких вещей, в зависимости от вашего выбора SplitCriterion
аргумент пары "имя-значение":
Индекс разнообразия Джини (gdi
) - Индекс Джини узла:
где сумма по классам, i в узле, и p (i) является наблюдаемой долей классов с i классов, которые достигают узла. Узел только с одним классом (узел pure) имеет индекс Джини 0
; в противном случае индекс Джини положителен. Так что индекс Джини является мерой узла примеси.
Отклонение ('deviance'
) - С p (i), заданными так же, как для индекса Джини, отклонение узла является
Чистый узел имеет отклонение 0
; в противном случае отклонение положительное.
Правило Twoing ('twoing'
) - Twoing не является мерой чистоты узла, но является другой мерой для принятия решения о том, как разделить узел. Пусть L (i) обозначает долю представителей класса, i в левом дочернем узле после разделения, а R (i) обозначает долю представителей класса, i в правом дочернем узле после разделения. Выберите критерий разделения для максимизации
где P (L) и P (R) являются частями наблюдений, которые разделяются налево и вправо соответственно. Если выражение большое, разделение сделало каждый дочерний узел более чистым. Точно так же, если выражение маленькое, разделение сделало каждый дочерний узел похожим друг на друга, и, следовательно, подобным родительскому узлу. Разделение не увеличило чистоту узла.
Ошибка узла - ошибка узла - это часть неправильно классифицированных классов в узле. Если j является классом с наибольшим количеством обучающих выборок в узле, ошибка узла
1 – p (<reservedrangesplaceholder0>).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.