Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
from sklearn import datasets | |
from sklearn.model_selection import train_test_split | |
from sklearn.svm import SVR | |
from sklearn.decomposition import PCA as PCA_sk | |
import matplotlib.pyplot as plt | |
class PCA_st: | |
def __init__(self, database, test_size=0.2): | |
self.database = database | |
self.test_size = test_size | |
self.desc = r''' | |
# **PCA (Principal Component Analysis)** | |
El objetivo principal con este m茅todo es definir una nueva dimensi贸n para el set de datos (siendo estas nuevas dimensiones ortogonales y por tanto independientes). | |
**Varianza** | |
$$ | |
var(X) = \frac{1}{n} \sum (X_{i} - \bar{X})^2 | |
$$ | |
**Matriz de Covarianzas** | |
$$ | |
Cov(X, Y) = \frac{1}{n} \sum (X_{i} - \bar{X})(Y_{i} - \bar{Y})^T | |
$$ | |
$$ | |
Cov(X, X) = \frac{1}{n} \sum (X_{i} - \bar{X})(X_{i} - \bar{X})^T | |
$$ | |
**Valores y Vectores Propios** | |
Los vectores propios apuntan en la direcci贸n donde se genera la m谩xima varianza y el correspondiente valor propio indica el grado de importancia del vector. | |
$$ | |
A \vec{v} = 位 \vec{v} | |
$$ | |
**Metodo** | |
- Sustraer al vector X su media. | |
- Calcular la Cov(X, X) | |
- Calcular los vectores y valores propios de las matrices de covarianza | |
- Ordenar los vectores propios seg煤n su importancia (en base a su valor propio) en orden decreciente | |
- Escoger los primeros k vectores propios y estos pasaran a ser las nuevas k dimensiones | |
- Por 煤ltimo, transformar (proyectar) los datos en las nuevas dimensiones (esto se hace con un producto punto)''' | |
self.x_feature = 1 | |
self.y_feature = 2 | |
self.n_components = 2 | |
def params(self): | |
n_features = int(self.database.data.shape[1]) | |
self.n_components = st.slider('Numero de componentes', 1, n_features, 2) | |
def solve(self): | |
self.x_feature = st.slider('Componente eje x', 1, self.n_components, 1) | |
self.y_feature = st.slider('Componente eje y', 1, self.n_components, 2) | |
X = self.database.data | |
y = self.database.target | |
sklearn_clus = PCA_sk(n_components=self.n_components) | |
sklearn_clus.fit(X) | |
X_proyected_sk = sklearn_clus.transform(X) | |
x1 = X_proyected_sk[:, self.x_feature-1] | |
x2 = X_proyected_sk[:, self.y_feature-1] | |
plt.figure(1, figsize=(12, 8)) | |
plt.scatter(x1, x2, c=y, edgecolors='none', alpha=0.8, cmap=plt.cm.get_cmap('viridis', len(y))) | |
plt.xlabel(f'Componente {self.x_feature}') | |
plt.ylabel(f'Componente {self.y_feature}') | |
plt.colorbar() | |
#fig = plt.show().get_fig() | |
return plt.gcf() | |