sklearn selectKbest: les variables ont été choisies?
Je vais essayer d'obtenir sklearn pour sélectionner le meilleur k variables (par exemple k=1) pour une régression linéaire. Cela fonctionne et je peux obtenir le R-carré, mais il ne veut pas me dire les variables qui ont été les meilleurs. Comment puis-je le trouver?
J'ai un code de la forme suivante (variable réelle liste est beaucoup plus longue):
X=[]
for i in range(len(df)):
X.append([averageindegree[i],indeg3_sum[i],indeg5_sum[i],indeg10_sum[i])
training=[]
actual=[]
counter=0
for fold in range(500):
X_train, X_test, y_train, y_test = crossval.train_test_split(X, y, test_size=0.3)
clf = LinearRegression()
#clf = RidgeCV()
#clf = LogisticRegression()
#clf=ElasticNetCV()
b = fs.SelectKBest(fs.f_regression, k=1) #k is number of features.
b.fit(X_train, y_train)
#print b.get_params
X_train = X_train[:, b.get_support()]
X_test = X_test[:, b.get_support()]
clf.fit(X_train,y_train)
sc = clf.score(X_train, y_train)
training.append(sc)
#print "The training R-Squared for fold " + str(1) + " is " + str(round(sc*100,1))+"%"
sc = clf.score(X_test, y_test)
actual.append(sc)
#print "The actual R-Squared for fold " + str(1) + " is " + str(round(sc*100,1))+"%"
b.get_support()
, que vous utilisez déjà, vous donne un booléen masque des fonctions sélectionnées.- Vous avez raison, je l'ai!
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser get_support:
Essayez d'utiliser
b.fit_transform()
au lieu deb.tranform()
. lefit_transform()
fonction de la forme et de transformer votre entrée X à X avec une sélection de caractéristiques et de retour de la nouvelle X.La façon de le faire est de configurer SelectKBest avec votre fonction préférée (régression dans votre cas), et puis d'obtenir la params hors de lui.
Mon code suppose que vous avez une liste
features_list
qui contient les noms de tous les titres de X.Certainement, vous pouvez écrire plus de pythonic que moi 🙂