J'essaie de découvrir l'importance des fonctionnalités pour la tâche de classification aléatoire des forêts. Mais cela me donne l'erreur suivante:
L'objet 'numpy.ndarray' n'a pas d'attribut 'colonnes'
Voici une partie de mon code:
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline # importing dataset dataset=pd.read_csv('Churn_Modelling.csv') X = dataset.iloc[:,3:12].values Y = dataset.iloc[:,13].values #spliting dataset into test set and train set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.20) from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators=20, random_state=0) regressor.fit(X_train, y_train) #feature importance feature_importances = pd.DataFrame(rf.feature_importances_,index = X_train.columns,columns=['importance']).sort_values('importance',ascending=False)
Je pense que cela devrait donner le score d'importance des fonctionnalités pour chaque colonne de mon ensemble de données. (Remarque: les données d'origine sont au format CSV)
3 Réponses :
Donc X_train
qui sort de train_test_split
est en fait un tableau numpy qui n'aura jamais de colonnes.
Deuxièmement, vous demandez des valeurs lorsque vous créez X
à partir de dataset
qui renvoie le numpy.ndarry et non un df.
Vous devez changer votre ligne p >
feature_importances = pd.DataFrame (rf.feature_importances_, index = X_train.columns, columns = ['importance']). sort_values ('importance', ascending = False)
à
columns_ = dataset.iloc [: 1, 3:12] .columns
Cela donne l'erreur suivante - AttributeError: l'objet 'numpy.ndarray' n'a pas d'attribut 'colonnes'
Même lorsque vous avez remplacé X_train
par X
?
Deuxièmement, vous voudrez utiliser regressor
au lieu de rf
Mec, désolé, mettez à jour la réponse, j'ai manqué que vous ayez pris des valeurs X = dataset.iloc [:, 3:12] .values
que puis-je faire maintenant ?? toute suggestion s'il vous plaît
Utilisez ceci:
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline # importing dataset dataset=pd.read_csv('Churn_Modelling.csv') X = dataset.iloc[:,3:12].values Y = dataset.iloc[:,13].values #spliting dataset into test set and train set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.20) from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators=20, random_state=0) regressor.fit(X_train, y_train) #feature importance feature_importances = pd.DataFrame(regressor.feature_importances_,index = dataset.columns,columns=['importance']).sort_values('importance',ascending=False)
il donne l'erreur suivante: ValueError: la forme des valeurs passées est (468, 1), les indices impliquent (14, 1)
pouvez-vous publier les données?
Les fonctions iloc et loc peuvent être appliquées uniquement à la trame de données Pandas. Vous les appliquez à un tableau. Solution: Convertissez le tableau en dataframe puis appliquez l'iloc ou loc
L'erreur vous indique exactement quel est le problème. Vous essayez d'accéder à X_train.columns, mais X_train est un tableau numpy et non un dataframe pandas, et il n'a pas de colonnes d'attributs