Регрессия выбора функций о Scikit-Learn - PullRequest
0 голосов
/ 14 января 2020

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

#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]"

1 Ответ

0 голосов
/ 14 января 2020

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

cor_target = abs(cor[y])

Который, по-вашему, изменился на:

cor_target = abs(cor["NEAR"])

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

Ваш новый код должен работать с учетом целевой переменной NEAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...