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
150

Criando sistemas de recomendação com scikit-surprise

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