Revision bc4ae43da0ba264e180a4f05f33f25a7f53724e2 authored by Susanne Zabel on 30 March 2021, 09:06:11 UTC, committed by Susanne Zabel on 30 March 2021, 09:06:11 UTC
1 parent b252134
Raw File
PCA.cpython-37.pyc
B

7iG`1�@s|ddlmZddlZddlmZe�dd�ddlmZddlmZddl	m
ZddlmZda
dd	�ZGd
d�de�ZdS)�)�arrayN)�configZjax_enable_x64T)�jacrev)�DimensionReductionMethodcCs�|tj|dd�}d|jdt�t�|�|�}tj�|�\}}tj|dd�}tj|dd�}t�|dd�|f�dt	�dd�f}|dt	�|fS)Nr)�axis�)
�np�mean�shape�dot�	transpose�linalg�eigh�argsort�sort�N_COMPONENTS)�X�
covariance�eigenvalues�eigenvectors�sorting�r�6/share/home/zabel/projects_romanov/jax/src2/jax/PCA.py�pca_forwards &rc@sfeZdZdZdd�Zdd�Zddd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
ddd�Zdd�Zdd�Z
dS)�PCAanPCA: Class computing the PCA and corresponding Jacobian of a matrix.

    Attributes:
        matrix (DataMatrix): Instance of the DataMatrix class
        n_compontents (int): Number of output dimensions
        axis (int): 0 or 1 indicating if features are in columns (0) or rows (1)
        compute_jacobian (Bool): indicates if jacobian should be computed or notcOs6tj|f|�d|_d|_d|_d|_d|_d|_dS)N)r�__init__rrr�cov_eigenvectors�jacobian_eigenvalues�cov_eigenvalues)�self�args�kwargsrrrr$szPCA.__init__cCs�|jtj|jdd�|_d|jjdt�t�|j�|j�|_tj�|j�\|_	|_
tj|j	dd�}tj|j	dd�d|j
�|_	t�|j
dd�|f�d|j
�dd�f|_
dS)Nr)rr)�matrixrr	r
rrrr
rrrrr�n_components)rrrrr�	pca_value-s( z
PCA.pca_valueTc	Cs�|jr,|jatt�|j�\|_|_|��n|��t	�
|j�|_|jr�t	�t	j|j|j|j
d|j
d|j
dfdd�|j
d|j|j
d|j
df�|_t	�|j|j|j
d|j
df�|_dS)Nrr�F)�order)Zcompute_jacobianr#rrrr"r�jacobianr$rrrZreshape�size)r�centerrrr�pca_grad5s
2zPCA.pca_gradcCs<|jdkrtd��n$t�|j|jdd�d|j�f�|_dS)Nz.eigenvalues and eigenvectors not computed yet.r)r�	Exceptionrrr"rr#Ztransformed_data)rrrr�transform_dataIs

zPCA.transform_datac
Cs�|jr^t�|jd|j|jd�dd�f|jt�|jd|j|jd�dd�f��|_nZt�t�|jd|j|jd�dd�f|j�t�|jd|j|jd�dd�f��|_dS)Nrr)	�diagonal_data_covrrr'r#r(�cov_datarr)rrrr�compute_cov_eigenvectorsOsXzPCA.compute_cov_eigenvectorsc	Cs�|jrJt�|jd|j�dd�f|jt�|jd|j�dd�f��|_nFt�t�|jd|j�dd�f|j�t�|jd|j�dd�f��|_dS)Nr)r-rrrr#r.rr)rrrr�compute_cov_eigenvaluesUsD$zPCA.compute_cov_eigenvaluesNcCs�|dkrt|j�}t��}t�dd�td|�D�|jt�|j�d|��tjdd�td|�D�t�	|jt�|j��d|�ddd�t�
d�dS)	NcSsg|]}|�qSrr)�.0�irrr�
<listcomp>`sz?PCA.plot_variance_explained_by_eigenvectors.<locals>.<listcomp>rcSsg|]}|�qSrr)r1r2rrrr3asz-boZred)�cz var_explained_by_eigenvalues.png)�lenr�plt�figureZbar�ranger�sumZplotZcumsum�savefig)r�n�figrrr�'plot_variance_explained_by_eigenvectors\s
2>z+PCA.plot_variance_explained_by_eigenvectorsc
sn|dkrt�j�}t��}tjdd�td|d�D��j�fdd�t|�D�ddddd	d
�t�|d�dS)NcSsg|]}|�qSrr)r1r2rrrr3hsz4PCA.plot_uncertainty_eigenvalues.<locals>.<listcomp>rcs g|]}t��j�||f�qSr)rZsqrtr)r1r2)rrrr3js�oZblackZ	lightgray�r)�x�yZyerrZfmtZcolorZecolorZ
elinewidthZcapsizezeigenvalues_uncertainty.png)r5rr6r7Zerrorbarr8r:)r�outfiler;r<r)rr�plot_uncertainty_eigenvaluesds
z PCA.plot_uncertainty_eigenvaluescCs2t��}tj|jdd�t��t�|d�dS)N�Blues)�cmapzcov_matrix_eigenvalues.png)r6r7�imshowr�colorbarr:)rrBr<rrr�plot_cov_eigenvaluesqszPCA.plot_cov_eigenvaluescCs2t��}tj|jdd�t��t�|d�dS)NrD)rEzcov_matrix_eigenvectors.png)r6r7rFrrGr:)rrBr<rrr�plot_cov_eigenvectorswszPCA.plot_cov_eigenvectors)T)N)N)�__name__�
__module__�__qualname__�__doc__rr$r*r,r/r0r=rCrHrIrrrrrs	



r)ZnumpyrZjaxZ
jax.configr�updateZ	jax.numpyrrZmatplotlib.pyplotZpyplotr6rrrrrrrr�<module>s
back to top