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