ValueError: слишком много значений для распаковки (ожидается 3) при подгонке модели с использованием конвейеров - PullRequest
0 голосов
/ 12 июня 2019

Я все еще новичок в этом деле, и мне есть чему поучиться, поэтому терпите меня, пока я учусь, как это делать хорошо. Я взял набор данных Kaggle и хотел поработать над использованием конвейеров, чтобы сделать мой код более точным и упростить процесс очистки моих категориальных и числовых данных. У меня не было ошибок в моей работе, пока я не попытался подогнать свою модель в конце, где он дал мне ValueError: слишком много значений для распаковки (ожидается 3). Любая помощь будет принята с благодарностью!

Я просмотрел другие вопросы, похожие на мои, но не нашел ни одного, который бы касался конкретно моей проблемы. Я подумал, что это может быть связано с моим именованием переменных, но до сих пор я не смог обнаружить свою ошибку.

df = pd.read_csv('master.csv')

df = df.drop('country-year', axis=1)

df[' gdp_for_year ($) '] = df[' gdp_for_year ($) '].str.replace(',','')

df[' gdp_for_year ($) '] = df[' gdp_for_year ($) '].astype(str).astype(float)
#print(df.info())

y = df.suicides_no
features = ['country', 'sex', 'age', 'generation', 'year', 'population',
            'HDI for year', ' gdp_for_year ($) ', 'gdp_per_capita ($)']
X = df[features].copy()

X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2,random_state=0)

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder

numerical_transformer = SimpleImputer(strategy='mean')

categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

preprocessor = ColumnTransformer(
    transformers=[
        ('num', numerical_transformer, 'suicides_no', 'population', 'HDI for year', ' gdp_for_year ($) ', 'gdp_per_capita ($)'),
        ('cat', categorical_transformer, 'country', 'sex', 'generation', 'year', 'age')
    ])

model_1 = RandomForestRegressor(n_estimators=100, random_state=0)

my_pipeline = Pipeline(steps=[('preprocessor', preprocessor),
                              ('model', model_1)
                             ])

my_pipeline.fit(X_train, y_train)
Traceback (most recent call last):
  File "...Suicide Rates/SR.py", line 86, in <module>
    my_pipeline.fit(X_train, y_train)
  File "...pipeline.py", line 265, in fit
    Xt, fit_params = self._fit(X, y, **fit_params)
  File "...pipeline.py", line 230, in _fit
    **fit_params_steps[name])
  File "...memory.py", line 342, in __call__
    return self.func(*args, **kwargs)
  File "...pipeline.py", line 614, in _fit_transform_one
    res = transformer.fit_transform(X, y, **fit_params)
  File "...compose\_column_transformer.py", line 445, in fit_transform
    self._validate_transformers()
  File "...ompose\_column_transformer.py", line 256, in _validate_transformers
    names, transformers, _ = zip(*self.transformers)
ValueError: too many values to unpack (expected 3)
...