<jupyter_start><jupyter_text>PCA e Probabilistic PCA (PPCA)  Principal Components Analysis (PCA) Características do PCA- Analisar dados e extrair variáveis com conceitos semelhantes (principal componentes)- Projetar os dados em um espaço dimensional menor- Componentes principais que explicam uma maior quantidade da variância são considerados mais importante Realiza isso por:- Maximizar a variância dos dados projetados $x$- Representar a matriz $x$ em um espaço diferente (q-dimensional) usando um conjunto de vetores ortonormais $W$- A matriz ponderada $W$ é uma matriz $DxQ$ que representa um novo mapeamento dos dados originais $y$ em seu subespaço principal "ideal", representado por $x$- Cada uma das q colunas ortonormais da matriz ponderada $W$, representa uma principal componente- Probabilidade de um ponto em $y$ é a distância entre ele e sua reconstrução, $Wx$ A derivação mais comum do PCA é em termos de uma projeção linear padronizada queimisa a variação no espaço projetado (Hotelling, 1933). Para um conjunto de observações d-dimensionaisvetores de dados $\{t_n\}, n E \{1, ... N\}$, os q principais eixos $w_j, j E \{1,..., q\}$ são aqueles eixos ortonormaisem que a variância retida sob a projeção é máxima. Pode ser mostrado que os vetores$w_j$ são dados pelos q autovetores dominantes (ou seja, aqueles com os maiores autovalores associados $\lambda_j$)da matriz de covariância da amostra $S = ∑_n (t_n - t) (t_n - t)^t/ N$, onde $t$ é a média da amostra de dados, talque $Sw_j = \lambda_j w_j$. Os q componentes principais do vetor observado $t_n$ são dados pelo vetor$x_n = W^t (t_n - t)$, em que $W = (w_1 w_2, ..., w_q)$. As variáveis $x_j$ são então não correlacionadas de tal forma que o matriz de covariância $∑_n x_n x_n^t / N$ é diagonal com elementos $\lambda_j$.  Limitações do PCA- Não paramétrico- Nenhum modelo probabilístico para dados observados- A matriz de variância-covariância precisa ser calculada- Pode ser muito intensivo em computação para grandes conjuntos de dados com um número elevado de dimensões- Não lida adequadamente com dados faltantes- Os dados incompletos devem ser descartados ou imputados- Observações de dados extremos podem afetar indevidamente análise  O conjunto de dados usado é o AR Face Database- 126 pessoas (mais de 4.000 imagens coloridas).- Diferentes expressões faciais, condições de iluminação e oclusões.- Duas sessões por pessoa (2 dias diferentes).Este banco de dados facial foi criado por <NAME> e <NAME> no Centro de Visão Computacional (CVC) da U.A.B. Ele contém mais de 4.000 imagens coloridas correspondentes a 126 rostos de pessoas (70 homens e 56 mulheres). As imagens apresentam faces frontais com diferentes expressões faciais, condições de iluminação e oclusões (óculos de sol e cachecol). As fotos foram tiradas no CVC sob condições rigorosamente controladas. Não foram impostas restrições aos desgastes (roupas, óculos etc.), maquiagem, penteado, etc. Cada pessoa participou de duas sessões, separadas por duas semanas (14 dias). As mesmas fotos foram tiradas em ambas as sessões.link: http://www2.ece.ohio-state.edu/~aleix/ARdatabase.html  Tratamento do datasetCada pessoa faz 2 sessões de foto, com 13 imagens por sessão. As imagens selecionada é a primeira da segunda classe na base de dados Segue a imagen abaixo:   Extração de característicasAs imagen em seguida passa por uma extração utilizando uma rede neural convolucional. A rede utilizada é a DenseNet201, retirada do trabalho de mestrado de <NAME>: 'Lung Nodule Malignancy Classification in Chest Computed Tomography Images Using Transfer Learning And Convolutional Neural Networks' Códigos da CNN DenseNet201:link: https://github.com/RaulMedeiros/Deep_Transfer_Learning_Framework/blob/master/Deep_Transfer_Learning_Framework.ipynb Segue o dataset após a extração de características<jupyter_code>import pandas as pd
from argparse import ArgumentParser
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Path and extractor args
path_args = 'datasets/AR/transfer-learning/csv/train'
extractor = 'DenseNet201'

# Read csv and rename label column
path = path_args + '/' + extractor + '.csv'
dataset = pd.read_csv(path, header=None, index_col=None)
dataset = dataset.rename(columns={dataset.columns[-1]: "labels"})

