[БЕЗ_ЗВУКА] Мы начинаем неделю, посвященную отбору признаков и понижению размерности, в которой будем говорить о самых разных проявлениях этих задач. Но в первую очередь давайте разберемся, зачем вообще нужно работать с признаками и пытаться их отбирать. Итак, признаков, которые присутствуют в ваших данных, может быть слишком много, больше чем нужно. Из-за чего? Например, вы дали волю фантазии, когда придумывали признаки для вашей задачи, или заказчик отгрузил вам все таблицы, все столбцы из таблиц, которые у него были, и понятно, что там может быть много лишней информации. И при этом, скорее всего, вы можете повысить качество решения задачи, если выберете только важные признаки, только те, которые реально важны для решения задачи. Или, например, сформируете новые признаки на основе старых, так что новых признаков будет меньше, но при этом они будут настолько же информативны, насколько и старые признаки. И давайте начнем с того, что поговорим о том, чем плохи признаки, которые имеют мало отношения к вашей задаче. И, конечно, начнем мы с шумовых признаков — так будем называть те признаки, которые никак не связаны с целевой переменной, которые никак не относятся к той задаче, которую вы решаете. К сожалению, не всегда можно понять по обучающей выборке, что вы имеете дело именно с такими признаками. Давайте рассмотрим простой пример. Представьте, что вы добавляете в выборку 1000 новых признаков, при этом все они абсолютно случайные. Значения каждого признака генерируются из стандартного нормального распределения. Понятно, что эти признаки бесполезны, они никак не помогут решить задачу. Но при этом, поскольку их много, может так оказаться (просто из соображений теории вероятностей), что один из них немножко коррелирует с целевой переменной, при этом, разумеется, он будет коррелировать только на обучающей выборке. На контрольной, поскольку он абсолютно случайный, этой корреляции не будет. При этом модель может подумать, что этот признак важен, и поставит перед ним какой-то вес или как-то еще по-другому учтет его внутри себя. И из-за этого получится, что в модели присутствует шумовой признак, присутствует признак, который случаен. Она зависит от признака, который никак не помогает решать задачу. И из-за этого качество модели, ее обобщающая способность окажутся ниже, чем хотелось бы. Вот еще одна причина. Представьте, что вы используете решающие деревья для решения задачи. И у вас в выборке 1000 признаков, все они информативные. Но при этом, чтобы учесть каждый из них хотя бы один раз, вам понадобится дерево глубины как минимум 10. У этого дерева будет 1000 листьев, и вам понадобится довольно много объектов, чтобы в каждый лист попало достаточное количество примеров, по которым вы сможете построить хорошие прогнозы. При этом обратите внимание: такое дерево учтет каждый признак один раз. Если вы хотите учесть его еще больше, понадобится еще более глубокое дерево, у него будет еще больше листьев, и нужно будет еще больше объектов обучающей выборки. Понятно, что это не всегда хорошо. Еще одна причина, по которой может понадобится отбирать признаки — это ускорение модели. Дело в том, что чем больше у вас признаков, тем более сложная модель получается. А чем более сложная модель у вас получается, тем больше времени ей требуется, для того чтобы построить прогноз. Но при этом иногда прогнозы нужно строить очень быстро. Представьте простой пример: вы решаете задачу рекомендаций товаров на сайте интернет-магазина. И пользователь, например, ищет себе что-то, нажимает на ссылку в поисковой выдаче и начинает переходить на страницу интересного ему товара. На этой странице есть поле, где показываются рекомендации к этому товару, например похожие товары или аксессуары, или что-то еще, которые должна выдавать ваша модель. И она должна выдать их очень быстро, чтобы пользователь не подумал, что страница слишком долго загружается, что сайт сломался, и не ушел к конкуренту. В этом случае вам нужна очень быстрая модель, и один из подходов к ускорению модели — это отбор признаков, построение модели над самыми важными признаками, которых достаточно, чтобы прогнозы были хорошими. Итак, какие подходы есть к отбору признаков? Самый простой — это одномерный подход. Вы оцениваете сходство каждого признака, связь каждого признака с целевой переменной. Например, измеряете корреляцию или как-то еще. Мы будем говорить о том, как это можно делать в следующих видео этого урока. Такой подход — довольно простой, он не учитывает сложные закономерности, тогда как в машинном обучении модели именно учитывают взаимосвязи признаков, взаимное влияние признаков, их пар или даже более сложные взаимодействия на целевую переменную. Такой же подоход считает, что все признаки — независимые. Он не всегда хорош, но иногда подходит, чтобы как-то отранжировать признаки, найти наиболее мощные среди них. Более сложные подходы к отбору признаков могут быть устроены следующим образом: вы перебираете некоторым способом различные подмножества признаков, для каждого такого подмножества обучаете модель, которая использует только эти признаки, и оцениваете ее качество. И дальше выбираете то подмножество, которое дает наилучшее качество. Такие подходы оказываются сложными из-за того, что они все переборные — вам нужно как-то перебирать подмножества признаков. Понятно, что всех подмножеств очень много, поэтому поиск должен быть более направленным. Мы тоже будем говорить о том, как лучше всего устроить такой перебор. Далее, вы можете использовать саму модель, чтобы оценивать важность признаков, чтобы отбирать только самые важные. Например, мы уже изучали Lasso, или L1-регуляризацию, которая позволяет отбирать признаки с помощью линейных моделей. Также похожие методы есть и в решающих деревьях, случайном лесе и градиентном бустинге — об этом мы тоже поговорим. Наконец, дело может быть даже не в отборе признаков. Представьте, что все признаки важны, но их слишком много. В этом случае может помочь понижение размерности, в котором предлагается строить новые признаки на основе старых, причем так, чтобы новых признаков было поменьше, но при этом они содержали в себе максимальное количество информации из исходных признаков. Итак, мы обсудили, что понижение размерности, отбор признаков — это очень важные задачи, которые помогают повысить качество модели, устранить шумовые признаки и ускорить модель. При этом есть отбор признаков, который отбирает наиболее важные признаки из всего множества, и есть понижение размерности, которое строит новые признаки на основе исходных так, чтобы новых признаков было меньше, но информации в них осталось как можно больше. В следующем видео мы поговорим о самых простых методах отбора признаков — одномерных.