Регрессия выбора функций о Scikit-learn

У меня есть файл данных excel, включая предикторы и цель/ответ. Я назвал цель «РЯДОМ», и у каждого предиктора есть свое имя. Для изучения выбора признаков я использовал этот код, но что-то пошло не так, и я не мог понять влияние каждого из предикторов на мою цель. Код, который я написал, приведен ниже. Вся помощь будет оценена.

#importing libraries
from sklearn.datasets import load_boston
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
%matplotlib inline
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
from sklearn.linear_model import RidgeCV, LassoCV, Ridge, Lasso

# reading files
x = pd.read_excel("train.xlsx")

X = x.iloc[:, 0:5]

y = x.iloc[:,5]

#Using Pearson Correlation
plt.figure(figsize=(12,10))
cor = X.corr()
sns.heatmap(cor, annot=True, cmap=plt.cm.Reds)
plt.show()
#Correlation with output variable
cor_target = abs(cor["NEAR"])
#Selecting highly correlated features
relevant_features = cor_target[cor_target > 0.5]
relevant_features 

но я получил эту ошибку

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-28-3468dfbea7e1> in <module>
      1 #Correlation with output variable
----> 2 cor_target = abs(cor[y])
      3 #Selecting highly correlated features
      4 relevant_features = cor_target[cor_target > 0.5]
      5 relevant_features

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2984             if is_iterator(key):
   2985                 key = list(key)
-> 2986             indexer = self.loc._convert_to_indexer(key, axis=1, raise_missing=True)
   2987 
   2988         # take() does not accept boolean indexers

~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter, raise_missing)
   1283                 # When setting, missing keys are not allowed, even with .loc:
   1284                 kwargs = {"raise_missing": True if is_setter else raise_missing}
-> 1285                 return self._get_listlike_indexer(obj, axis, **kwargs)[1]
   1286         else:
   1287             try:

~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
   1090 
   1091         self._validate_read_indexer(
-> 1092             keyarr, indexer, o._get_axis_number(axis), raise_missing=raise_missing
   1093         )
   1094         return keyarr, indexer

~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
   1175                 raise KeyError(
   1176                     "None of [{key}] are in the [{axis}]".format(
-> 1177                         key=key, axis=self.obj._get_axis_name(axis)
   1178                     )
   1179                 )

KeyError: "None of [Float64Index([-0.00398046,  0.00205926, -0.00304156,  0.00206342,  0.00797852,\n               0.00619195,  0.00368038,  0.00415858,  0.00454432,  0.00536623,\n              ...\n               0.00201033,  0.00184575,  0.00165407,  0.00148248,  0.00131221,\n               0.00103276,  0.00084394,  0.00078347,  0.00069564,  0.00058571],\n             dtype='float64', length=209076)] are in the [columns]"


person Hossein Amini    schedule 14.01.2020    source источник


Ответы (1)


То, что кажется проблемой (которая отличается от кода, который вы разместили), появляется в строке:

cor_target = abs(cor[y])

Который вы, кажется, изменили на:

cor_target = abs(cor["NEAR"])

Проблема с кодом заключается в том, что вы передаете переменную y, которая служит массивом для кадра данных cor. Когда вы делаете это, pandas пытается выбрать имена столбцов со значениями, равными массиву y. Это означает, что он будет искать столбцы с именем -0.00398046, 0.00205926, -0.00304156 и т. д., которые не существуют, и, следовательно, ошибка.

Ваш новый код должен работать, если целевая переменная — NEAR.

person Celius Stingher    schedule 14.01.2020