Текст может быть автоматически классифицирован Анкет Как и все с машинным обучением, ему нужны данные. Итак, какие данные мы идем к нам?
Данные
Допустим, нашим источником данных является набор данных fetch_20newsgroups. Этот набор данных содержит текст почти 20 000 сообщений о группах новостей, разделенных на 20 различных групп новостей.
Набор данных довольно старый, но это не имеет значения. Вы можете найти оригинальную домашнюю страницу здесь: 20 Набор данных групп новостей
Набор данных включен по умолчанию в модуль Python Machine Learning Sklearn.
Чтобы упростить, мы возьмем только 2 новостных группах “Rec.motorcycles” и “rec.sport.hockey”.
#!/usr/bin/python3 news = fetch_20newsgroups(subset="all", categories=['rec.sport.hockey', 'rec.motorcycles'])
Проверьте алгоритм
Прежде чем использовать классификатор, вы хотите знать, насколько хорошо он работает. Это делается путем разделения набора данных на Поезд и тестовый набор Анкет
#!/usr/bin/python3 x_train, x_test, y_train, y_test = train_test_split(news.data,news.target)
Данные, с которыми мы имеем дело, являются текстом. Это должно быть векторы. Затем используйте TFIDFVectorizer. Итак, у нас есть два вектора: x_train и x_test.
#!/usr/bin/python3 transfer = TfidfVectorizer() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test)
Не нужно изменять Y_TRAIN и Y_TEST, так как это метки вывода (класс 0 или класс 1)
Создайте объект алгоритма и обучите его с данными.
#!/usr/bin/python3 estimator = MultinomialNB() estimator.fit(x_train,y_train)
Затем вы можете делать прогнозы и посмотреть, насколько хорошо он классифицирует на тестовых данных
#!/usr/bin/python3 y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) score = estimator.score(x_test, y_test) print("score:\n", score)
Запустите программу, и вы увидите точность:
score: 0.9939879759519038
Сделайте свои собственные прогнозы
Вы можете делать прогнозы с новыми текстами:
Enter some text: i like to drive motor cycle on the highway y_predict: [0] Enter some text: i like to play hockey game y_predict: [1]
Для этого добавьте эти линии:
#!/usr/bin/python3 sentence = input("Enter some text: ") sentence_x = transfer.transform([sentence]) y_predict = estimator.predict(sentence_x) print("y_predict:\n", y_predict)
Программа
Программа ниже делает все это
#!/usr/bin/python3 from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split def nb_news(): news = fetch_20newsgroups(subset="all", categories=['rec.sport.hockey', 'rec.motorcycles']) x_train, x_test, y_train, y_test = train_test_split(news.data,news.target) transfer = TfidfVectorizer() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) estimator = MultinomialNB() estimator.fit(x_train,y_train) y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) score = estimator.score(x_test, y_test) print("score:\n", score) return None nb_news()
Ссылки по теме:
- Модуль машинного обучения Sklearn
- Почему Python для машинного обучения
- Что такое машинное обучение
- Что такое классификация
- Курс машинного обучения и примеры
Оригинал: “https://dev.to/petercour/text-classification-with-machine-learning-laf”