Matris Çarpanlarına Ayırma: İşbirlikçi Filtrelemede Gizli Faktörler
İşbirlikçi filtrelemede, kullanıcılar ve ürünler arasındaki etkileşimleri bir matrise koyarız. Örneğin: kullanıcı 1 filmi A'ya 5 yıldız verdi, filmi B'ye 3 yıldız verdi.
Sorun şu: matrisin çoğu boş. Kullanıcılar her filmi izlemez. Matris çarpanlarına ayırma, bu boş hücreleri tahmin etmek için gizli faktörleri bulur.
Ana fikir: Her kullanıcı ve her ürün, görünmeyen "gizli faktörlerin" bir kombinasyonudur. Örneğin filmler için gizli faktörler "aksiyon seviyesi", "romantizm", "mizah" olabilir.
Matrisi iki küçük matrise ayırırız:
1Orijinal Matris (n×m) = Kullanıcı Faktörleri (n×k) × Ürün Faktörleri (k×m)Burada k, gizli faktör sayısıdır (genelde 10-50 arası).
Algoritma:
1. Rastgele faktör matrisleriyle başla
2. Bilinen değerlerle hatayı hesapla
3. Gradyan inişle faktörleri güncelle
4. Boş hücreleri tahmin et
1import numpy as np2from sklearn.decomposition import NMF34# Kullanıcı-Film puanları (0 = izlenmedi)5matris = np.array([6[5, 3, 0, 1],7[4, 0, 0, 1],8[1, 1, 0, 5],9[1, 0, 0, 4]10])1112# NMF ile çarpanlarına ayır (k=2 gizli faktör)13model = NMF(n_components=2, init='random', random_state=42, max_iter=200)14kullanici_faktorer = model.fit_transform(matris)15film_faktorer = model.components_1617# Tahmin edilen matris18tahmin = kullanici_faktorer @ film_faktorer1920print("Orijinal:")21print(matris)22print("\nTahmin:")23print(tahmin.round(2))24print("\nBoş hücre tahmini (Kullanıcı 1, Film 2):")25print(tahmin[0, 2].round(2))Çıktı:
1Orijinal:2[[5 3 0 1]3[4 0 0 1]4[1 1 0 5]5[1 0 0 4]]67Tahmin:8[[4.89 3.12 0.04 1.05]9[3.94 2.52 0.03 0.85]10[1.02 0.82 0.01 5.04]11[1.05 0.84 0.01 4.12]]1213Boş hücre tahmini (Kullanıcı 1, Film 2):140.04Bu yöntem Netflix, Spotify, Amazon'da öneriler için kullanılır. Kullanıcı A ve B aynı gizli faktörlere sahipse, A'nın beğendiği ürün B'ye de önerilir.
Avantajlar: Hızlı, ölçeklenebilir, az veri gerektirir.
Sınırlamalar: Soğuk başlangıç problemi (yeni kullanıcı/ürün), gizli faktörlerin yorumlanması zor.
4 yorum
doğru işte, önerilerin kötü çıkması da ondan. algoritma senin izlediğin filmlerden pattern çıkarmaya çalışıyor ama yeterli veri yoksa yanılıyor.
algoritma kendisi buluyor, ama ne bulduğunu kimse bilmiyor işte.
ya bu gizli faktörler nasıl bulunuyor ki algoritma kendisi mi keşfediyor yoksa birisinin söylemesi mi gerekiyor çünkü aksiyon romantizm diye örnekler verildi ama gerçekte ne bulduğunu hiç anlamadım
vay be, bu da ne demek oluyor işte. yani senin izlemediğin filmleri tahmin ediyor mü? eğer öyleyse çok mantıklı geldi. benim profili de tutmuyor demek ki, ne kadar film izledim ama siteler hep çöp öneriliyor.