Eksik değerleri olan bir matrisin SVD'si


12

Bir Netflix tarzı öneri matrisim olduğunu ve belirli bir kullanıcı için gelecekteki potansiyel film derecelendirmelerini öngören bir model oluşturmak istediğimizi varsayalım. Simon Funk yaklaşımını kullanarak, tam matris ile madde-kullanıcı-kullanıcı-matrisi arasındaki Frobenius normunu bir L2 düzenleyici terim ile en aza indirmek için stokastik gradyan inişi kullanılır.

Pratikte, insanlar, hesaplama matrisinin eksik olan öneri matrisindeki eksik değerlerle ne yaparlar? Simon'ın blog gönderisini okuduğumdan tahminim, tahmin etmek için SADECE eksik olmayan terimleri (öneri matrisinin ~% 1'inden oluşur) kullanmasıdır (hiper parametreler ve düzenleyici bazı makul seçenekler ile). matrisin diğer% 99'u?

Uygulamada, tüm bu değerleri gerçekten atlıyor musunuz? Yoksa stokastik degrade inişten ÖNCE mümkün olduğunca çıkarım mı yapıyorsunuz? Eksik değerlerle başa çıkmak için standart en iyi uygulamalardan bazıları nelerdir?


1
Bu bir aynı soru gibi görünüyor bu . Soruyu orada cevapladım.
d_ijk_stra


2
@d_ijk_stra "cevaplandı" bir PDF bağlantısı ne kadar için biraz cömertçe koyarak
ali_m

Yanıtlar:


6

Evet, pratikte bu değerler atlanır. Bir Frobenius normu açısından açıklamanızda, bu, ölçülebilen normun bileşenlerini, yani bilinen derecelendirmelere sahip bileşenleri en aza indirmeye karşılık gelir. Düzenleme terimi, özellik vektörlerinin bileşenlerinde bir Bayesci olarak görülebilir, SVD bu önceki ve bilinen değerlere tabi olarak maksimum olabilirlik tahmincisini hesaplar.

SVD'yi eksik değerleri çıkarmak için bir yöntem olarak düşünmek muhtemelen en iyisidir. Bunu yapmak için daha iyi bir yolunuz varsa, neden SVD'ye ihtiyacınız var? Eğer yapmazsanız, SVD sizin için boşlukları mutlu bir şekilde dolduracaktır.


1
Bu eksik değerleri çıkarmak için SVD'yi nasıl kullanıyorsunuz? Eksik değerleri çıkarmak için başka yöntemler denediniz mi, yoksa eksik değerlerinizi tahmin etmek için kullanılabilecek bir rastgele orman sınıflandırıcısını eğitmek için eksik olmayan değerleri kullanın? Daha iyi sonuçlar alıyor musunuz, yoksa gerçekten soruna bağlı mı?
Vishal

1
SVD ayrışmasının ilgili bileşenlerini kullanarak, eksik değerleri gelecekteki değerleri tahmin ettiğiniz gibi çıkarırsınız. Gelecekteki derecelendirmeleri tahmin etmek, eksik değerleri çıkarmakla tamamen aynı problemdir. Eksik değerleri çıkarmak için iyi bir yolunuz varsa, bunu gelecekteki derecelendirmeleri tahmin etmek için kullanın. Eğer yapmazsanız, SVD bunun içindir.
Martin O'Leary

"SVD'yi eksik değerleri çıkarmak için bir yöntem olarak düşünmek muhtemelen en iyisidir". Ah, hayır, aslında SVD, bir SVD çalıştırmadan önce kullanıcının tüm eksik değerleri başka bir şekilde önceden çıkarmasına bağlıdır. SVD hiçbir şey ifade etmez.
Geoffrey Anderson

1

Pratikte, insanlar, hesaplama matrisinin eksik olan öneri matrisindeki eksik değerlerle ne yaparlar? Simon'un blog gönderisini okumaktan tahmin ettiğim, SADECE bir model oluşturmak için eksik olmayan terimleri kullanması.

Bu doğru - bu onun ve modelinizin amacı, eksik terimleri tahmin etmek, değil mi? Birçoğunun gerçekten unutacağı çok önemli bir nokta. Onlar dünyada kayıpsız bir veri eksik sabit için önceden atamak için "varsayabileceğini" düşünüyorlar ve işler bir SVD gelen sihirli yeterince iyi çalışır. Çöp içeri, çöp dışarı: Bu gerçek ve onu izlesen iyi olur. Yararlı bir şeyin ortaya çıkmasını istiyorsanız, önemsiz verileri bir modele beslememeniz daha iyi olur.

