Особливість важливості у науковому навчанні Random Forest демонструє дуже високий рівень стандартного відхилення


13

Я використовую випадковий класифікатор лісового науку і хочу вивчити важливість функції, наприклад, у цьому прикладі .

Однак мій результат зовсім інший, в тому сенсі, що значення важливості функції майже завжди більше, ніж значення функції (див. Додане зображення).

особливість важливість

Чи можна мати таку поведінку, чи я роблю деякі помилки, будуючи це?

Мій код такий:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier()
clf.fit(predictors.values, outcome.values.ravel())

importance = clf.feature_importances_
importance = pd.DataFrame(importance, index=predictors.columns, 
                          columns=["Importance"])

importance["Std"] = np.std([tree.feature_importances_
                            for tree in clf.estimators_], axis=0)

x = range(importance.shape[0])
y = importance.ix[:, 0]
yerr = importance.ix[:, 1]

plt.bar(x, y, yerr=yerr, align="center")

plt.show()

IIUC, predictorsповертає посилання, на numpy arrayяке ви посилаєтесь на pandas Dataframeоб'єкт, його стовпцями, що невірно, оскільки numpy arraysвони не мають атрибута columns.
Нікіл Мавели

Вибачте, це був помилковий помилковий код. прогнози і результат - два pandas DataFrameза формою m x nі m x 1. Це має бути зрозуміло зараз.
gc5

2
Я натрапив на ті ж самі висновки деякий час тому. Можливо, це пов’язано з тим, що низка особливостей є важливою, але оскільки функції дерева можуть бути високими або низькими в дереві рішень (оскільки під час розщеплення пропонуються лише випадкові підмножини), їх значення сильно змінюється від дерева до дерева дерево, що призводить до високого стандартного відхилення.
Арчі

Чудовий пост, я зіткнувся з ідентичною проблемою, як ви бачите на малюнку. Є пакет, tsfreshякий допоміг мені визначити відповідні функції та скоротити мої функції з 600+ до приблизно 400. [Мої найбільші 35 особливостей ] ( i.stack.imgur.com/0MROZ.png ) Навіть при цьому алгоритм працює добре для мене. У мене є бінарна класифікація, успіх / невдача. У мене практично немає помилкових успіхів, але я пропускаю значні відсотки успіху. Усі здогадки вище здаються розумними. Це може бути випадок, коли потрібно розширити навчальний і тестовий набір. У мене менше
супергероя

Відповіді:


3

Ви використовуєте RandomForest із типовою кількістю дерев, яка становить 10. Для приблизно 30 функцій це занадто мало. Тому стандартне відхилення велике. Спробуйте принаймні 100 чи навіть 1000 дерев, як

clf = RandomForestClassifier(n_estimators=1000)

Для більш досконалого аналізу ви також можете перевірити, наскільки велика кореляція між вашими особливостями.


Вибачте, lanenok, кількість дерев не є типовим. Я ставлю приклад коду (і це справедливо для всіх параметрів, наприклад min_samples_split), оскільки я не можу розкрити дані, над якими працюю. Однак це пов’язано з кількістю дерев та іншими параметрами, чи я роблю тут деякі помилки?
gc5

2

Ваш результат не такий дивний. Як стверджує lanenok , вам слід на першому кроці збільшити кількість дерев, щоб переконатися, що ви отримаєте "статистичний" результат щодо імпортних ознак.

Однак, як і цей документ Genuer et al. (2010) показує, що ви можете фактично використовувати стандартні відхилення для усунення функцій. Цитую: " Ми можемо побачити, що стандартне відхилення справжніх змінних велике порівняно з гучним змінним, яке близьке до нуля ".


Використання стандартного відхилення в цьому прикладі для усунення ознак усуне всі функції. xD
Хорхе Лейтао

Ха-ха, я не зовсім впевнений, я думаю, ти міг би сміливо відкинути функції в крайній правій частині? Як би там не було, головне, що я намагаюся зробити, - це те, що високі стандартні відхилення не такі дивні, і що ви можете реально використовувати їх у своїй стратегії для усунення особливостей.
Арчі

1

Спробуйте clf = RandomForestClassifier(max_features=None). Параметри max_featuresза замовчуванням, 'auto'які прирівнюються до sqrt(n_features). max_featuresописується як "Кількість функцій, які слід враховувати під час пошуку найкращого розколу". Лише перегляд невеликої кількості функцій у будь-якій точці дерева рішень означає, що важливість однієї функції може сильно відрізнятися у багатьох деревах. Отже, не дивіться на випадкову підмножину, просто перегляньте всі функції на кожному рівні дерева.


1
Зауважте, це еквівалент звичайним мішкам дерев. "Випадковий" у випадкових лісах означає розглянути випадковий підмножина ознак на кожному розщепленні, як правило, sqrt(n_features)або log2(n_features). max_features=Noneбільше не розглядає випадковий підмножина функцій. Я не впевнений, чи вплине це на рішення, запропоноване вище. Однією з можливостей є те, що багато особливостей просто мають велику кількість важливості і тому сильно різняться в межах ансамблю дерев. А може, не вистачає зразків, і тому не кожна особливість враховується часом потрапляння на лист.
Джаміс

1

Поширеною причиною цього є те, що параметри, які ви надали (або за замовчуванням) RandomForestClassifierне підходять для вашого набору даних.

Поширеним способом вирішення цієї проблеми є пошук простору гіперпараметра, використовуючи, наприклад GridSearchCV:

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, make_scorer

param_grid = {'n_estimators': [10, 100, 1000], 'max_features': [5, 10, 20, 30]}
clf = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring=make_scorer(accuracy_score))

param_gridтут перестановки параметрів, за якими потрібно шукати, і make_scorer(accuracy_score)міра, яку ви хочете оптимізувати.

Зверніть увагу, що accuracy_scoreпідходить для збалансованих наборів, але не для незбалансованих наборів. Виберіть відповідний показник для вашої конкретної мети.


0

Причин може бути кілька. Кількість дерев та глибина можуть змінити ваші результати. Якщо ваша модель не працює добре після вибору параметрів (перехресна перевірка тощо), можливо, тому, що ваші функції не дуже прогнозовані, тому їх вибирають майже «випадковим чином», що призводить до високих стандартних відхилень від дерева до дерева. Але є й інші можливості, наприклад, можливо, що ваші особливості сильно співвідносяться. Трохи більше інформації було б корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.