2016-11-16 2 views
0

Je souhaite appliquer une méthode wrapper comme l'élimination des entités récursives sur mon problème de régression avec scikit-learn. Recursive feature elimination with cross-validation donne un bon aperçu, comment régler le nombre de fonctionnalités automatiquement.Élimination récursive des fonctions avec validation croisée pour la régression dans scikit-learn

J'ai essayé ceci:

modelX = LogisticRegression() 
rfecv = RFECV(estimator=modelX, step=1, scoring='mean_absolute_error') 
rfecv.fit(df_normdf, y_train) 
print("Optimal number of features : %d" % rfecv.n_features_) 

# Plot number of features VS. cross-validation scores 
plt.figure() 
plt.xlabel("Number of features selected") 
plt.ylabel("Cross validation score (nb of correct classifications)") 
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_) 
plt.show()` 

mais je reçois un message d'erreur comme

`The least populated class in y has only 1 members, which is too few. 
The minimum number of labels for any class cannot be less than n_folds=3. % (min_labels, self.n_folds)), Warning) 

L'avertissement sonne comme j'ai un problème de classification, mais ma tâche est un problème de régression. Que puis-je faire pour obtenir un résultat et qu'est-ce qui ne va pas?

+0

Wan vous nous montrer votre 'y_train'? – MMF

+0

Mon y_train a 1 colonne et ~ 10.000 lignes avec des valeurs comprises entre 1 et 200. – matthew

+0

Les valeurs sont-elles des entiers? Si oui, je pense qu'il le considère comme un problème de classification multiclasse. Essayez de convertir les valeurs en flottants. – MMF

Répondre

0

Voici ce qui est arrivé:

Par défaut, lorsque le nombre de plis n'est pas indiqué par l'utilisateur, la validation croisée de la RFE utilise une validation croisée 3-fold. Jusqu'ici tout va bien.

Cependant, si vous regardez le documentation, il utilise également StartifiedKFold qui garantit que les plis sont créés en conservant le pourcentage d'échantillons pour chaque classe. Par conséquent, puisqu'il semble (selon l'erreur) que certains éléments de votre sortie y sont uniques, ils ne peuvent pas être en même temps dans 3 plis différents. Il jette une erreur!

L'erreur provient de here. Vous devez ensuite utiliser un pli en K non stratifié: KFold.

La documentation de RFECV dit que: "If the estimator is a classifier or if y is neither binary nor multiclass, sklearn.model_selection.KFold is used."