Выбор объектов с использованием значений функций в случайных лесах с помощью scikit-learn

12

Я нанесены художественные важности в случайных лесах с scikit учиться . Как улучшить прогнозирование с использованием случайных лесов, как я могу использовать информацию о графике для удаления объектов? Т.е. как определить, является ли объект бесполезным или, что еще хуже, снижение производительности случайных лесов, основываясь на информации о графике? Сюжет основан на атрибуте 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)

И, разумеется, если вы хотите сделать выбор, основываясь на каких-то других критериях, а не на «лучших функциях», то вы можете просто настроить функции соответствующим образом.

Дэвид
источник
Спасибо Дэвид. Любое понимание того, как выбрать порог, выше которого функции полезны? (откажитесь от удаления наименее полезной функции, снова запустите RF и посмотрите, как это влияет на эффективность прогнозирования)
Franck Dernoncourt
1
Как и в случае с большинством автоматических функций, я бы сказал, что большинство людей используют сетку настройки. Но использование экспертизы предметной области при выборе (и проектировании) функций, вероятно, является наиболее ценным, но на самом деле не автоматизируемым.
Дэвид