Python Склеарн Трубопровод с массивом

1

Я пытаюсь создать классификатор с использованием Python и Sklearn. В настоящее время все мои данные импортированы успешно. Я пытаюсь следовать учебнику отсюда, меняя его немного по мере того, как я иду. Позже в проекте я понял, что их данные по обучению и тестированию сильно отличаются от моих. Если я правильно понял, у них было что-то вроде этого:

X_train = ['Article or News article here', 'Anther News Article or Article here', ...]
y_train = ['Article Type', 'Article Type', ...]
#Same for the X_test and y_test

Хотя у меня было что-то вроде этого:

X_train = [['Dylan went in the house. Robert left the house', 'Where is Dylan?'], ['Mary ate the apple. Tom ate the cake', 'Who ate the cake?'], ...]
y_train = ['In the house.', 'Tom ate the cake']
#Same for the X_test and y_test

Когда я попытался подготовить классификатор с помощью этого трубопровода:

text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
     ('tfidf', TfidfTransformer(use_idf=True)),
     ('clf', SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3, random_state=42, 
     verbose=1)),])

Я получаю сообщение об ошибке:

AttributeError: 'list' object has no attribute 'lower'

На этой строке:

text_clf.fit(X_train, y_train)

После исследования я теперь знаю, что это потому, что я X_train массив для своих данных X_train вместо строки. Поэтому мой вопрос: как построить конвейер, который будет принимать массивы для моих данных X_train и строку для моих данных y_train? Возможно ли это с трубопроводом?

Теги:
scikit-learn
pipeline

1 ответ

1
Лучший ответ

Вы можете использовать атрибут tokenizer чтобы передать CountVectorizer каждому списку в виде отдельного документа и перевести его в lowercase в значение False

text_clf = Pipeline([('vect', CountVectorizer(tokenizer=lambda single_doc: single_doc,stop_words='english',lowercase=False)),
 ('tfidf', TfidfTransformer(use_idf=True)),
 ('clf', SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3, random_state=42, 
 verbose=1)),])
  • 0
    Работал отлично! Спасибо. Single_doc записывается в коде как singel_doc. Я не могу изменить его, потому что нужно изменить 6+ символов.
  • 0
    @JackStoller изменить его :) Добро пожаловать! Если мой ответ помог вам, пожалуйста, поставьте оценку и отметьте ее как правильный :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню