1
votes

L'objet 'numpy.ndarray' n'a pas d'attribut 'colonnes'

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)


1 commentaires

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


3 Réponses :


0
votes

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

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

< pré> XXX


5 commentaires

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



1
votes

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)



2 commentaires

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?



0
votes

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


0 commentaires