Scikit-learn ile rastgele ormanlarda özellik içe aktarımlarını kullanarak özellik seçimi


12

Ben var scikit-öğrenme ile rastgele ormanlarda özellik sahasını ABD'ye çizilen . Rastgele ormanları kullanarak tahmini iyileştirmek için, arsa bilgilerini özellikleri kaldırmak için nasıl kullanabilirim? Peki arsa bilgilerine dayanarak, bir özelliğin rasgele orman performansında işe yaramaz mı yoksa daha da kötü bir düşüş olup olmadığını nasıl anlayabilirim? Çizim özniteliğe dayanıyor feature_importances_ve sınıflandırıcıyı kullanıyorum sklearn.ensemble.RandomForestClassifier.

Özellik seçimi için başka teknikler olduğunu biliyorum , ancak bu soruda özelliğin nasıl kullanılacağına odaklanmak istiyorum feature_importances_.


Bu özellik öneme sahip grafiklere örnekler:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Yanıtlar:


14

En feature_importances_yüksek önem derecesine sahip özellikleri seçmek için bu özelliği kullanabilirsiniz . Örneğin, önemine göre en iyi K özelliklerini seçmek için aşağıdaki işlevi kullanabilirsiniz.

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

Veya bir boru hattı kullanıyorsanız aşağıdaki sınıf

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]]

Yani mesela:

>>> 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)

Ve açıkça "top k özellikleri" dışında bazı kriterlere göre seçmek istiyorsanız, o zaman fonksiyonları buna göre ayarlayabilirsiniz.


Teşekkürler David. Hangi özelliklerin yararlı olduğu konusunda eşiğin nasıl seçileceğine dair bir fikir var mı? (en az kullanışlı özelliği kaldırmak,
RF'yi

1
Çoğu otomatik özellik seçiminde olduğu gibi, çoğu insanın bir ayar ızgarası kullandığını söyleyebilirim. Ancak özellikleri seçerken (ve mühendislik yaparken) alan uzmanlığını kullanmak muhtemelen en değerlidir - ancak gerçekten otomatikleştirilemez.
David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.