Sto tentando di preformare l'eliminazione di funzionalità ricorsiva usando scikit-learn
e un classificatore di foresta casuale, con OOB ROC come metodo di calcolo di ogni sottogruppo creato durante il processo ricorsivo.Eliminazione di feature ricorsive su Random Forest utilizzando scikit-learn
Tuttavia, quando si tenta di utilizzare il metodo RFECV
, ottengo un errore che dice AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
foreste casuali non hanno coefficienti di per sé, ma hanno classifiche di punteggio Gini. Quindi, mi sto chiedendo come risolvere questo problema.
Si prega di notare che io voglio usare un metodo che in modo esplicito dirmi che cosa caratterizza dal mio pandas
dataframe sono stati selezionati nel raggruppamento ottimale come io sto usando la selezione delle funzioni ricorsive per cercare di ridurre al minimo la quantità di dati che saranno immessi nel classificatore finale.
Ecco qualche esempio di codice:
from sklearn import datasets
import pandas as pd
from pandas import Series
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import RFECV
iris = datasets.load_iris()
x=pd.DataFrame(iris.data, columns=['var1','var2','var3', 'var4'])
y=pd.Series(iris.target, name='target')
rf = RandomForestClassifier(n_estimators=500, min_samples_leaf=5, n_jobs=-1)
rfecv = RFECV(estimator=rf, step=1, cv=10, scoring='ROC', verbose=2)
selector=rfecv.fit(x, y)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 336, in fit
ranking_ = rfe.fit(X_train, y_train).ranking_
File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 148, in fit
if estimator.coef_.ndim > 1:
AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
Un approccio alternativo consiste nell'utilizzare l'attributo 'feature_importances_' dopo aver chiamato' predicti' o 'predict_proba', restituisce un array di percentuali nell'ordine in cui sono stati passati. Vedere l'esempio [online] (http://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_regression.html) – EdChum
Visto questo; Voglio sapere se c'è qualcosa che mi consente di convalidare 10 volte e identificare il sottoinsieme ottimale di funzionalità, però. – Bryan
Ho dovuto fare qualcosa di simile ma l'ho fatto manualmente ordinando le funzionalità importate e poi tagliando per 1,3 o 5 funzioni alla volta. Non ho usato il tuo approccio che devo dire, quindi non so se si può fare. – EdChum