1

J'utilise l'estimation récursive des caractéristiques (RFE) pour la sélection des caractéristiques. Cela fonctionne en prenant itérativement un estimateur tel qu'un classificateur SVM, en l'ajustant aux données, et en supprimant les caractéristiques avec les poids les plus faibles (coefficients).Comment obtenir les coefficients de RFE en utilisant sklearn?

Je peux adapter cela aux données et effectuer la sélection de caractéristiques. Cependant, je veux ensuite récupérer les poids appris pour chaque caractéristique de la RFE.

J'utilise le code suivant pour initialiser un objet classificateur et un objet RFE, et je les adapte aux données.

svc = SVC(C=1, kernel="linear") 
    rfe = RFE(estimator=svc, n_features_to_select=300, step=0.1) 
    rfe.fit(all_training, training_labels) 

J'essaie alors d'imprimer les coefficients

print ('coefficients',svc.coef_) 

et recevez:

AttributeError: 'RFE' object has no attribute 'dual_coef_' 

Selon sklearn documentation, l'objet classificateur doit avoir cet attribut:

coef_ : array, shape = [n_class-1, n_features] 
Weights assigned to the features (coefficients in the primal problem). This is only 
available in the case of a linear kernel. 
coef_ is a readonly property derived from dual_coef_ and support_vectors_. 

J'utilise un noyau linéaire, donc ce n'est pas le problème. Est-ce que quelqu'un peut expliquer pourquoi je suis incapable de récupérer les coefficients? Et y a-t-il un moyen de contourner cela?

Répondre

1

2 minutes après la publication, j'ai jeté un autre coup d'oeil à la documentation pour RFE et réalisé une solution partielle.

Les objets RFE ont l'objet estimateur comme attribut. Par conséquent, je peux appeler

print ('coefficients',rfe.estimator_.coef_) 

Et obtenir les coefficients pour les fonctionnalités sélectionnées. (c'est-à-dire que cela renvoie les coefficients pour les 300 principales caractéristiques car j'ai défini n_features_to_select = 300 plus tôt).

Toutefois, je ne parviens toujours pas à obtenir les coefficients pour les autres entités non sélectionnées. Pour chaque itération du RFE, il forme le classificateur et obtient de nouveaux coefficients pour chaque entité. Idéalement, j'aimerais accéder aux coefficients appris à chaque itération.

(Donc, si je commence avec 3000 fonctionnalités, et utilise des fonctionnalités de taille de pas 300, la première itération je veux accéder à 3000 coefficients, l'itération suivante je veux 2700 coefficients pour les 2700 fonctionnalités restantes, la troisième itération je veux accéder les coefficients 2400, etc.)

+0

Vous pouvez répliquer le mécanisme RFE manuellement et enregistrer à chaque étape le vecteur 'coef_'. Pour chaque étape, adaptez le SVC aux données, enregistrez le vecteur 'coef_' et supprimez le' step'% des entités ayant les coefficients les plus faibles. BTW est préférable de modifier votre message avec une mise à jour que de poster la mise à jour comme réponse. – dukebody