<jupyter_start><jupyter_text>Análisis de componentes principales (PCA)PCA es usado para reducir el número de variables de un problema, es decir, reducir la dimensionalidad, esto se hace construyendo una  matriz de covarianzaPara construir esta matriz primero se estandarizan los datos (si es necesario), y luego la matriz resultante, por ejemplo $ Z $se multiplica por su transpuesta $ covmatrix = ZZ^T$Esta matriz de covarianza la podemos representar con eigenvalores y eigenvectores, luego se realizan otras operaciones para tener la matriz final Las ventajas que tenemos son:* Reducimos la complejidad* Evitamos el sobreentrenamiento * Nos menciona que tan relacionada esta una variable con otra  Se realizará una prueba para ver como funciona<jupyter_code>from sklearn.datasets import load_wine, load_iris, make_blobs
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
from sklearn.decomposition import PCA<jupyter_output><empty_output><jupyter_text>Creamos un dataset de juguete pa probar<jupyter_code>x, y = make_blobs(centers=10, n_samples=5000, n_features=100)<jupyter_output><empty_output><jupyter_text>Con el variance ratio nos dice cuanta información tiene cada componente principal, entonces podemos sumar estos hasta  llegar a un porcentaje aceptable de información<jupyter_code>pca = PCA()
x_pca = pca.fit_transform(x)
x_pca.shape
variance = pca.explained_variance_ratio_
cumulative_ratio = [variance[0]]
for i in range(1, len(variance)):
    cumulative_ratio.append(cumulative_ratio[i-1] + variance[i])

print("Suma de las PCA para saber cuanta información tienen: \n", cumulative_ratio[:10])<jupyter_output>Suma de las PCA para saber cuanta información tienen: 
 [0.1492709362041403, 0.2894195602171052, 0.42558584702004393, 0.5534855396543777, 0.6562553509218308, 0.7503565414119009, 0.8343524535995124, 0.9142489952612682, 0.9714806496261547, 0.9718790440753258]<jupyter_text>Con estos resultados vemos que con 10 componentes principales ya representamos el 97% de la información, no necesitamos más   Creamos una máquina de vectores de soporte y la entrenamos con todos las dimensiones pa ver como se comporta<jupyter_code>from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state = 42)
from sklearn.svm import SVC

clf = SVC(gamma='auto')
clf.fit(X_train, y_train)
from sklearn.metrics import accuracy_score 
y_train_pred = clf.predict(X_train)
y_test_pred = clf.predict(X_test)
print("Acc train:", accuracy_score(y_train, y_train_pred))
print("Acc test:",  accuracy_score(y_test, y_test_pred))<jupyter_output>Acc train: 1.0
Acc test: 1.0<jupyter_text>Ahora lo entrenamos con  PCA  a ver como le va<jupyter_code>pca = PCA(n_components=1)

pca.fit(x)
X_pca= pca.transform(x)
X_train_pca, X_test_pca, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state = 42)
clf = SVC(gamma='auto')
clf.fit(X_train_pca, y_train)
y_train_pred_pca = clf.predict(X_train_pca)
y_test_pred_pca = clf.predict(X_test_pca)
print("Acc train:", accuracy_score(y_train, y_train_pred_pca))
print("Acc test:",  accuracy_score(y_test, y_test_pred_pca))<jupyter_output>Acc train: 0.8525714285714285
Acc test: 0.8593333333333333
{'fraction_non_alphanumeric': 0.0781587890021625, 'fraction_numerical': 0.0729070126660488, 'mean_word_length': 7.095, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '475247', 'license': 'Apache-2.0', 'n_tokens_mistral': 1337, 'n_tokens_neox': 1182, 'n_words': 323, 'path': 'paralelismo/k_means/introductionPCA.ipynb', 'repo_name': 'davidcediel12/Cliente-Servidor', 'size': '3237'}