Я намагаюся створити хеш-чутливість до косинусної місцевості, щоб я міг знайти кандидата подібних пар елементів, не порівнюючи всіх можливих пар. У мене це в основному працює, але, здається, більшість пар у моїх даних мають схожість на косинус у діапазоні від -0,2 до +0,2, тому я намагаюся нарізати його досить тонко і вибирати речі з косинусоподібною схожістю 0,1 і вище.
Я читав розділ 3. Майнінг масивних наборів даних. Це говорить про підвищення точності вибору пари кандидатів шляхом посилення сімейства, чутливої до місцевості. Я думаю, що я просто розумію математичне пояснення, але я намагаюся зрозуміти, як я це реалізую практично.
Я маю поки що таке
- Я маю на увазі 1000 фільмів у кожному з рейтингами від деяких користувачів 1М користувачів. Кожен фільм представлений розрідженим вектором балів користувачів (номер рядка = ідентифікатор користувача, значення = оцінка користувача)
- Я будую N випадкових векторів. Довжина вектора відповідає довжині векторів фільму (тобто кількості користувачів). Значення вектора дорівнює +1 або -1. Я фактично кодую ці вектори як бінарні, щоб заощадити простір, з +1 відображено до 1, а -1 - до 0
- Я будую вектори ескізів для кожного фільму, беручи крапковий добуток фільму і кожен з N випадкових векторів (а точніше, якщо я створюю матрицю R, поклавши N випадкових векторів горизонтально і накладаючи їх один на одного, то ескіз для фільму m - R * m), то приймаючи знак кожного елемента в отриманому векторі, тому я закінчую ескізним вектором для кожного фільму + 1s та -1s, який я знову кодую як двійковий. Кожен вектор довжиною N біт.
- Далі я шукаю подібні ескізи, роблячи наступне
- Я розділив вектор ескізу на b діапазони r біт
- Кожна смуга r біт - це число. Я поєдную це число з номером групи і додаю фільм у хеш-відро під цим номером. Кожен фільм може бути доданий до більше ніж одне відро.
- Потім я заглядаю в кожне відро. Будь-які фільми, які знаходяться в одному відрі, є парами кандидатів.
Порівнюючи це з 3,6,3 ммдс, мій І крок, коли я дивлюся на смуги r бітів - пара фільмів проходить крок І, якщо r біти мають однакове значення. Мій АБО крок відбувається у відрах: фільми - це пари кандидатів, якщо вони обидва в будь-якому відрі.
Книга передбачає, що я можу "підсилити" свої результати, додавши більше кроків AND і OR, але я втрачаю з точки зору того, як це зробити практично, оскільки пояснення процесу побудови для подальших шарів полягає в тому, щоб перевірити парну рівність, а не придумуючи номери відра.
Хтось може допомогти мені зрозуміти, як це зробити?