Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Criando sistemas de recomendação com scikit-sur...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Guilmour Rossi Guilmour Rossi
October 24, 2018
170

Criando sistemas de recomendação com scikit-surprise

Avatar for Guilmour Rossi

Guilmour Rossi

October 24, 2018
Tweet

Transcript

  1. 3

  2. 8 MovieLens • MovieLens 20M Dataset (20 milhões de ratings

    aplicados em 27 mil filmes por 138 mil usuários.) • MovieLens 100K Dataset • MovieLens 1M Dataset
  3. 12 Outros qualidades: • Facilidade em implementar novas ideias de

    algoritmos. • Possui ferramentas para avaliar, analisar e comparar as performances dos algoritmos.
  4. 15 Instalação $ pip install numpy $ pip install scikit-surprise

    from surprise import Dataset, evaluate from surprise import KNNBasic Importar
  5. 16 Passo 1 • Para cada usuário queremos recomendar filmes

    que ele ainda não assistiu (avaliação 0). Então usamos KNN.
  6. 17 Dataset data = Dataset.load_builtin("ml-100k") trainingSet = data.build_full_trainset() • Uma

    Matriz esparsa de 943 linhas (usuários) por 1682 colunas (filmes). • Avaliações de 1-5 • Se ainda não assistiu 0 →
  7. 18 Passo 2 • Para cada filme A, que o

    usuário B não assistiu, nós encontramos um conjunto de usuários U que são similares ao usuário B e que assistiram o filme A.
  8. 19 sim_options = { 'name': 'cosine', 'user_based': False } knn

    = KNNBasic(sim_options=sim_options) Similaridade de cosenos https://www.researchgate.net/figure/The-difference-between-Euclidean-distance-and-cosine-similarity_fig2_320914786
  9. 20 Passo 3 • Para cada usuário similar U, pegamos

    a avaliação de U no filme A e multiplicamos pela similaridade de coseno entre o usuário B e o usuário U.
  10. 21 Passo 4 • Somamos essas avaliações com pesos e

    dividimos pelo número de usuários em U, então obtemos a possível avaliação média do filme A feita pelo usuário B.
  11. 23 Passo 5 • As predições de avaliações mais altas

    são as recomendações de itens para o usuário B.
  12. 24 def get_top_n(predictions, n=10): # Mapeia as predições para cada

    usuário top_n = defaultdict(list) for uid, iid, true_r, est, _ in predictions: top_n[uid].append((iid, est)) # Ordena as predições para cada usuário baseado nos k maiores ratings for uid, user_ratings in top_n.items(): user_ratings.sort(key=lambda x: x[1], reverse=True) top_n[uid] = user_ratings[:n] return top_n Pegar top_n recomendações
  13. 25 top_n = get_top_n(predictions, n=10) # Imprima os itens recomendados

    para cada usuário for uid, user_ratings in top_n.items(): print(uid, [iid for (iid, _) in user_ratings]) Pegar top_n recomendações
  14. 26

  15. 28 Créditos • Template do slide: RGBY-Left https://extensions.libreoffice.org/templates/rg by-left (CC-BY-SA-v4

    (Creative Commons Attribution- ShareAlike 4.0 International) • Código usado nos slides disponível em: https://github.com/NicolasHug/Surprise/blob/mas ter/examples/top_n_recommendations.py