Вибір особливостей за допомогою імпортів функцій у випадкових лісах із науковим досвідом


12

Я побудував схему імпортних функцій у випадкових лісах за допомогою наукової роботи . Для того, щоб покращити прогнозування за допомогою випадкових лісів, як я можу використовувати інформацію про ділянки для видалення функцій? Тобто як визначити, чи є марка марною або навіть гіршою, що зменшує продуктивність випадкових лісів, спираючись на інформацію про ділянку? Сюжет заснований на атрибуті, feature_importances_і я використовую класифікатор sklearn.ensemble.RandomForestClassifier.

Мені відомо, що існують інші методи вибору особливостей , але в цьому питанні я хочу зосередитися на тому, як використовувати функцію feature_importances_.


Приклади таких графіків важливості функції:

введіть тут опис зображення

введіть тут опис зображення

Відповіді:


14

Ви можете просто використовувати feature_importances_атрибут для вибору функцій з найбільшою оцінкою важливості. Так, наприклад, ви можете використовувати наступну функцію для вибору найкращих функцій K за важливістю.

def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

Або якщо ви використовуєте конвеєр наступного класу

class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

Так, наприклад:

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

І зрозуміло, що якщо ви хочете обрати на основі якихось інших критеріїв, окрім "топових k функцій", то можете просто відповідно налаштувати функції.


Дякую, Девід. Будь-яке розуміння того, як вибрати поріг, над яким корисні функції? (відкладіть від видалення найменш корисної функції, запустіть РФ знову і подивіться, як це впливає на показники прогнозування)
Франк Дернонкурт

1
Як і у більшості автоматизованих функцій вибору функцій, я б сказав, що більшість людей використовують налаштування сітки. Але використання доменної експертизи при виборі (та інженерних) функцій, мабуть, найцінніше - але насправді не є автоматизованим.
Девід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.