8.8 KiB
Методические указания к лабораторной работе №3
В данной работе мы продолжаем работать с библиотекой scikit-learn (http://scikit-learn.org), и хотим выяснить ее возможности при работе с текстовыми документами.
Ниже приведены новые модули, которые будут использованы в данной работе:
GridSearchCV - http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html - полный перебор по сетке заданных значений параметров для классификации
Decision Tree - http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier – Метод деревьев решений
MultinominalNB - http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html - Полиномиальный (Мультиномиальный) Наивный Байесовский метод – разновидность Наивного Байесовского метода, которая хорошо работает с текстами, длины которых сильно варьируются.
LogisticRegression - http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html - Логистическая регрессия
Импорт библиотек
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
Настройка параметров с использованием grid search
С помощью конвейерной обработки (pipelines
), рассмотренной в лабораторной работе №2, стало гораздо проще указывать параметры обучения модели, однако перебирать все возможные варианты вручную даже в нашем простом случае выйдет затратно. В случае, рассмотренном в лабораторной работе №2, имеется четыре настраиваемых параметра: max_features
, stop_words
, use_idf
и n_neighbors
:
= Pipeline([('vect', CountVectorizer(max_features= 1000, stop_words = 'english')),
text_clf 'tfidf', TfidfTransformer(use_idf = True)),
('clf', KNeighborsClassifier (n_neighbors=1)),]) (
Вместо поиска лучших параметров в конвейере вручную, можно запустить поиск (методом полного перебора) лучших параметров в сетке возможных значений. Сделать это можно с помощью объекта класса GridSearchCV.
Для того чтобы задать сетку параметров необходимо создать переменную-словарь, ключами которого являются конструкции вида: «НазваниеШагаКонвейера__НазваниеПараметра», а значениями – кортеж из значений параметра
= {'vect__max_features': (100,500,1000,5000,10000),
parameters 'vect__stop_words': ('english', None),
'tfidf__use_idf': (True, False),
'clf__n_neighbors': (1,3,5,7)}
Далее необходимо создать объект класса GridSearchCV
, передав в него объект pipeline
или классификатор, список параметров сетки, а также при необходимости, задав прочие параметры, такие так количество задействованых ядер процессора n_jobs
, количество фолдов кросс-валидации cv
и другие
= GridSearchCV(text_clf, parameters, n_jobs=-1, cv=3) gs_clf
Теперь объект gs_clf
можно обучить по всем параметрам, как обычный классификатор, методом fit()
. После того как прошло обучение, узнать лучшую совокупность параметров можно, обратившись к атрибуту best_params_
. Для необученной модели атрибуты будут отсутствовать.
gs_clf.best_params_
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[11], line 1
----> 1 gs_clf.best_params_()
AttributeError: 'GridSearchCV' object has no attribute 'best_params_'
Аккуратность классификации – обратившись к параметру best_score_
:
gs_clf.best_score_
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[12], line 1
----> 1 gs_clf.best_score_
AttributeError: 'GridSearchCV' object has no attribute 'best_score_'
А результаты по всей сетке параметров - cv_results_
gs_clf.cv_results_