#python #python-3.x #scikit-learn #pipeline
#python #python-3.x #scikit-learn #конвейер
Вопрос:
Я пытаюсь создать пользовательский преобразователь для конвейера sklearn, который будет извлекать среднюю длину слова определенного текста, а затем применять к нему стандартный масштабатор для стандартизации набора данных. Я передаю серию текстов в конвейер.
class AverageWordLengthExtractor(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def average_word_length(self, text):
return np.mean([len(word) for word in text.split( )])
def fit(self, x, y=None):
return self
def transform(self, x , y=None):
return pd.DataFrame(pd.Series(x).apply(self.average_word_length))
затем я создал конвейер, подобный этому.
pipeline = Pipeline(['text_length', AverageWordLengthExtractor(),
'scale', StandardScaler()])
Когда я выполняю fit_transform в этом конвейере, я получаю сообщение об ошибке,
File "custom_transformer.py", line 48, in <module>
main()
File "custom_transformer.py", line 43, in main
'scale', StandardScaler()])
File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 114, in __init__
self._validate_steps()
File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 146, in _validate_steps
names, estimators = zip(*self.steps)
TypeError: zip argument #2 must support iteration
Комментарии:
1. Пожалуйста, укажите структуру
Series
и поток выполнения.2. @sentence, я передаю серию pandas с одним столбцом, например, сообщение (имя столбца) Обновление погоды — холодный фронт с Кубы, который может пройти над Гаити, Ураган закончился или еще не закончился, Ищу кого-то, но без имени ООН сообщает, что Леоган 80-90 уничтожен. Функционирует только больница Сент-Круа. Отчаянно нуждается в поставках. говорит: западная часть Гаити, остальная часть страны сегодня и вечером Информация о Национальном дворце — Пожалуйста, нам нужны палатки и вода. Мы в бункере, спасибо! >> прямо сейчас я просто пытаюсь передать это в конвейер, который не работает.
3. @anidev711 вам нужна дополнительная помощь?
4. Да, @JanK ваш ответ помог избавиться от этой проблемы, но теперь я получаю другую ошибку.
File "custom_transformer.py", line 48, in <module> main() File "custom_transformer.py", line 43, in main 'scale', StandardScaler())]) File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 114, in __init__ self._validate_steps() File "/opt/conda/lib/python3.6/site-packages/sklearn/pipeline.py", line 146, in _validate_steps names, estimators = zip(*self.steps) ValueError: too many values to unpack (expected 2)
5. @anidev711 Если вы считаете, что новая ошибка не связана, подумайте о создании нового вопроса и пометьте этот вопрос как ответ.
Ответ №1:
Pipeline
Конструктор ожидает аргумент steps
, который представляет собой список кортежей.
Исправленная версия:
pipeline = Pipeline([('text_length', AverageWordLengthExtractor()),
('scale', StandardScaler())])
Дополнительная информация в официальных документах.