Объект 'numpy.ndarray' не имеет атрибута 'столбцы' - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь выяснить важность функции для задачи классификации случайных лесов.Но это дает мне следующую ошибку:

У объекта 'numpy.ndarray' нет атрибута 'столбцы'

Вот часть моего кода:

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)


Я ожидаю, что это должно дать оценку важности функций для каждого столбца моего набора данных.(Примечание: исходные данные в формате CSV)

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Используйте это:

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)


0 голосов
/ 21 июня 2019

Таким образом, X_train, полученное из train_test_split, на самом деле является массивом, который никогда не будет иметь столбцов.Во-вторых, вы запрашиваете значения, когда вы набираете X из dataset, который возвращает numpy.ndarry, а не df.

Вам необходимо изменить строку

<strike>feature_importances = pd.DataFrame(rf.feature_importances_,index = X_train.columns,columns=['importance']).sort_values('importance',ascending=False) </strike>

до

columns_ = dataset.iloc[:1, 3:12].columns

feature_importances = pd.DataFrame(rf.feature_importances_,index = columns_,columns=['importance']).sort_values('importance',ascending=False)
...