[БЕЗ_ЗВУКА] Рассмотрим задачу использования метода k ближайших соседей на практике. Допустим, нам нужно построить рекомендации фильмов. У нас есть исторические данные с оценками, которые ставили пользователи фильмам. И нам нужно для тех фильмов, которые пользователи еще не видели, спрогнозировать оценки, которые пользователи могли бы им поставить, для того чтобы рекомендовать те фильмы, которые, скорее всего, будут оценены наиболее высоко. У нас есть матрица пользователя фильма, в которой какие-то значения нам известны, а какие-то значения нет: их-то нам и нужно спрогнозировать. И вот, допустим, нам нужно прогнозировать одно из таких значений. Как мы можем действовать? Мы можем просто взять и посмотреть, какие пользователи похожи на пользователя, для которого мы делаем прогноз, и в какой степени. Тогда мы можем выделить тех, кто похож в большей степени, и тех, кто похож в меньшей степени, и присвоить им какие-то веса: тем, кто больше похож, веса побольше, тем, кто меньше, веса поменьше. И вот с этими весами мы можем просто взять и усреднить оценки, которые другие пользователи ставили этому фильму. Это и будет нашим прогнозом для исходного пользователя. Такой подход называется user-based, потому что все рассуждения в нем ведутся от рассмотрения похожих пользователей. И аналогично можно было бы придумать подход item-based, то есть смотреть на похожие фильмы и усреднять по ним. Дальше мы будем для определенности говорить про user-based подход, но для item-based все аналогично. Нам нужно ввести каким-то образом похожесть пользователей, то есть нам нужно для пользователя i и для пользователя j уметь отвечать на вопрос, насколько они близки друг к другу по интересам. Для начала давайте просто возьмем и посчитаем средний рейтинг, который ставит фильмам пользователь i и пользователь j. Теперь можно вычислить похожесть ну, например, по формуле, приведенной на слайде. Обратите внимание, это просто уже известная нам косинусная мера, в которой мы вычли из векторов, описывающих пользователей, средние значения рейтинга. Также часто применяется следующий трюк. Можно суммировать не по всем фильмам, а только по фильмам, которые видели и i-й, и j-й пользователь. Но еще можно сразу вычесть средние значения из векторов и использовать обычную косинусную меру. Теперь остается придумать, как же прогнозировать рейтинг фильма. Можно просто взять средний рейтинг, который ставят пользователи, и добавить к нему взвешенную сумму рейтингов, которые ставили другие пользователи, но, конечно, с поправкой на средние значения. Но на самом деле это может быть не очень хорошей идеей, если у нас очень много данных по большому количеству пользователей. Действительно, зачем нам считать все время суммы, в которых несколько миллионов слагаемых? Достаточно просто посмотреть на k ближайших соседей к пользователю, для которого мы делаем оценку, и просуммировать по ним. Вот так метод k ближайших соседей может быть адаптирован для задачи рекомендации. Таким образом, мы узнали, что с помощью kNN можно решать не только задачи классификации регрессии в самом обычном их виде, но и какие-то не совсем стандартные задачи. Нужно лишь уметь понимать, какую величину и по каким именно соседям оправданно усреднять, а также придумывать хорошую метрику.