0: Здравствуйте, меня зовут Ксения Андреевна сотника. И это 2 занятие курса методы автоматической обработки текстов от наивного байского классификатора до больших языковых моделей. В рамках этого занятия мы продолжим тему 1 введение в обработку.
1: Текстов. Я сначала кратко напомню о том, что было на 1 лекции, и затем мы перейдём к новому материалу. Собственно, мы рассмотрели, что существует 2 подхода к решению задач обработки текстов инженерный или основанный на правилах и основанные
2: На машинном обучении и именно 2 подходу будет посвящён наш курс. Также мы рассмотрели основные этапы предобработки текста, которые необходимы для того, чтобы избавиться от лишней информации, от каких-то шумных признаков.
3: И оставить только наиболее важные слова, чтобы уменьшить размер словаря. Мы сказали о том, что необходимо токенизировать текст, то есть разбить его на слова 1 этап, затем провести его стандартизацию, то есть привести все к нижнему регистру.
4: Удалить числа, пунктуацию. Какие-то специальные символы это 2 этап, 3 этап, удаление стоп слов, которые происходит в соответствии со словарями. Стоп словами обычно считаются предлоги, союзы, частицы местоимения, вспомогательные глаголы, но
5: Надо сказать, что их список может меняться в зависимости от задач, потому что вот ту задачу, которую мы сейчас рассматриваем, это классификация по тематикам. И, в принципе, мы все вот это удалили, это нам как бы будет помогать. А если там, например, рассматривали
6: Какой-то анализ тональности, может быть, то тогда там отрицание было бы важно и скорее его надо было бы оставить ну и последний этап это нормализация текста, то есть приведение всех слов к начальной форме, и мы рассмотрели собственно отличие стемминга от климатизации.
7: И убедились, что алимата Ия работает лучше, однако требует какой-то дополнительной информации, а именно части речи, и научились её, собственно, подавать в модель при алимата ии также мы рассмотрели, что такое векторизация текста, узнали, что это просто преобразование текста в вектор.
8: То есть, по численное представление и 1 способ мешок слов, который позволяет просто учитывать количество вхождений каждого слова в текст. И 2 способ это tf idf, который позволяет учитывать важность слова.
9: В общей коллекции документов, то есть в общем корпусе. И эта мера повышается, если слово встречается часто в ограниченном количестве текстов, ну то есть является важным именно для текстов какого-то определённого класса, а тогда как он
10: Наоборот, маленькая, если там, предположим, слово встретилось часто в большом количестве текстов, ну, то есть, допустим, внутри 1 текста встречается не очень часто, но зато в большом количестве текстов, ну, тогда это как бы своеобразная 100
11: Слово для данного корпуса. Также мы рассмотрели алгоритмы машинного обучения, которые можно использовать в качестве бейзлайна и затем как-то усложнять. Ну вот это наивный базовский классификатор, основанный на вероятностях, то есть на просто встречаемости.
12: Слов. В текстах определённого класса также логистическая регрессия. Когда мы подбираем некоторые веса, и каждому признаку, ну то есть каждому слову, фактически при векторизации, выбранной нами, присваиваем некоторый вес. Следующий метод это дерево.
13: Решений, когда мы строим фактически то дерево решений, основанное на правилах, если то как pre там подходе, основанном на правилах, но при этом делаем это автоматически. Ну и метод случайного леса, который позволяет построить сразу ансамбль из деревьев, каждый из них будет немножко
14: Отличаться и за счёт этого мы избежим переобучения. Ну и также мы рассмотрели различные методы оценки качества для начала бинарной классификации, когда мы можем ставить там, допустим, задачу многоклассовой классификации как отделение итого класса от остальны
15: Познакомились с матрицей ошибок, узнали, что есть ложно положительные, истинно положительные, ложно отрицательные, истинно отрицательные исходы, познакомились с метрикой экорус и поняли, что она плохо работает для несбалансированной выборки, также узнали про отличия.
16: Точности и полноты, и то, как их можно объединить в качестве ф меры. Ну и также рассмотрели 3 возможных способа для усреднения результатов бинарной классификации, точнее, для усреднения при многоклассовой классификации, когда мы
17: Соответственно, решаем фактически к задач классификации итого класса от остальных. Это микро, усреднение, макро, усреднение и также взвешивание. Ну и остановились на том, что взвешивание, наверное, самая такая показательная будет метрика и теперь.
18: Можем перейти к работе с данными и моделью и рассмотреть весь этот процесс, который только что в теории узнали. На конкретном примере. Мы будем с вами работать с набором данных. Ньюс classification сет. Ну то есть это набор данных.
19: Которые содержат новости на английском языке, и они размечены по 4 тематикам, о которых мы говорили в самом начале политика, спорт, экономика и наука для того, чтобы эти данные нам использовать.
20: Нужно их загрузить с гитхаба. И, собственно, мы просто загружаем сиси файл и можем его преобразовать в пан датафрейм и посмотреть, как он вообще выглядит. Наш датасет. Видим, что здесь есть
21: В принципе, 4 колоночки 1 это словесное обозначение класса. 2 это заголовок новости. 3 это непосредственно содержание новости. Ну, которое здесь названо описанием. И 4.
22: Это индекс класса, то есть удобно, что у нас уже есть соответствие словесных названий класса и числовых, и мы в дальнейшем будем пользоваться именно числовыми обозначениями. Перейдём к этапу предобработки, то есть нам
23: Необходимо применить вот весь этот этап предобработки, о котором говорили в прошлой лекции, который кратко вспомнили в начале этой лекции снача. Сначала мы начнём с того, что объединим заголовок и содержание новости в 1 столбец, то есть мы
24: Просто через пробел это сделаем для того, чтобы нам получить как бы наибольшее количество информации, которая есть, анализировать не только там заголовок или только, допустим, содержание новости, а все вместе, ну и объединим это в столбец. Саммари, ну то ест.
25: Это не то чтобы какое-то автоматически полученное или там вручную написанное сами все новости. Мы просто такое обозначение выбрали, чтобы объединить заголовок и содержание новости.
26: А, и сначала мы можем провести такую предварительную как бы очистку с помощью регулярных выражений, когда мы приведём все слова к нижнему регистру с помощью метода ловер, как мы уже знаем, и также унифицируем какие-то сокращения удалим.
27: Ссылки, теги, ну то есть заменим там, допустим, обозначения валют на там их словесные обозначения какие-то тоже аббревиатуры там изменим на полные версии.
28: Ну и в принципе, это такая предварительная очистка, которая просто нужна, чтобы текст привести к какому-то Такому литературному ввиду и можем это все применить и посмотреть, что
29: Действительно изменится. Применяем мы, естественно, все к столбцу саммери, где содержится самая полная как бы, версия новости. Ну, видим, что действительно убрали, собственно,
30: Привели все к нижнему регистру, ну и убрали какие-то там вещи, которые были с помощью регулярных выражений заменены. И теперь перейдём к предобработке, которую до этого рассматривали на
31: На примере 1 предложения теперь будем его ко всему корпусу применять. Собственно, как мы вспомнили, она включает токенизацию. По словам, удаление знаков препинания чисел столцов и лимитизации. Все это мы будем делать с помощью библиотеки нлтк и я
32: Предлагаю вам это сделать самостоятельно, написать, собственно, как мы реализуем токенизацию, удаление стоп слов. И здесь же можно, собственно, удалить все, что не является словами, а также лемматизация. Причём обратить внимание.
33: То здесь мы повторно инициализируем функцию пост меппинг, которая нужна для того, чтобы преобразовать пункт метки постее метки, которые может принимать лемматизатор подробнее об этом также мы говорили в предыдущей лекции.
34: Пожалуйста, заполните пропуски самостоятельно и затем можете посмотреть, как это будет сделано на видео.
35: Итак, мы реализовываем токенизацию с помощью функции ворд токи айс и подаём на вход текст. Ну то есть в нашем случае это строка. Дальше мы, собственно, задаём
36: Список стоп слов, как вы можете заметить, он содержит в себе дефолтный список из nltk для английского языка и также какие-то вещи, которые мы предполагаем, что могут быть дополнительно встречаться в
37: Новостях, но при этом они будут не очень важными. Ну это там, что кто-то что то сказал, процитировал или там какие-то относительно ссылок тоже вещи lte и gt это лен грейте. Ну то есть просто какие-то сокращения, которые будут не очень
38: Полезно, в принципе, можно любыми словами расширять список стоп слов и, ну, на самом деле, потом мы ещё увидим, что, может быть, ещё что-то стоило сюда добавить, и вы бы могли, и если захотите, можете теоретически это доработать. Итак,
39: Следующий этап это мы удаляем. Стоп слова, как мы это делаем. Мы проходимся по
40: Слова в списке токенизированы слов.
41: И то есть мы берём слово в списке из токенизированный слов, если соблюдаются 2 условия. 1 условие.
42: Что слово действительно является словом, состоит из букв. Так мы убираем все знаки препинания, числа. И 2 условие, собственно, касается стоп слов, то есть слово не состоит в списке стоп слов.
43: То есть берём слово в списке токенизированный слов, если оно является словом, и если не входит в список стоп слов. Дальше мы создаём объект класса матар и
44: Применяем лемматизатор. Ну, собственно, как мы помним, у нас есть у алимата ора метод лимата, однако здесь важно, что он принимает на вход не просто слово, а слово и tag tag.
45: Это часть речи. Ну, проходимся, собственно, в цикле по словам и тегам.
46: И важно, что откуда мы их получаем не из текста без стоп слов напрямую, а мы к этому тексту без стоп слов применяем функцию пост меппинг, которая выдаёт нам как раз-таки слово и метку в нужном формате.
47: Ну вот нам коллапс снова подсказывает точное название. Итак, давайте ещё раз проверим токенизация. Далее слово в токенизированной списке, если оно слово и если оно не стоп слово.
48: И также лемматизатор применяем для результата выдачи функции пост мэппинг. Применение этой функции займёт довольно продолжительное время. Ну потому что
49: В основном здесь используется не только лемматизация, которая сама по себе долгая, но ещё и определение части речи после того, как эта функция закончит работать, мы можем сравнить тексты до и после преобра.
50: Мы видим, что после предобработки, собственно, произошло все тоже, что мы и ожидали. Ну, то есть, во первых, можем действительно убедиться, что заголовок и содержание новости у нас вместе сформировал.
51: Ну и также видим, что убралось все, что нам нужно было. То есть там, стоп, слова убрались, слова привелись к начальной форме, ну, какие-то там числа лишние убрались и все, что не нужно.
52: Осталось только, ну, непосредственно самые значимые слова и те, которые будут, ну, наибольшее смысловое значение имеет для дальнейшей классификации. Теперь перейдём к разведочному анализу данных. Пока что
53: Этот этап мы рассматривали снова в теории. И вот сейчас на практике разберёмся, из чего он состоит. Ну, во первых, как мы говорили, самое, наверное, такое 1, что нужно сделать, это посмотреть, сколько новостей каждого класса в датасете. Мы видим, что этот
54: Идеально сбалансирован. Ну, конечно, в реальной жизни такого не бывает, но это как бы специальный, такой учебный датасет, который, ну, сбалансирован идеально по классам.
55: Можем это же изобразить на графике, на такой круговой диаграмме, ну и просто наглядно посмотреть, что у нас наблюдается полный баланс классов и в качестве следующего этапа. Ну, в принципе, как мы говорили, можно смотреть на разные вещи. Ну вот предлагаю вам
56: Воспользоваться таким способом визуализации и разведочного анализа, как облако слов. В принципе, это визуализация, которая содержит слова из там определённого набора данных и в ней размер шрифта.
57: Прям пропорционально тому, как часто слово встречалось в этом наборе данных. То есть, если слово написано большим шрифтом, то, значит, оно часто встречалось в большом количестве текстов. А если маленьким, значит, оно редко встречалось, ну, слова, которые не попали на Боку слов, либо вообще не встречались, либо
58: Встречались, ну, в принципе, ещё Реже, там совсем редко. Для этого есть готовая реализация в питоне. И мы будем строить не для всей коллекции документов вместе, а для каждого новостного класса, поскольку это, конечно, будет более наглядно, чтоб
59: Посмотреть, какие слова чаще встречались в каждом классе. Давайте начнём с класса ворлд. Ну то есть как бы новости, политики, мировые новости.
60: Видим, что здесь, в принципе, довольно крупно изображены слово премьер министр, ну то есть как бы тот человек, который часто фигурирует в политических новостях также название конкретных стран, про которых, видимо, часто говорилось в этих даже новостях.
61: Дни недели. Ну, в частности, обратите внимание, что здесь это именно будние дни, среда и понедельник, а app это, собственно, сокращение от названия газеты. Ну то есть это то, как раз, о чем я говорила. Часто появляются какие-то, ну,
62: Вот, мы можем заметить, что на самом деле есть какие-то ещё стоп слова, которые, в принципе, можно было бы удалить. Ну и мы не будем возвращаться к этому этапу, но теоретически можно вот после ееще разведочного анализа данных повторно осуществить предобработку и уже как
63: Её более детально сделать с опорой на то, что мы увидели в данных. Следующий категория, про которую мы поговорим, ну, на которую мы посмотрим, это спорт.
64: Видим, что здесь тоже встречается название этого же новостного издания. Ну а самым крупным здесь такие слова, как команда побеждать, игра, сезон, Нью-Йорк, победа. Ну то есть то, что касается непосредственно каких-то спортивных игр. И ещё интересно, что
65: Здесь уже воскресенье также часто встречается. Ну, потому что, видимо, в спортивных новостях чаще фигурирует именно воскресенье, чем там будние дни. Ну что, в принципе, логично в новостях экономических.
66: Мы можем увидеть уже, соответственно, другое распределение. Здесь самые крупные, это слова нефть, цена, компания. Здесь, как вы видите, уже другое новостное издание фигурирует, ну то есть теоретически как бы название
67: Новостного издания тоже может нам помочь, но это такой некоторый артефакт данных. То есть, если модель запомнить, что там новости про политику и про спорт были чаще в 1 новостном издании, а про бизнес в другом, то это будет не очень хорошо, если мы там на другие, да.
68: Применим то как бы это будет как бы уже признак переобучения, что модель подстроится слишком под наши данные, поэтому все-таки правильнее будет их удалить.
69: Здесь мы видим, что в основном встречаются четверг, пятница, вторник, четверг, пятница. Ну то есть уже как бы среда, правда, тоже дублируется вместе с политическими новостями.
70: Ну, а ю, это в данном случае сокращение от местоимения 2 лица, единственного числа, то есть тоже такое, как бы, в каком-то смысле, стоп, слово, которое мы не удалили, но, возможно, благодаря там, допустим, авторизации, и мы можем это как бы ошиб.
71: Нейтрализовать и не дать этому слову как бы слишком важным стать в нашей подвыборке. Ну и последний класс это наука.
72: Давайте посмотрим и на него тоже. Ну и, вообще говоря, здесь довольно интересно, что, ну, в принципе, наука, особенно в слове сайнс. Скорее всего, мы думаем про естественные науки, там физика, химия, биология, однако, в этих
73: Новостях. Ну, собственно, облако слов показывает, что в данной подборке новостей под наукой подразумевается, скорее, то, что мы назвали технологиями, потому что здесь, ну, собственно, слово технология фигурирует также название компании майкрософт. Ну и, в принципе, там софт, программное обеспечение, там
74: Ibm собственно слово компания, также вот google можно заметить, ну то есть название конкретных компаний, все, что связано с технологиями, поэтому, если мы захотим применять вот модель, обученную этих данных к текстам, связанным с ново,
75: Из других областей науки, то, возможно, получится не очень хорошо. И вот, ну, в частности, разведочный анализ данных позволяет понять какие-то особенности, которые есть в данных. Ну то есть, которые мы, в принципе, не всегда можем понять просто вот из названия класса, ну вот это как раз-таки
76: Такой особенностью.
77: И теперь мы можем перейти к векторизации, однако перед тем, как, собственно, к ней переходить, нужно сделать 2 подготовительных шага во первых, нам надо разделить, записать в отдельные переменные наши предобработанный тёк.
78: Из столбца саммари и метки классов, из столбца класс индекс, то есть числовое обозначение класса. Ну это, в принципе, довольно легко сделать. Мы можем вывести первые 5 экземпляров и посмотреть, что действительно все правильно разделилось.
79: Теперь же предлагаю вам воспользоваться методом трейн, те. Сплит и разделить данные на обучающую и тестовую выборку. Как работает этот метод. Давайте посмотрим в документации в прин.
80: В принципе, здесь есть пример, и мы видим, что принимает на вход собственно данные x, y, метки классов, игрек также ещё есть параметр random state, который факти.
81: Не так важно его конкретное значение, как просто наличие этого параметра, потому что если вы не зафиксируете случайное состояние, то в этом случае при запуске повторном у вас может меняться разбиение данных на обучающую тестовую выборку.
82: Вы же фактически, ну, как бы, перемешиваете все объекты и определяете, что этот объект идёт в обучающую выборку, этот, в тестовый и так для каждого, ну и это разбиение, оно может меняться. Если не зафиксировать, то какой именно объект пошёл в обучающую выборку, какой в тестовый это делается с помощь.
83: Данного случайного состояния. Само число 42 часто выбирается. Оно, возможно, вы знаете, что это число просто является скорее такой условностью, и оно взято из книги автостопом по галактике и является ответом на вопрос там
84: Вселенной и всего, всего как бы главным вопросом человечества. Вот. Ну и по сути, как бы просто такая отсылка небольшая. Можно взять и 0, и 1, и что вообще угодно, и выдаёт этот
85: Метод 4 переменных это обучающие данные x test и игре ой, простите x train y, игрек трейн ну то есть объекты обучающей выборки и метки классов обучающей выборки и также x test y игрек тест.
86: То есть объекты тестовой выборки и метки класса тестовой выборки. Как вы видите, здесь есть ещё параметр тест сайз. По умолчанию он равен
87: 0 25 и в принципе.
88: Можно также менять трейн сайсс, можно тест айс ну понятно, что если вы зададите тест сайз 1, то train size будет соответственно другим ну в смысле не значение 1. А если вы конкретное значение ему придадите, там, предположим, 0 2 to train size будет 0 8.
89: Поэтому достаточно указать только 1 вот, но мы не будем указывать, потому что воспользуемся дефолтным значением 0 25, то есть 75% данных идёт в обучающую выборку, 25, в тестовую ещё полезные есть параметры шафл он по умолчанию true, то есть по умол.
90: Вы перемешиваете все объекты перед тем, как делить на обучающую тестовую выборку. Почему это полезно? Ну, потому что вот, например, в наших данных мы видим, что, вообще говоря, они упорядочены. То есть сначала идут все объекты 1 класса, потом 3, потом 2, потом 1, потом, ну,
91: И если мы не будем мешать, то у нас может так получиться, что у нас там объект 3, 2, 1 класса попадут в обучающую выборку, а нулевого в тестовый. Ну, естественно, это неправильно, потому что мы ничего не сможем предсказать. Объект видел объекты 3 классов, а должна предсказывать 4 класс.
92: Это совершенно неверно. Большая ошибка. Ну, поэтому обязательно нужно перемешивать. Ну, потому что закономерности могут быть не такие очевидные. А там, например, могут быть тексты отсортированы по длине. Тоже не очень хорошо, если у учащего в руку попадут более короткий текст, а в тестовый, более длинный, ну или, наоборот, ещё есть.
93: Параметр статифай по умолчанию он none и собственно, что это значит? Это значит, что, ну, стратификация в данном контексте это значит, что если у вас есть какое-то соотношение объектов в обучающей выборке, соотношение классов, то такой же
94: Соотношение будет сохраняться в тестовой, ну, например, если у вас там 1 класса 1 4, а другого класса 3/4 данных, то значит, что в обучающих данных вы сохраните отношение 1 к 3 и в тестовых
95: Выборки тоже ну в принципе у нас с сбалансированный, поэтому нам это не так важно и мы параметры статифай не будем использовать и я вам предлагаю самостоятельно разделить данные на обучающую тестовую выборку, указать собственно только random state. А, ну 42 для того, чтобы
96: У вас в дальнейшем потом просто тоже совпали результаты.
97: Ну не сложно, я думаю это было сделать мы подаём сюда x данные игрек, метки и также указываем random state.
98: И получаем, что в обучающую выборку попало 95700 объектов, AVTESTOVUU31900 и теперь переходим непосредственно к векторизации почему нам так важно было разделить на обучающую тестовую выборку именно перед векторизацией?
99: Дело в том, что вот мы применяли метод фит трансформ, как вы помните, в прошлой лекции, однако его мы можем применять только к обучающей выборке напомню, что method fit transform он делает 2 действия, ну то есть во первых, фит, это мы собираем словарь упоря.
100: Слова и как бы фиксируем за каждым словом корректное значение индекса в векторе а метод transform он уже преобразует текст вектора непосредственно на основе собранного словаря, если мы будем
101: Собирать словарь отдельно на обучающей выборке, отдельно на тестовой выборке, то у нас как минимум будет, будут векторы разной длины, ну, на обучающей, скорее всего, подлиннее, на тестовой покороче. Ну и, в принципе, слова там тоже будут разные. То есть фактически
102: Векторы будут соответствовать разному набору признаков. И если мы обучим модель на векторах из обучающей выборки, то мы не сможем её потом применить к векторам тестовой выборки, если они были созданы, ну, если они имеют другой размер, просто это невозможно, потому что мы там, допустим, в логистической
103: Зададим определённое количество весов, подстроенный под этот вектор обучающей выборки там. А классификаторе мы тоже рассчитаем там для определённых слов вероятности. Ну и в дереве решений мы запишем признаки для определённого количества
104: Слов. Также и в тестовой выборке могут попасться слова, которых, ну вот в словаре, собранном на основе тестовой выборки, могут попасться слова, которых не было в обучающей выборке. И поэтому здесь правильнее будет создать словарь на основе обучаю
105: Выборки, и затем на основе тестовой не создавать новый словарь, а использовать тот словарь, который уже был при, ну, на обучающей выборке, создан. Конечно, может случиться, что какие-то слова в тестовой выборке есть, которых нет в обучающей, и мы их учитывать не сможем, но
106: Это как бы некоторые ограничения. Ну, мы в принципе, ничего не можем с ним сделать и предполагаем, что просто как бы так это есть. Ну и это не должно сильно повлиять на качество. Итак, мы создаём объект класса.
107: Векторайзеры. Напомню, что это ограничение говорит о том, что мы берём в словарь только слова, которые встретились минимум в 5 документах. Ну, это количество мы выбрали просто эмпирически, и можно также попробовать там брать и число поменьше и побольше, в принципе,
108: Такое ограничение в любом случае нужно, потому что иначе у нас будет очень, очень большой вектор, который включает, в том числе очень редкие слова, но они не информативны, там для нашей задачи будут. И, как мы говорили, мы можем либо применить отдельные методы.
109: Transform. Причём на обучающих данных, а также можем применить вместе метод фи трансформ на обучающих данных и затем только transform. Снова обращаю ваше внимание на тестовых данных.
110: Мы выводим получившиеся матрицы и можем убедиться, что у них количество столбцов одинаковое, то есть векторы одинакового размера 17465, ну и также, что строк в обучающей матрице 95007.
111: А в тестовой 31900. Ну и это, естественно, совпадает с количеством объектов, которые мы видели ранее. Теперь мы можем переходить к обучению и тестированию моделей, мы будем использовать уже готовые их реализации из библиотеки.
112: И воспользуемся 4 алгоритмами, которые ранее обсудили теоретически, это наивный баский классификатор, логистическая регрессия, дерево решений и метод случайного леса у них есть у каждого, ну и на самом деле у других алгоритмов
113: Тоже есть стандартные функции метод фит, он обучает модель на обучающей выборке, а метод predict он делает предсказания на тестовой выборке, то есть метод фит он принимает вместе и объекты, и метки классов, а метод
114: Predict, он принимает только объекты, метки классов, не принимает, естественно, то, что делает как бы предсказания обученной модели. И затем мы эти просто предсказания обученной модели сравниваем с истинными метками с помощью различных метрик, о которых также уже говорили.
115: Ну и в принципе, в скайлерн есть отдельные способы для того, чтобы вывести матрицу ошибок, точность, полноту их меру, но в случае для многоклассовой классификации часто бывает удобнее вывести отчёт о классификации он называется classifications репорт и там есть.
116: Во первых, метрики для каждого класса, ну, эти же самые точность, полнота эмера и также усреднённые метрики. То есть вот 3 способа усреднения, о которых мы с вами говорили, есть ещё там 1 особенность в отчёте классификации, что если точность полнота эмера равны,
117: Micro усреднение, то вводится 1 значение, оно также равно c. Но это мы сейчас как раз посмотрим на примерах нам необходимо импортировать все методы, которые понадобятся, и также напишем ещё функцию show конфьюжен метрикс.
118: Эта функция нужна для того, чтобы изображать нам, отображать матрицы ошибок. Во первых, для всех классов, то есть не отдельную, как вот мы говорили, ка итый класс против всех остальных, а для всех классов сразу как бы 4 на 4.
119: И также отображайте в виде тепловой карты. Ну то есть, чем насыщеннее цвет, тем больше как бы ответов правильных.
120: Ну и также мы задаём список классов именно в том порядке, который соответствует их числовым индексам. Начнём с наивного базовского классификатора. В принципе, можем посмотреть также в библиотеке скитлерн.
121: Есть страничка документации для каждого.
122: Для каждого алгоритма. Ну, мы не будем на этом подробно останавливаться, потому что, в принципе, будем использовать дефолтную инициализацию параметров и не будем их особенно подбирать. Видим, что даже такой вариант покажет довольно неплохой результат. Итак, как мы говорили, используем метод фи,
123: И predict. Но сначала создаём объект класса money, buys, методу фит, подаём обучающую выборку, обратите внимание, что естественно векторизованную, то есть не просто текст, а уже числовые векторы ну, на самом деле получается матрица, потому что мы же все текст.
124: Сразу подаём и игрек трейн это вектор из правильных ответов для каждого объекта обучающей выборки ну а затем применяем метод predict, подаём туда только матрицу, для тестовой выборки ответы не подаём.
125: Ну и записываем их в соответствующую переменную.
126: Довольно быстро обучается этот алгоритм. Ну и можем, в принципе, вывести просто несколько случайных предсказаний. Видим, что у нас вот, допустим, такой, так выглядит текст исходный до предобработки, но это просто для наглядности мы выводим именно
127: Исходный текст, а не предобработанный, истинная метка совпадает с предсказанной меткой дальше, собственно, снова совпадает, и вот в 1 месте мы видим, что бизнес и world классы путаются.
128: Можем вывести отчёты о классификации и изобразить матрицу ошибок в виде тепловой карты. Давайте начнём с отчёта классификации. Собственно, как я говорила, здесь есть метрики. По каждому классу мы видим точность, полноту и в меру оказывается, что самая высокая
129: Значение мы получаем для класса спорт.
130: А самое низкое значение для класса бизнес. Ну, в принципе, для науки тоже почти такое же.
131: При этом, что интересно, вне зависимости от способа усреднения, результат получается одинаковый 0 90 0 90. Вот, то есть, ну, в данном случае, поскольку у нас как бы с полностью сбалансирован, то разницы мы не видим, все метрики одинаковые и давай
132: Давайте посмотрим на тепловую карту. Ну, она, в принципе, подтверждает те тенденции, которые мы видели. То есть здесь у нас по оси игрек истинные значения, а по оси икс предсказанные, если они совпадают, то это как бы тру, позитив, исход, то есть класс, спорт.
133: Истинный класс, спорт предсказан больше всего здесь правильных ответов. При этом для класса бизнес у нас действительно меньше всего правильных ответов. Ну, для науки тоже не очень много. Ну, спорт.
134: Точнее, извините, политические новости получаются на 2 месте, и при этом мы ещё можем посмотреть, где как бы больше всего ошибок. То есть, например, мы видим, что чаще всего путаются классы, бизнес и наука, то есть east.
135: Класс бизнес, а предсказывается класс наука. Ну, это, видимо, потому, что и там, и там используются часто названия различных компаний, как мы видели, там, google, microsoft.
136: Ну, при этом, наоборот, тоже довольно часто происходит. То есть истинный класс, наука предсказывается, класс, бизнес, при этом Реже всего путаются у нас бизнес и спорт, то есть меньше.
137: Всего случаев, когда истинный класс спорт, а предсказан был бизнес.
138: Но при этом случаев, когда истинный класс бизнеса предсказан спорт, ну, на самом деле на порядок больше.
139: И теперь мы можем перейти к следующему алгоритму. Это логистическая регрессия. Собственно, для логистической регрессии тоже, естественно, есть свой класс. И предлагаю вам самостоятельно.
140: Создать объект класса лоджистик регреш, затем применить метод фит, обучить модель и также применить метод predict. Чтобы записать предсказание. Обратите внимание, что здесь есть нам самое важное сейчас будет случайное состояние, как и
141: И в тренте сплит, для чего это нужно? Мы говорили, что у нас на 1 этапе инициализируются веса для каждого признака случайным образом. И эта случайная инициализация может быть разной в зависимости от того, как мы инициализируем, результат чуть чуть будет отличаться, поэтому
142: Чтобы опять же у вас был результат воспроизводим при повторном запуске нужно указывать случайное состояние. Предлагаю установить 42, чтобы было так же, как в видеолекции. Ну, в принципе, можно и любое другое.
143: Итак, создаём объект класса логистическая регрессия. Дальше мы её, собственно, обучаем.
144: Передаём векторизованные данные обучающей выборки.
145: И также.
146: Ответы обучающей выборки. Ну а сюда мы записываем предсказания обученной модели на, соответственно, векторизованных текстах тестовой выборки.
147: Логистическая регрессия чуть подольше будет обучаться, но тоже в принципе не очень долго. Можем сразу запустить ячейку, которая выведет нам также несколько
148: Случайных предсказаний и отчёт о классификации. Ну, собственно, мы видим, что тоже самое. Для того же самого текста наблюдается ошибка, а все остальные, в принципе, по прежнему правильны. Ну вот из тех, которые мы решили вывести немного
149: Повышается общая средняя метрика. Ну и также можем сравнить, что здесь у нас 91, 97, 88, 89, а здесь 90 96, 87, 88. Ну то есть на 1 про
150: Цент на самом деле для каждого повышается, ну и средний тоже на 1%, но тенденции остаются теми же. То есть для спорта у нас снова больше всего правильных предсказаний, для бизнеса их меньше всего.
151: Причём можно заметить, что здесь было 6849 6957, да, их, конечно, ну, на около 100 побольше, но все равно это самый как бы, остаётся такой сложный класс для модели.
152: При этом интересно, что теперь у нас для политических новостей меньше правильных ответов, чем для научных. То есть немножко меняется как бы распределение. Вот, ну и ошибок тоже.
153: Становится меньше, но все равно как бы те же проблемные классы остаются.
154: Логистическая регрессия, поскольку это линейный алгоритм. То есть мы можем как бы, ну, буквально каждому признаку присваиваем вес и считаем взвешенную сумму, позволяет хорошо интерпретировать результаты. То есть мы можем посмотреть действительно, как бы
155: Какие признаки оказались самыми важными для какого класса? Давайте это сейчас посмотрим. Ну то есть мы можем вывести эти самые веса для каждого класса. Они называются коэффициентами регрессии и, как мы говорили, для каждого класса.
156: Будут свой вектор призна вектор весов, то есть коэффициенты это матрица размера-ка на n, где k это количество классов, в нашем случае 4, а n это количество признаков, в нашем случае 17465 и.
157: Давайте немножко вспомним, как работает коэффициент регрессии, то есть положительный коэффициент, он повышает вероятность принадлежности к классу, а отрицательный коэффициент, наоборот, понижает вероятность принадлежности к классу, тогда как если по модулю коэффициент имеет большой
158: Значение, то, значит, этот признак существенно влияет на вероятность принадлежности классу. А если этот признак небольшой по модулю, то есть близок к нулю, то, значит, он имеет совсем маленькое значение на совсем маленькое влияние, на вероятность классов. Давайте проведём
159: Следующую процедуру мы попробуем. Мы хотим вывести признаки с самыми большими коэффициентами для каждого класса. И так мы получим наиболее характерные слова для каждой новостной категории, а для этого нам нужно сначала определить порядок, в котором должны быть записаны коэффициенты.
160: По возрастанию. То есть вот предположим, что мы будем сейчас работать с весами для нулевого класса и мы их хотим сортировать по возрастанию.
161: Нам нужно сначала для этого понять, собственно порядок индекса, чтобы элементы были записаны по возрастанию. Это делается с помощью метода арк сорт. Мы запишем результат переменной ордер. То есть мы видим, что самые
162: Маленьким является элемент с индексом 7789, а самым большим элемент с индексом 277. И если мы теперь сортируем вот это наш вектор в заданном порядке, то действительно увидим, что мы сортировали от самого ма.
163: Маленького к самому большому, однако мы хотим на самом то деле вывести же top н самых топ н признаков с самыми большими весами значит, нам надо развернуть это.
164: Это massive, чтобы сортировать не по возрастанию, а по убыванию. Ну, это мы делаем таким образом. То есть берём срез, как бы все элементы i с шагом, - 1, то есть фактически идём с конца.
165: И теперь действительно мы видим, что мы сортировали по убыванию значение коэффициентов, однако нам ведь нужно не только коэффициенты сортировать, а в этом же порядке нам надо сортировать все наши признаки, и для этого мы
166: Тоже применяем этот же порядок и разворачиваем этот весь список и видим, что вот такие слова оказались самыми важными. То есть имеют самое большое значение для собственно категории политики. Ну и что в принципе, логично для
167: Категории, ну, самыми маленькими значениями весов для категории политики ворлд обладают слова, которые характерны во для спорта. Ну, то есть совсем редко, значит, встречаются в новостях этой категории. И теперь предлагаю вам
168: Сделать тоже самое, но уже не для 1 конкретной категории новостей, а для всех мы это делаем. Таким образом проходимся в цикле по нашим, ну по строкам нашей матрицы. То есть у нас будет как бы
169: 4 строки значит, мы должны для 4 категорий вывести самые важные признаки мы выводим название класса и затем создаём список, где записываем все наши признаки слова ну вот этой функции get out мы уж.
170: Пользовались в прошлой лекции, когда смотрели просто, ну, выводили просто по алфавиту все признаки, собственно, они по алфавиту, а нам надо их сортировать в соответствии со значением весов. А дальше в орде мы должны записать, как нам в каком порядке записать порядок.
171: Индексов, чтобы нам записать наш массив возрастающим по возрастанию массив. Это у нас, соответственно, класс коффин метрикс с индексом. И дальше нам надо сортировать по возрастанию все наши
172: Коэффициенты, то есть веса и после этого сортируем по возрастанию признаки. Ну и затем выводим все это, чтобы у нас вывелось и собственно, признак и его вес. При этом давайте запишем топ 5, то есть будем не весь, естественно,
173: Массив признаков и весов вводить, а 5/1 значений. Попробуйте сделать это самостоятельно и затем можете посмотреть, как я это сделаю на видео. Ну итак, мы сказали с вами, что нам нужно сначала сортировать
174: Мы берём иты иту строку и реализуем это с помощью арк сорт.
175: Как делали выше, а дальше в этом порядке мы должны сортировать наши коэффициенты, то есть указываем порядок, дальше разворачиваем, потому что так-то мы записали по возрастанию.
176: Нам надо по убыванию и берём топ 5/1.
177: После этого мы на самом деле тоже самое применяем к названиям признаков, то есть абсолютно таким же образом их сортируем и можем посмотреть на результат, как мы уже видели, что для класса политики
178: Оказываются самыми важными названия конкретных стран, там, собственно, европейский союз. Вот, например, Ирак, ну и также, как не грустно глагол убивать. Ну что, видимо, новость сейчас
179: Часто связаны с какими-то военными событиями, военными конфликтами для класса спорт. Это в принципе все довольно миролюбивые слова, ну и довольно очевидные. Там тренер кубок, спорт, команда, игрок для
180: Класс бизнес это слова экономика, ритейлер банк, компания. Ну то есть, в принципе, все, что связано там с экономикой и для науки, это слова наса, спейс. Ну то есть все связано с космосом.
181: Там интернет учёный и программное обеспечение. И, кстати говоря, можно ещё заметить, что вот для класса ворлд, например, самое большое значение признака, ну а остальные все там
182: Уже поменьше для класса спорт, в принципе, все довольно так, большие значения признаков. А для бизнеса и, например, самое маленькое значение самого важного признака, но для науки в принципе тоже побольше. То есть что в бизнесе, в принципе, н
183: Не то чтобы прям много таких каких-то характерных для него именно слов. А теперь перейдём к следующему алгоритму. Это дерево решений. Ну опять же стандартным образом мы с вами создаём объект класса. Ну теперь уже 3 класс.
184: То есть классификатор на основе деревьев решений. Снова задаём случайное состояние и также обучаем и записываем предсказания. Мы можем вывести результат и также посмотреть.
185: На метрики, то есть на отчёты классификации и матрицу ошибок. Итак, мы видим, что
186: В принципе, снова путается классы, бизнес и политики. Ну и на самом деле, как мы говорили, что дерево решений само по себе не вполне может быть эффективный алгоритм и действительно значение метрик.
187: Сильно упала. Ну при этом также, в принципе, спорт остаётся самым хорошо узнаваемым классом.
188: Можно посмотреть, вывести непосредственно правила, которые построились нам автоматически, из которых состоит это наше дерево решений с помощью метода экспорт текст.
189: Давайте посмотрим на него.
190: На получившееся дерево решений.
191: И видим, что, ну, как бы, поскольку у нас признаки это просто наши слова и у каждого есть значение t, то мы так и указываем, что если там слово встреча, слово, значение тифа меньше какого-то значения, то мы
192: Переходим там в 1 ветку, если было бы больше, то мы перешли там в другую ветку. Также вот мы смотрим, соответственно, последовательно для ряда слов. Вот в какой-то момент мы слишком глубоко уходим в дерево. Ну то есть, значит очень много
193: Правил, там что как бы возможности этой функции не позволяют их все отобразить, но при этом где-то, например, мы можем, где не так много правил, вывести финальный результат. Ну вот например, что если значение
194: Прайс больше нуля целых 6/100, то мы определяем класс, бизнес и, соответственно, если значение там спорт больше 11/100, мы идём там следующее правило олимпикс. И вот что интересно, если олимпикс
195: Меньше 12/100, то это класс спорт. Если больше, то класс world. Ну, видимо, в данных конкретных новостях олимпийские игры чаще обсуждались именно в политических новостях, чем в спортивных. Ну что, тоже может быть каким-то определённым артефактом.
196: Тех данных. Однако, чтобы использовать более эффективные деревья, решения, нужно объединить их в ансамбль. И это возможно с помощью метода случайного леса. Дело в том, что вот как бы мы видели, что 1 то
197: Дерево обучалось, ну, не очень быстро, а много деревьев будет обучаться, соответственно, ещё дольше. Поэтому мы не будем сейчас обучать модель. Это можно сделать с помощью кода, который здесь закомментирован. И также с помощью этого ж
198: Кода можно её сохранить, а мы сейчас с вами просто загрузим модель которая уже была обучена на этих наших данных собственно для этого было важно сохранять то разбиение на трент сплит с random стоит 42, потому что иначе если у вас было другое разбиение вы запустите
199: Ту ячейку. Ну вы попробуете эту модель, обученную на 1 разбиении, применить к другому разбиению. Возникнет ошибка, потому что, опять же, может быть, что, ну, в принципе, будет другое распределение там слов на обучающую тестовую выборку, другое разбиение текстов, на
200: Обучающий тест, выборку и как бы соответствие слова в словаре и его индекса в векторе будет тоже отличаться. Ну и мы можем эту модель загрузить. Вот она у нас, собственно, здесь появилась в файлах, в коллабе мы можем загру
201: Грузить модель уже обученную, которую мы скачали с гитхаба, и записать, собственно, предсказание этой модели. Эта модель у нас будет отображаться в файлах, ну как и собственно датасет, который мы
202: Загрузили ранее. Ну, видим, что предсказания, ну, на данном конкретном отрывке, аналогичные лучшим собственно результатам, которые были получены до этого. Ну, и если посмотреть на
203: Метрики. Ну, то, в принципе, они повыше, конечно, чем у дерева решения 1, но все равно похуже, чем у базового классификатора и логистической регрессии. И для наглядности мы можем отобразить все
204: Результаты, полученные в виде такой столбчатой диаграммы, и посмотреть, что для логистической регрессии мы получили самые высокие средние метрики. Здесь мы непосредственно выводим f1 мир, причём
205: Взвешенную f1 меру. Ну, в принципе, они у нас все были равны при всех методах усреднения. То есть для логистической регрессии самый высокий результат. Дальше идёт наивный баский классификатор на 3 месте. Метод
206: Лес, ну и совсем проигрывает дерево решений. Мы увидели, что получаем вот такой-то результат, однако может возникнуть вопрос, а можно ли как-то его улучшить? Ну вот, в частности, можно ли получить для наивного байского классификатора
207: Результат, который будет превосходить логистическую регрессию. Ну, потому что мы видели, что он, в принципе, работает быстрее, ну и устроен проще. Поэтому если нам надо сделать совсем какое-то быстрое решение, то, может быть и классификатор нам больше подойдёт, и для этого нужно осуществлять
208: Тщательный подбор гиперпараметров и делается это с помощью кроссвалидации. Сейчас мы с вами поговорим о том, что же это такое. У вас среди всех данных могут быть, ну, как обычно, выделены обучающие данные и тестовые данные. При этом
209: Обучающие данные можно на самом деле ещё разделить внутри себя, на-ка частей. Эти части называются фолдами. Ну, от английского, собственно, фолд, что значит это значение? Ка, ну то есть мы разбиваем дан
210: Обучающий на, допустим, 5 частей. Как в этом примере каа равно 5 и затем 5 раз обучаем модель 1 и ту же немножечко на разных наборах данных. Почему они будут разные? Потому что в 1 случае мы возьмём
211: 2, 3, 4 и 5 кусочек этого разбиения. Обучим модель на 2, 3, 4, 5 кусочке, а на 1 померим качество. Дальше. Во 2 раз мы возьмём 1, 3, 4, 5 кусочек для обучения, а на
212: 2 померим качество, потом мы возьмём 1, 2, 4, 5 кусок для обучения, на 3 померим качество. Ну и так, собственно, далее. То есть дальше возьмём на 4 этапе 1, 2, 3, 5 кусок, на 4 померим качество. Ну и в конце возьмём 1, 2, 3, четвёрт.
213: Кусок и на 5 померим качество. И таким образом мы из 1 и того же набора обучающих данных получим как бы, ка, то есть 5 в нашем случае разных разбиений, которые позволят посмотреть, насколько устойчиво-ка
214: Мы получаем при заданном наборе гиперпараметров. То есть, если мы вот как бы взяли, например, что минимально мы берём 5, ну, те слова, которые встретились в 5 документах, а насколько вот это там количество 5, оно вообще хорошее, можно же посмотреть и там, и 10, и
215: 2. И если мы будем опираться только на значение, полученное на всем объёме, на обучающих данных, то мы получим 1 число и как бы это может быть не совсем показательно, потому что, ну, слишком мы привязываемся к нашим данным. А если мы возьмём 5 чуть чуть разных разбиений, то
216: В этом случае уже будет как бы картина более показательная. И при этом, что же происходит с тестовыми данными, можно спросить, а тестовые данные мы на этом этапе вообще не трогаем. То есть мы как бы их не видим и не можем под них подстраиваться таким образом, затем, когда мы
217: Подобрали оптимальный набор гиперпараметров на вот этом вот разбиении, то есть в процессе кросс валидации финальное качество мы Мерим на тестовых данных. То есть их мы никак не использовали при вот этом именно переборе. Либо же мы можем померить на самом деле
218: Как бы общее качество, как среднее, полученное из вот этих к разбиений. И давайте посмотрим, как это можно реализовать. Собственно, мы будем с вами, как я уже сказала, подбирать параметры векторизатора.
219: Что может более существенное оказать изменение результатов, чем параметры там, чем подбирать параметры барского классификатора и для того, чтобы нам не отдельно все это не реализовывать.
220: Как мы делали выше, мы можем объединить все этапы, то есть векторизацию и обучение модели в так называемый пайплайн. В принципе, это такой широко используемый термин в машинном обучении. Ну, вообще, как бы пайплайн это английское слово, но по-русски тоже часто так и говорят. Ну, такж.
221: Его переводят как конвейер, ну или просто как как бы алгоритм работы с данными. И фактически это просто такой класс в скайлерн реализованный, и он внутри себя содержит список из этапов.
222: Который мы будем применять к данным, а каждый этап записывается как кортеж из 2 элементов. 1 элемент это некоторое условное обозначение, ну, этого этапа. То есть, в принципе, вот мы назвали его вект. Ну, вообще говоря, можно было назвать
223: Как угодно и векторайзеры, и tiff от самого названия ничего не зависит, ну а дальше 2 элемент кортежа это уже сам класс и ну то есть что именно мы будем делать, какой объект применять и следующее.
224: Кортеж устроен аналогичным образом. 1 сила. Ну, мы назвали это как бы вот сокращение классифаера можно было 5 назвать маломина энби или мэнби как угодно. Ну a2 элемент кортежа это, собственно, объект, который мы будем применять. То есть нужный нам алгоритм реализованный.
225: Далее мы создаём словарь, parameters, который содержит значение каждого параметра, который мы хотим подбирать. И в этом словаре у нас будет 2 элемента. Соответственно, ключ имеет
226: Следующее устройство, как вы можете заметить, здесь есть, как бы начинается с вект, затем идёт 2 длинных, 2 нижних подчёркивания и непосредственно название самого параметра. Зачем нужно вект? А вот здесь, ну, как бы
227: Неважно, что именно здесь написано вектор или вектор айзер. Главное, чтобы это совпадало с названием в пайплайне. Ну, потому что мы как бы должны непосредственно отсылать, что это параметр вот этого этапа пайплайна. Ну и через двойное подчёркивание мы описываем
228: Том, конкретный параметр, который будем подбирать. В данном случае мы возьмём, во первых, энграмм рейнж, как мы говорили на прошлой лекции, это параметр векторизатора и по умолчанию равен 1 1. То есть мы берём униграммы слова, ну просто по 1 слову.
229: А здесь же мы попробуем ещё 1 параметр, то есть сравним наш дефолтный параметр 1 1 и параметр 1 3. Это значит, что у нас минимальное значение н 1, максимальное значение n 3. И как вы можете наверняка догадаться, что
230: Мы берём тогда униграммы, то есть and 1 биграммы энн, равно 2 и 3 граммы, энн равно 3. Ну, то есть, в принципе, довольно много разных вариантов разных признаков рассматриваем. И также мы ещё возьмём параметр max дф. Что он значит,
231: Опять же, напомню, что по умолчанию Макс дф 1, то есть мы берём слова из всего корпуса, из 100% всех текстов мы можем ограничить, не включать слишком частые слова. Ну вот, например, при Макс дф.
232: 0 5. Мы исключаем слова, которые встретились больше, чем в половине всех документов. Ну, учитывая, что у нас каждого класса по 1 4, то есть по 25%, это значит, что, ну, как бы, если слово встретилось в поло,
233: Документов, оно как минимум для 2 классов уже характерно, а нам бы как бы хорошо бы вычленить слова, которые для 1, ну, для каждого конкретного класса характерны, поэтому, в принципе, это может быть эффективно.
234: И что же мы теперь будем делать, как же мы, собственно осуществляем автоматический подбор параметров для этого мы используем модуль грид серч сивии это расшифровывается как поиск по сетке с помощью кросс валидации, то есть grid это сетка, а cvv это кросс валидейшн и.
235: Мы его импортируем и создаём собственно объект класса. И сюда мы подаём пайплайн. Ну то есть сочетание из нашего векторизатора и на классификатора. Дальше словарь параметров, который будем подбирать. И также нам здесь важно ука,
236: Параметр, количество кросс валидации, то есть, ну фактически количество фолдов, на которые мы будем делить данные и количество итераций, которые мы будем осуществлять как бы с 1 набором параметров. То есть если возвращаться к кросс валидации, то вот мы сделали факти
237: Фактически задали 2 параметра и 2 варианта для каждого из них. То есть, ну, не сложно догадаться, что всего будет 4 разных модели с как бы разными наборами параметров. Это значит, что мы 4 раза проведём
238: Вот такую процедуру, то есть, соответственно, создадим 5 разных подвыборок и 1 модель на них обучим, 2 модель на них обучим, ну с 2 набором параметров, с 3 набором параметров и с 4 набором параметров. Ну и всего получается.
239: Сколько у нас 5 операций для каждого набора параметров? 4 набора параметров, то мы всего 20 моделей будем обучать 4 на 5, а можем в этом убедиться. Да, сейчас только опустим ячейки и можем в этом убедиться.
240: Поскольку нам действительно выдаёт сколько всего мы будем моделей обучать ну и запускаем мы этот кросс валидацию просто с помощью метода fit подаём сюда обучающие данные и ответы для обучающих данных, то есть метки классо.
241: Итак, мы видим, что, конечно, подбор параметров занял продолжительное время около 3 минут, и теперь мы получили, собственно, результат. Видим, что, ну, нам автоматически вывелось
242: Лучшая модель, то есть это, ну, базовский классификатор дефолтными параметрами. И вот параметры, которые оказались лучшими для векторизатора. Максимальная документная частота 0 5 и диапазон грамм от 1 до 3. В принципе, мы можем отдельно
243: Вывести лучшее значение параметров с помощью атрибута бест парамс, рисёрч. Ну и получаем на самом деле тоже самое. И для того, чтобы более подробно посмотреть результаты, то есть какие метрики получились в каждой операции, при каждом
244: Наборе параметров, а можно отобразить это в виде датафрейма и в виде графика. Давайте сначала посмотрим на датафрейм. Ну то есть вот для каждой из 4 моделей мы получаем определённое количество как бы информации. Во первых, это, ну вот какие параметры использовались, то ест
245: Какой конкретный Макс деф, какой конкретный грамм рейндж. Дальше, собственно, результат для каждого из сплитов, но у нас их было 5. Поэтому, соответственно, 0 1, 2, 3, 4. Среднее значение и ранг. И здесь, в принципе, довольно наглядно можно заметить, что
246: У нас как бы оказалось, что всего 2 разных значения мы получили, то есть вне зависимости от значения, точнее, как результат не зависел от Макс дф, то есть
247: Сути у нас выбрано было 0 5 именно потому, что это просто 1 результат. Но, вообще говоря, и при 0 5, и при 1 мы получали одинаковый результат, что можно заметить вот по, ну, рангу и просто даже по значениям тестовой метрики.
248: По умолчанию, если мы не знаем, то считается, ну, у нас сбалансированный её, поэтому это не страшно. И видим, что вот как бы 1, 2 строчка, одинаковый результат, и 3, 4 одинаковый. И отличаются они как раз-таки использованием диапазона.
249: А, то есть более высокую метрику мы получаем для большего количества признаков, когда мы не только слова учитываем, но и граммы, и триграммы можно это же отобразить на графике. Ну что, в принципе, просто чуть более наглядно.
250: Видим, что вот для, ну, в зависимости от количества энграмм немножко меняется результат, как раз чуть чуть повыше становится значение, а для Макс дф результат полностью идентичный вне зависимости от выбранного значения. И теперь предлагаю вам
251: Анализировать собственно пайплайнс с параметрами векторизатора, которые оказались наилучшими. Для этого вы можете использовать атрибут сет у объекта грисер. Ну то есть на самом деле вот то, что вот здесь вывелось, это и есть best, как здесь написано. Ну вот как мы можем обратиться к
252: Словарю лучших параметров через атрибут бэст парамс. Так мы можем обратиться к непосредственно наилучшей обычной модели через атрибут бест эстимейт. Просто предлагаю вам записать это в отдельную переменную бэст пайплайн и затем
253: Записать предсказание этого наилучшего пайплайна на тестовой выборке, чтобы потом мы могли вывести отчёт о классификации и посмотреть на полученный результат, а также ответить на вопрос, изменилось ли качество за счёт автоматического подбора гиперпара.
254: Сделать это самостоятельно. Затем можете посмотреть, как это будет сделано на видео.
255: Ну, в принципе, здесь, конечно, ничего сложного особо нет. Мы обращаемся к параметру бест эстимейт у
256: Объекта рисёрч сиви и затем с помощью этого наилучшего пайплайна делаем предсказание и подаём сюда объекты тестовой выборки. Обратите внимание, что не векторизованные, потому что векторизация включена в пайплайн.
257: Получаем какой-то, соответственно, результат предсказаний и затем можем вывести отчёт о классификации и посмотреть на то, что получится. Видим, что вот если посмотреть на их меру, результаты 91, 97, 88.
258: 89 и общее среднее значение 91. Если сравнить это с наивным байским классификатором без настройки параметров мы получали 90, 96, 87, 88 и общее качество 90. Ну то есть, в принципе, на 1% каж
259: Для каждого класса результат подрос, ну и среднее значение тоже выросло на 1%. Ну и это позволяет ответить, что действительно, за счёт автоматического подбора гиперпараметров немного, но увеличили мы качество, и оно стало уже достигать то, что получали при
260: Логистической регрессии. Таким образом, в этой лекции мы поговорили о том, как можно применить полученные теоретические знания. На конкретном примере. Рассмотрели, собственно, как загружать датасет, как
261: Его предобрабатывать, как проводить его разведочный анализ, смотреть, что он из себя вообще представляет эти данные, затем осуществили векторизацию, применили различные модели, оценили их качество, проанализировали результат и также попробовали с помощью кросс валидации.
262: Реализовать процедуру оптимального подбора гиперпараметров. И я надеюсь, что эта лекция была вам полезна. Вы подробно ознакомились с основами автоматической обработки текста, и в дальнейших лекциях мы будем расширять
263: Знания и рассматривать более сложные алгоритмы. Спасибо за внимание и до встречи на следующих лекциях.