commited on
Commit
689b444
·
verified ·
1 Parent(s): ba31f38

Upload 3 files

Browse files
Files changed (3) hide show
  1. anime_recommender_lightfm.pkl +3 -0
  2. app.py +56 -0
  3. requirements.txt +5 -0
anime_recommender_lightfm.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:83d69819b978699f6df64a1eee837d7d6f1f504f4b55bb76bd2d62ef92ef5e44
3
+ size 2033431
app.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pickle
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ # Modeli yükle
7
+ with open("anime_recommender_lightfm.pkl", "rb") as f:
8
+ data = pickle.load(f)
9
+
10
+ model = data["model"]
11
+ dataset = data["dataset"]
12
+ interactions = data["interactions"]
13
+ user_id_map = data["user_id_map"]
14
+ item_id_map = data["item_id_map"]
15
+ anime_df = data["anime"]
16
+
17
+ # Ters eşlemeler
18
+ reverse_user_map = {v: k for k, v in user_id_map.items()}
19
+ reverse_item_map = {v: k for k, v in item_id_map.items()}
20
+
21
+ # Başlık
22
+ st.title("🎌 Anime Tavsiye Sistemi (LightFM)")
23
+
24
+ # Kullanıcı seçimi
25
+ user_ids = list(user_id_map.keys())
26
+ user_id_input = st.selectbox("👤 Bir kullanıcı ID seçin:", user_ids)
27
+
28
+ # Kullanıcı indeksini al
29
+ user_index = user_id_map[user_id_input]
30
+
31
+ # Tüm anime indekslerini al
32
+ n_items = interactions.shape[1]
33
+ known_positives = interactions.tocsr()[user_index].indices
34
+
35
+ # Öneri skorlarını hesapla
36
+ scores = model.predict(user_ids=user_index, item_ids=np.arange(n_items))
37
+ top_items = np.argsort(-scores)
38
+
39
+ # Kullanıcının zaten izlediklerini göster
40
+ st.subheader("✅ İzledikleriniz:")
41
+ for idx in known_positives[:5]:
42
+ anime_id = reverse_item_map[idx]
43
+ title = anime_df[anime_df["anime_id"] == anime_id]["name"].values[0]
44
+ st.write("✔️", title)
45
+
46
+ # Önerilen anime'ler
47
+ st.subheader("🤖 Size Önerilenler:")
48
+ count = 0
49
+ for idx in top_items:
50
+ if idx not in known_positives:
51
+ anime_id = reverse_item_map[idx]
52
+ title = anime_df[anime_df["anime_id"] == anime_id]["name"].values[0]
53
+ st.write("⭐", title)
54
+ count += 1
55
+ if count >= 10:
56
+ break
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ streamlit
2
+ lightfm
3
+ numpy
4
+ pandas
5
+ scikit-learn