2015-09-30 13 views
9

Guru,Python scikit học cắt pca.explained_variance_ratio_

Khi chọn số lượng các thành phần chính (k), chúng tôi chọn k là giá trị nhỏ nhất để ví dụ, 99% phương sai, được giữ lại.

Tuy nhiên, trong Python Scikit tìm hiểu, tôi không chắc chắn 100% pca.explained_variance_ratio_ = 0.99 bằng "99% phương sai được giữ lại"? Ai có thể khai sáng được không? Cảm ơn.

  • Các Python Scikit học PCA thủ công là đây

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

Trả lời

29

Vâng, bạn là gần đúng. Tham số pca.explained_variance_ratio_ trả về một vectơ của phương sai được giải thích theo từng thứ nguyên. Do đó, pca.explained_variance_ratio_[i] cho phương sai được giải thích chỉ bởi kích thước i + 1st.

Bạn có thể muốn thực hiện pca.explained_variance_ratio_.cumsum(). Điều đó sẽ trả về một véc tơ x sao cho x[i] trả về phương sai tích lũy tích lũy được giải thích bởi thứ nguyên i + 1 đầu tiên.

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() 

[ 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.  ] 

Vì vậy, trong dữ liệu đồ chơi ngẫu nhiên của tôi, nếu tôi chọn k=4 tôi sẽ giữ lại 93,3% của phương sai.

+1

T hank bạn rất nhiều! Giải thích tuyệt vời! Đôi khi hướng dẫn sử dụng Python được ghi lại/giải thích kém. Tôi hoàn toàn chứng ngộ! – Chubaka

+0

Một câu hỏi nữa: khi chúng ta thực hiện PCA (n_components = 1), scikit tìm hiểu "PCA" lệnh thực hiện "Tính toán hiệp phương sai hiệp ước từ dữ liệu chuẩn hóa" & "Sử dụng phân tích giá trị đơn (SVD) để tính toán riêng biệt"? Tôi không thấy bất kỳ nơi nào để chọn các phương pháp khác để tính toán các eigenvectors trong Python scikit tìm hiểu mô-đun PCA. – Chubaka

+1

Câu trả lời hay! điều này thực sự đã giúp tôi – Mikim

3

Mặc dù câu hỏi này cũ hơn 2 năm nhưng tôi muốn cung cấp thông tin cập nhật về điều này. Tôi muốn làm như vậy và có vẻ như bây giờ sklearn cung cấp tính năng này ra khỏi hộp.

Như đã nêu trong docs

nếu 0 < n_components < 1 và svd_solver == 'đầy đủ', chọn số lượng các thành phần như vậy mà số lượng phương sai mà cần phải được giải thích là lớn hơn tỷ lệ phần trăm theo quy định của n_components

Vì vậy, các mã yêu cầu tại là

my_model = PCA(n_components=0.99, svd_solver='full') 
my_model.fit_transform(my_matrix) 
Các vấn đề liên quan