# Standardize the Data
data_std = StandardScaler().fit_transform(dataset.values[:, :-1])
data_label = dataset.values[:, -1] 
dataset<jupyter_output><empty_output><jupyter_text>Implementação do PCA<jupyter_code>from argparse import ArgumentParser

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA 

# select the number of components such that the amount of variance that needs to be explained
# is greater than the percentage specified by n_components.
pca = PCA(n_components=500)
principalComponent = pca.fit_transform(data_std)
principalDf = pd.DataFrame(data=principalComponent)
finalDf = pd.concat([principalDf, dataset[['labels']]], axis=1)
# Execute the PCA algorithm and store the pandas dataframe in a .csv
# finalDf[dim].to_csv('datasets/pandas/pca/{}-{}.csv'.format(extractor, i), sep='\t')
principalDf<jupyter_output><empty_output><jupyter_text>Probabilistic Principal Component Analysis (PPCA)A Probabilistic Principal Component Analysis (PPCA) é uma técnica de redução de dimensionalidade que analisa dados através de um espaço latente de menor dimensão (Tipping & Bishop, 1999). Geralmente é usado quando há valores ausentes nos dados ou para dimensionamento multidimensional.  Descrição do PPCA- Modelo de variável latente com relação linear (análise fatorial)$y \sim Wx + μ + ε$- Variável latente: $x \sim N(0, I)$- Erro (ou ruido): $ε \sim N(0, ψ)$- Termo de localização (média): $μ$- PCA probabilística: variâncias de ruído restritas a serem iguais $(ψ i =σ^2 )$    - Erro: $ε \sim N(0, σ^2I)$ (modelo de ruído isotrópico)        $y|x \sim N(WX + μ, σ^2 I)$        $y \sim N(μ, C^y ), C y =WW^t + σ^2 I$ (onde $C y$ é a matriz de covariância para os dados observados $y$)  Motivações para criação do PPCA- Aborda as limitações do PCA regular- PCA pode ser usado como um modelo geral de densidade Gaussiana além de reduzir as dimensões- Estimativas de máxima verossimilhança podem ser computadas elementos associados aos componentes principais- Captura correlações dominantes com poucos parâmetros- Vários modelos de PCA podem ser combinados como mistura probabilística- Pode ser usado como base para PCA bayesiano<jupyter_code>def plot_scatter(x, classes, ax=None):
    ax = plt.gca() if ax is None else ax
    cmap = plt_cm.jet
    norm = plt_col.Normalize(vmin=np.min(classes), vmax=np.max(classes))
    mapper = plt_cm.ScalarMappable(cmap=cmap, norm=norm)
    colors = mapper.to_rgba(classes)
    ax.scatter(x[0, :], x[1, :], color=colors, s=20)
def plot_pca_scatter():
    colors = ['black', 'blue', 'purple', 'yellow', 'white', 'red', 'lime', 'cyan', 'orange', 'gray']
    for i in range(len(colors)):
        px = X_pca[:, 0][y_digits == i]
        py = X_pca[:, 1][y_digits == i]
        plt.scatter(px, py, c=colors[i])
    plt.xlabel('First Principal Component')
    plt.ylabel('Second Principal Component')<jupyter_output><empty_output><jupyter_text>Experimentos<jupyter_code>import ppca
import numpy as np
import sklearn.datasets as ds
import os
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.cm as plt_cm
import matplotlib.colors as plt_col

ppca = ppca.PPCA()
ppca.fit(np.transpose(principalDf))
w, mu, sigma, y, p, n = ppca.return_values()
y<jupyter_output><empty_output><jupyter_text>Visualização do PPCA<jupyter_code>plot_scatter(ppca.transform(), data_label)<jupyter_output><empty_output><jupyter_text>Visualização do PCA<jupyter_code>X_pca = pca.fit_transform(data_std)
y_digits = data_label
plot_pca_scatter()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08392585068562722, 'fraction_numerical': 0.008379888268156424, 'mean_word_length': 5.192610062893082, 'pattern_counts': {'":': 0, '<': 28, '<?xml version=': 0, '>': 28, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '527140', 'license': 'MIT', 'n_tokens_mistral': 2748, 'n_tokens_neox': 2623, 'n_words': 961, 'path': 'pca_homework/pca_and_ppca.ipynb', 'repo_name': 'matheustguimaraes/machine-learning-discipline', 'size': '7901'}