Her şeyden önce, çok değişkenli boyutlara sahipseniz ve veri noktalarını yeni ortogonal temellere döndürerek ve yalnızca en büyük varyansa sahip eksenleri alarak sorun boyutunu azaltmak istediğinizde , boyutluluk azaltma kullanılır . 8 değişkenle (sütunlar) alanınız zaten düşük boyutludur, değişken sayısını azaltmak, bellek boyutuyla teknik sorunları çözme olasılığı düşüktür, ancak veri kümesi kalitesini çok fazla etkileyebilir. Somut durumda, çevrimiçi öğrenmeye bakmak daha umut vericiyöntemleri. Kabaca konuşmak gerekirse, tüm veri kümesiyle çalışmak yerine, bu yöntemler bir zamanlar (genellikle "küçük gruplar" olarak adlandırılır) bir kısmını alır ve adım adım bir model oluşturur. (Şahsen "çevrimiçi" kelimesini İnternet üzerinden Twitter üzerinden veri aktarımı yapmak için sonsuz uzun veri kaynaklarına referans olarak yorumlamayı seviyorum, ki burada tüm veri kümesini bir kerede yükleyemezsiniz).
Peki ya PCA gibi boyutsallık azaltma tekniğini belleğe sığmayan bir veri setine gerçekten uygulamak istiyorsanız? Normal olarak, bir veri kümesi, bir veri matrisi olarak temsil edilir X boyutu arasında n x m , n, gözlem (satırlar) ve sayısı olan m değişkenleri (sütun) bir sayıdır. Tipik olarak hafıza ile ilgili problemler bu iki sayının sadece birinden gelir.
Çok fazla gözlem (n >> m)
Eğer varsa çok fazla gözlemleri , ancak değişken sayısı orta küçük arasındadır yapabilirsiniz aşamalı kovaryans matrisi oluşturmak . Gerçekten de, tipik bir PCA boyutu bir kovaryans matrisi inşa oluşur m x m ve buna tekil değer ayrışımı uygulanması. İle m türü float64 ait = 1000 değişken bir kovaryans matrisi SVD ile kullanılabilecek belleğe kolayca uyan ve büyüklüğü 1000 * 1000 x 8 ~ 8 MB sahiptir. Bu nedenle, kovaryans matrisini sadece tüm veri setini belleğe yüklemeden oluşturmak yeterlidir - oldukça izlenebilir bir görev .
Alternatif olarak, veri kümenizden küçük bir temsilci örneği seçebilir ve kovaryans matrisini yaklaşık olarak belirleyebilirsiniz . Bu matris normal olarak aynı özelliklere sahip olacak, sadece biraz daha az doğru.
Çok fazla değişken (n << m)
Diğer yandan, bazen çok fazla değişkeniniz olduğunda, kovaryans matrisinin kendisi belleğe sığmayacaktır. Örneğin, 640x480 görüntülerle çalışıyorsanız, her gözlem 640 * 480 = 307200 değişkenine sahiptir, bu 703 Gb'lik bir kovaryans matrisine yol açar! Bu kesinlikle bilgisayarınızın hafızasında, hatta kümenizin hafızasında saklamak istediğiniz şey değildir. Bu yüzden, bir kovaryans matrisi oluşturmadan boyutları küçültmemiz gerekiyor.
Bunu yapmak için en sevdiğim yöntem Rastgele Projeksiyon . Eğer veri kümesi varsa Kısacası, X boyutu , n x m , bazı seyrek rasgele matris ile çarpın olabilir R büyüklüğü m x k ile ( k << m ve) yeni matris elde X' bir çok daha küçük boyutta , n x k orijinali ile yaklaşık aynı özelliklere sahip . Neden çalışıyor Öyleyse, PCA'nın ortogonal eksenler kümesini (temel bileşenler) bulmayı ve verilerinizi ilk önce k üzerine yansıtmayı hedeflediğini bilmelisiniz.Bunların Seyrek rastgele vektörlerin neredeyse dik olduğu ve dolayısıyla yeni bir temel olarak kullanılabileceği ortaya çıktı.
Ve tabii ki, tüm veri kümesi çarpma gerekmez X ile Ar - her gözlem çevirebilir x ayrı ayrı ya da mini gruplar halinde yeni bazda içine.
Rastgele SVD adı verilen benzer bir algoritma da var . Bununla ilgili gerçek bir deneyimim yok, ancak burada açıklamalarla birlikte örnek kod bulabilirsiniz .
Sonuç olarak, büyük veri setlerinin boyutsallığı azaltma için kısa bir kontrol listesi:
- Çok fazla boyutunuz (değişkeniniz) yoksa, sadece çevrimiçi öğrenme algoritmalarını kullanın.
- Çok sayıda gözlem varsa, ancak makul sayıda değişken varsa (kovaryans matrisi belleğe uyar), matrisi adım adım yapılandırın ve normal SVD kullanın.
- Değişkenlerin sayısı çok yüksekse, artımlı algoritmalar kullanın.