2015-09-30 12 views
9

Guru, öğrenmek scikit.Python <p></p> başlıca bileşenleri (k) sayısını seçerken, biz örneğin, varyans% 99, korunur, böylece en küçük değer olması choose k pca.explained_variance_ratio_ kesme

Ancak, Python Scikit öğrenmesinde,% 100 emin değilim, pca.explained_variance_ratio_ = 0.99, "varyansın% 99'u korunur" a eşittir? Birisi aydınlatabilir mi? Teşekkürler.

  • Python Scikit PCA kılavuzu öğrenmek Evet, neredeyse haklısın burada

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

cevap

29

olduğunu. pca.explained_variance_ratio_ parametresi, her boyutun açıkladığı varyansın bir vektörünü döndürür. Böylece pca.explained_variance_ratio_[i] sadece i + 1 boyutunda açıklanan varyansı verir.

Muhtemelen pca.explained_variance_ratio_.cumsum() yapmak istiyorsunuz. Bu x bir x[i] ilk i + 1 boyutları tarafından açıklanan kümülatif varyansı döndürecek şekilde döndürecektir. Ben k=4 aldı eğer


[ 1.50756565 1.29374452 0.97042041 0.61712667 0.31529082] 
[ 0.32047581 0.27502207 0.20629036 0.13118776 0.067024 ] 
[ 0.32047581 0.59549787 0.80178824 0.932976 1.  ] 

import numpy as np 
from sklearn.decomposition import PCA 

np.random.seed(0) 
my_matrix = np.random.randn(20, 5) 

my_model = PCA(n_components=5) 
my_model.fit_transform(my_matrix) 

print my_model.explained_variance_ 
print my_model.explained_variance_ratio_ 
print my_model.explained_variance_ratio_.cumsum() 

Yani benim rastgele oyuncak verilerinde, ben varyansın% 93.3 koruyacak.

+1

T seni çok seviyorum! Harika bir açıklama! Bazen Python el kitabı zayıf belgelenmiştir/açıklanmıştır. Tamamen aydınlandım! – Chubaka

+0

Bir soru daha: PCA (n_components = 1) yaptığımızda, scikit "PCA" komutlarının "normalleştirilmiş verilerden kovaryans matrisini hesapla" ve "Özdeğerleri hesaplamak için tek değerli ayrıştırma (SVD) kullan" komutunu öğrenir? Python scikit PCA modülünde özvektörler hesaplamak için başka yöntemler seçmek için herhangi bir yer görmüyorum. – Chubaka

+1

Harika cevap! Bu gerçekten bana yardımcı oldu – Mikim

3

Bu soru 2 yaşından büyük olmasına rağmen, bu konuda bir güncelleme yapmak istiyorum. Aynı şeyi yapmak istedim ve şu anda sklearn gibi görünüyor, bu özellik kutunun dışında kalıyor. docs

ise 0 < n_components belirtildiği gibi

< 1 ve svd_solver == açıklanması gereken sapma miktarı, oranından daha büyük olduğu şekilde bir bileşen sayısını 'tam' seçeneğini n_components

tarafından belirtilen Yani gerekli kod artık

my_model = PCA(n_components=0.99, svd_solver='full') 
my_model.fit_transform(my_matrix) 
İlgili konular