Çoğunlukla seyrek veri kümesinde "herhangi bir eksik değeri çıkarmak" en iyisi DEĞİL DEĞİLDİR ve daha sonra SVD'yi sizin için değerleri empoze etmek için biraz umutla (SVD'yi çalıştırmadan önce empoze ettiğiniz), değil mi? Ne düşünüyorsun, bir model sihir mi? Çoğunluk çöp verilerinin üstesinden gelmek için hiçbir sihir veya teknoloji yoktur. Bir modele, gerçek olmadığında verilerin gerçek veri olduğunu söyleyemezsiniz, ama gerçekten sadece ince havadan yapılmış bazı önemsiz şeyler.

SVD başka yararlı şeyler yapar, bu yüzden SVD'nin en azından değersiz olduğunu söylemiyorum. SVD'yi yalnızca tam veri kümelerinde kullanın, belki de geliştirme sırasında önyargı hatasına ve sapma hatasına tüm dikkat gösterilerek zaten bir makine öğrenme modelini kullanmanın eksik değerlerini akıllıca etkilemişsinizdir.

Makine öğrenmenin yolu budur. Dolayısıyla, bir matris çarpanlara ayırma tasarımı kullanarak değerlerin nasıl impute edileceğini bilmek istiyorsanız, makine öğrenimini kullanarak tam olarak bunu yapmanın kesinlikle iyi yolları vardır ve en önemlisi, gereksiz bir şekilde öğrenmek için bir modele herhangi bir önemsiz veri beslemezler.

Tam olarak böyle bir makine öğrenme matrisi çarpanlara ayırma modeli, modül 5'te 5. Stanford çevrimiçi Madencilik Masif Veri Kümelerinin eğitmenleri tarafından oldukça iyi bir şekilde sunulmaktadır. Onlar olsa sizin için kodlama yok.

Tamam, çünkü temel makine öğrenimini anlarsanız, kendiniz kodlayabilirsiniz. Kayıp fonksiyonu ve maliyet fonksiyonunun ne olduğunu biliyor musunuz? Düzenlileştirme? Dereceli alçalma? AR Matris çarpımı ve toplama ile iyi misiniz? Sapma hatası ve sapma hatası? Eğer öyleyse o zaman iyisin. Değilse, o zaman çok iyi bir başlangıç ​​yerlerinden biri olan Andrew Ng'in çevrimiçi kursu Machine Learning at Coursera'yı almayı düşünmelisiniz . Daha sonra, tavsiye modeli yapmak için matris çarpanlarına ayırma ve makine öğrenimi hakkında tam olarak konuşan çevrimiçi Madencilik Büyük Veri Setleri dersini de alın .

Söylemek yeterli, tamamen Simon Funk'ın yaptığı gibi eksik verileri çok iyi işleyen kendi çarpanlara ayırma modelinizi tamamen tasarlayabilir ve kodlayabilirsiniz ve sıfırdan yapabilirsiniz, ancak geri döndüğü gibi artık zor değil çünkü artık sizin için çok şey yapan TensorFlow veya Microsoft CNTK gibi bir araç kullanabilirsiniz. Bir kayıp fonksiyonu ve bir maliyet fonksiyonu tanımlayın, bir optimize edici seçin, veri setinizi eğitime ayırın, geliştirin, gerçekte mevcut olan verilerden test edin (etiketli veriler) ve çalışmasına izin verin. Cidden, işe yarıyor. TF ve grafik oluşturma hatalarını ayıklamak kolay değildir, ancak sonunda harika çalışabilir ve bir sayfadan daha az kod alır.

Özellikle, sahte verileri bir matris çarpanlara ayırma makinesi öğrenme modeline beslememenin bir yolu , kayıp verilerinizin kayıp ve maliyet fonksiyonlarınızdaki matris öğelerini atlamaktır .


1

Birçok öneri sistemini gözden geçiren ve karşılaştıran bir tez var, ancak eksiklerin uzun vadeli takibi hakkında konuşmuyorlar, örneğin tahminleri test etmek için. Bu sorunuzun bir parçası mı? Zaman bileşenini bu şekilde mi kullanıyorsunuz? Tez makaleleri ve yöntemleri arasında Rendle makalelerindeki araştırmalar gibi zamana duyarlı / hassas sistemler bulunmaktadır. Sorunuz aynı zamanda verilerin esnekliğini ele almakla ilgili ise, bu tez boyunca ayrıntılı olarak tartışılmaktadır ve birçok yöntem vardır. seyrek matrisler ve sıfırlarla çarpışma veya kullanıcıların kümelenmesi (öğeleri benzer şekilde derecelendiren kullanıcılar) için bir bağlantı matrisi veya öğelerin kümelenmesi için bir bağlantı matrisi ekleyen matris çarpanlarına ayırma.

Tez başlığı Evgeny Frolov tarafından "Sınırlı Tercih Bilgisine Sahip Tavsiye Sistemleri için Düşük Sıralı Modeller" dir https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.