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ı).

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı 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 np
2from sklearn.decomposition import NMF
3
4# 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])
11
12# 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_
16
17# Tahmin edilen matris
18tahmin = kullanici_faktorer @ film_faktorer
19
20print("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]]
6
7Tahmin:
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]]
12
13Boş hücre tahmini (Kullanıcı 1, Film 2):
140.04

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

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • kahvekokusu

    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.

  • aysonubekleyen

    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

  • adlı kullanıcıya yanıt verdi
    joksdy
    @joksdy

    algoritma kendisi buluyor, ama ne bulduğunu kimse bilmiyor işte.

  • adlı kullanıcıya yanıt verdi
    joksdy
    @joksdy

    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.