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

Criando sistemas de recomendação com scikit-surprise

Guilmour Rossi
October 24, 2018
130

Criando sistemas de recomendação com scikit-surprise

Guilmour Rossi

October 24, 2018
Tweet

Transcript

  1. 1 Criando sistemas de recomendação com scikit-surprise Guilmour Rossi me@guilmour.org

  2. 2 Sistemas de Recomendação

  3. 3

  4. 4 Engines de Recomendação

  5. 5 Scikit-Surprise Surprise é um add-on SciPy para construir e

    analizar sistemas de recomendação
  6. 6 Boa documentação

  7. 7 Datasets imbutidos GroupLens: Social Computing Research at the University

    of Minnesota
  8. 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
  9. 9 Datasets imbutidos

  10. 10 Algoritmos de predição já implementados

  11. 11 Algoritmos de predição já implementados

  12. 12 Outros qualidades: • Facilidade em implementar novas ideias de

    algoritmos. • Possui ferramentas para avaliar, analisar e comparar as performances dos algoritmos.
  13. 13 Outros qualidades:

  14. 14 Show me some code

  15. 15 Instalação $ pip install numpy $ pip install scikit-surprise

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

    que ele ainda não assistiu (avaliação 0). Então usamos KNN.
  17. 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 →
  18. 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.
  19. 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
  20. 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.
  21. 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.
  22. 22 Treinando o modelo knn.train(trainingSet) testSet = trainingSet.build_anti_testset() predictions =

    knn.test(testSet) Fazendo as predições
  23. 23 Passo 5 • As predições de avaliações mais altas

    são as recomendações de itens para o usuário B.
  24. 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
  25. 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
  26. 26

  27. 27 me@guilmour.org | @guilmour | guilmour.org Obrigado! Guilmour Rossi me@guilmour.org

  28. 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