Подгонка регрессионной модели вызывает «ValueError:« Имя столбца »отсутствует в списке» в sklearn - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь подогнать некоторые модели линейной регрессии, используя DataFrame данных nba игроков для прогнозирования целевой переменной 'ORPM'.Но при выполнении следующего кода:

X = orpm_data.drop(['Player','Lg','ORPM'],axis=1)
y = orpm_data['ORPM']
linreg = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('linreg', LinearRegression())])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, 
random_state=99)
linreg.fit(X_train,y_train)

выдается ошибка:

ValueError: 'ORPM' отсутствует в списке

.Чего мне не хватает?

РЕДАКТИРОВАТЬ в ответ на комментарии:

print (X) печатает целый огромный фрейм данных, который я не могу представить - кроме X.info() возвращает это:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 603 entries, 0 to 602
Data columns (total 29 columns):
Tm        603 non-null object
Season    603 non-null object
Age       603 non-null int64
G         603 non-null int64
GS        603 non-null int64
MP        603 non-null int64
FG        603 non-null float64
FGA       603 non-null float64
2P        603 non-null float64
2PA       603 non-null float64
3P        603 non-null float64
3PA       603 non-null float64
FT        603 non-null float64
FTA       603 non-null float64
ORB       603 non-null float64
DRB       603 non-null float64
TRB       603 non-null float64
AST       603 non-null float64
STL       603 non-null float64
BLK       603 non-null float64
TOV       603 non-null float64
PF        603 non-null float64
PTS       603 non-null float64
FG%       600 non-null float64
2P%       600 non-null float64
3P%       517 non-null float64
eFG%      600 non-null float64
FT%       588 non-null float64
TS%       600 non-null float64
dtypes: float64(23), int64(4), object(2)
memory usage: 136.7+ KB

print (y) возвращает:

None
0      2.38
1      3.87
2     -1.21
3      1.58
4     -4.30
5     -0.62
       ... 
598   -2.64
599    0.95
600   -2.98
601   -0.98
602   -2.08
Name: ORPM, Length: 603, dtype: float64

EDIT2 : более подробная информация о конвейере предварительной обработки

numeric_features = ['Age', 'G', 'GS', 'MP', 'FG', 'FGA',
       '2P', '2PA', '3P', '3PA', 'FT', 'FTA', 'ORB', 'DRB', 'TRB', 'AST',
       'STL', 'BLK', 'TOV', 'PF', 'PTS', 'FG%', '2P%', '3P%', 'eFG%', 'FT%',
       'TS%','ORPM']
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(missing_values=np.nan, strategy='mean')),
    ('scaler', StandardScaler()),
    ('PCA', PCA())])

categorical_features = ['Tm', 'Season']
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant',fill_value='missing')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))])

preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)])

Полная трассировка стека здесь: https://github.com/aj-1000/debugging-regression-model/blob/master/README.md


Решено

Проблема решена путем удаления ORPM из numeric_features - потому что я отбрасывал этот столбец перед передачей данных в конвейер.

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