вторник, 12 августа 2014 г.

Подбор предметов


Теперь вы знаете, как искать похожих людей и рекомендовать предметы данному человеку. Но что если нужно узнать, какие предметы похожи друг на друга? В данном случае вы можете определить степень сходства, выявив людей, которым понравился данный товар, и посмотрев, что еще им понравилось. По существу, это тот же метод, которым мы уже пользовались для определения похожести людей, – нужно лишь вместо людей всюду подставить товары. Излогаясь математическим языком - транспонировать)

Подбор схожих предметов

Произвидя поиск таким образом логика будет следующей: сравниваем 2 фильма и находим всех людей, которые смотрели оба фильма и смотрим оценки выставленные второму, если они хорошие, а лучше все 10ки)

Практика Евклида

select
v1.film_id, v2.film_id,
1/(1+(|/sum((v1.vote-v2.vote)^2))),--евклидово не взвешенное расстояние
count(1)--кол-во общих фильмов(вес для ф-ии)
from votes v1
join votes v2 on v1.user_id=v2.user_id 
where v1.film_id <> v2.film_id 
and v2.film_id=326
group by v1.film_id, v2.film_id
--having count(1)>10
order by 1/(1+(|/sum((v1.vote-v2.vote)^2))) desc, count(1) desc

Для сравнения возьмем фильм "Побег из Шоушенка". Метод Евклида посчитал, что на него больше всего похож фильм "Реал Мадрид". Спросите чем? Отвечу:

select
v1.film_id, v2.film_id,
v1.vote vote1, v2.vote vote2, v1.user_id, v2.user_id 
from votes v1
join votes v2 on v1.user_id=v2.user_id 
where v1.film_id <> v2.film_id 
and v2.film_id=326
and v1.film_id=155080

5 разных людей смотрели оба фильма и поставили не много не мало все 10ки!!! Но конечно, данный алгоритм никак не учитывает жанры, режиссеров или актеров. Однако никто не мешает ввести вам такие дополнительные фильтрующие весовые функции.

Практика Пирсона


select
v1.film_id,
case when ((sum(v1.vote^2)+1)-(sum(v1.vote)^2)/count(1)::float)*((sum(v2.vote^2)+1)-(sum(v2.vote)^2)/count(1)::float) <> 0
then
	(sum(v1.vote*v2.vote)-(sum(v1.vote)*sum(v2.vote))/count(1)::float)/(|/((sum(v1.vote^2)+1)-(sum(v1.vote)^2)/count(1)::float)*((sum(v2.vote^2)+1)-(sum(v2.vote)^2)/count(1)::float))
else
	0
end,
count(1)--кол-во общих критиков(вес для ф-ии)
from votes v1
join votes v2 on v1.user_id=v2.user_id 
where v1.film_id <> v2.film_id 
and v2.film_id=326 --фильм для сравнения
group by v1.film_id, v2.film_id
--having count(1)>10
order by 
case when ((sum(v1.vote^2)+1)-(sum(v1.vote)^2)/count(1)::float)*((sum(v2.vote^2)+1)-(sum(v2.vote)^2)/count(1)::float) <> 0
then
	(sum(v1.vote*v2.vote)-(sum(v1.vote)*sum(v2.vote))/count(1)::float)/(|/((sum(v1.vote^2)+1)-(sum(v1.vote)^2)/count(1)::float)*((sum(v2.vote^2)+1)-(sum(v2.vote)^2)/count(1)::float))
else
	0
end
desc,
count(1) desc

Запустив пирсона, получим совсем другой фильм - "Крезанутые". И это всего при 2х общих критиках. В общем советую Вам обратить внимание на закомментированную строку с having, считаю что нужно ее применить для более точного совпадения)

1 комментарий:

  1. Я ЗАРАЗ ФІНАНСОВО ЗАБЕЗПЕЧЕННЯ Кредиту, який я отримав від LFDS. Я хотів би донести це до відома громадськості про те, як я вступив у контакт з LFDS після того, як я втратив роботу та отримав відмову в кредиті мого банку та інших фінансових заклад за рахунок моєї кредитної оцінки. Я не міг платити збори за своїх дітей. Мене було поза рахунками, що збираються викинути з дому через неможливість платити свою оренду. Саме в цей період моїх дітей забрали у мене прийомну допомогу. Тоді я вирішив шукати кошти в Інтернеті, де я втратив 3670 доларів, які я позичив у друзів, яких я вирвав у двох інтернет-кредитних компаніях. Поки я не прочитав про: Служба фінансування Le_Meridian (lfdsloans@outlook.com / lfdsloans@lemeridianfds.com) десь в Інтернеті, все ще не переконала, через що я пережила, поки мій родич, який є духовенством, також не сказав мені про поточну кредитну схему LFDS за дуже низькою процентною ставкою 1,9 %% та прекрасними умовами погашення без штрафних санкцій за невиконання платежу. У мене немає іншого вибору, ніж зв’язатися з ними, що я зробив через текст + 1-989-394-3740, і містер Бенджамін відповів мені назад. Цей день був найкращим і найкращим днем ​​мого життя, який ніколи не можна забути, коли я отримувати кредитне сповіщення у розмірі 400 000,00 доларів США, на яке я звернувся. Я ефективно використала позику, щоб погасити свої борги та створити бізнес, і сьогодні я та мої діти так раді й виконуємо. Ви також можете зв’язатися з ними електронною поштою: (lfdsloans@outlook.com / lfdsloans@lemeridianfds.com) Телефон довідки WhatsApptext: + 1-989-394-3740 Чому я це роблю? Я роблю це, щоб врятувати стільки тих, хто потребує позики, щоб не стати жертвою афери в Інтернеті. Дякую і Бог вас усіх благословив, я Олександр Артем із парку Горизонт до н.е., Україна.

    ОтветитьУдалить