El análisis de componentes principales (PCA) es una técnica de reducción de dimensionalidad lineal que se puede utilizar para extraer información de un espacio de alta dimensión proyectándola en un subespacio de menor dimensión. Intenta preservar las partes esenciales que tienen más variación de los datos y eliminar las partes no esenciales con menos variación.
Las dimensiones no son más que características que representan los datos. Por ejemplo, una imagen de 28 X 28 tiene 784 elementos de imagen (píxeles) que son las dimensiones o características que en conjunto representan esa imagen.
Una cosa importante a tener en cuenta sobre PCA es que es una técnica de reducción de dimensionalidad no supervisada , puede agrupar puntos de datos similares en función de la correlación de características entre ellos sin ninguna supervisión (o etiquetas).
Según Wikipedia , PCA es un procedimiento estadístico que utiliza una transformación ortogonal para convertir un conjunto de observaciones de variables posiblemente correlacionadas (entidades, cada una de las cuales toma varios valores numéricos) en un conjunto de valores de variables linealmente no correlacionadas llamadas componentes principales.
Nota : Las características, dimensiones y variables se refieren todas a lo mismo. Encontrará que se usan indistintamente.
Por lo tanto, PCA puede hacerlo por usted, ya que proyecta los datos en una dimensión inferior, lo que le permite visualizar los datos en un espacio 2D o 3D a simple vista.
A un nivel abstracto, se toma un conjunto de datos que tiene muchas características y se simplifica ese conjunto de datos seleccionando algunas Principal Componentsde las características originales.
Los componentes principales son la clave del PCA; representan lo que hay debajo del capó de sus datos. En términos sencillos, cuando los datos se proyectan a una dimensión inferior (supongamos tres dimensiones) desde un espacio superior, las tres dimensiones no son más que los tres componentes principales que capturan (o retienen) la mayor parte de la varianza (información) de sus datos. .
Los componentes principales tienen dirección y magnitud. La dirección representa a través de qué ejes principales los datos se distribuyen principalmente o tienen mayor variación y la magnitud significa la cantidad de variación que el componente principal captura de los datos cuando se proyecta sobre ese eje. Los componentes principales son una línea recta y el primer componente principal tiene la mayor variación en los datos. Cada componente principal posterior es ortogonal al último y tiene una varianza menor. De esta manera, dado un conjunto de x variables correlacionadas sobre y muestras, se logra un conjunto de u componentes principales no correlacionados sobre las mismas y muestras.
La razón por la que se obtienen componentes principales no correlacionados a partir de las funciones originales es que las funciones correlacionadas contribuyen al mismo componente principal, reduciendo así las funciones de datos originales a componentes principales no correlacionados; cada uno representa un conjunto diferente de características correlacionadas con diferentes cantidades de variación.
Cada componente principal representa un porcentaje de la variación total capturada de los datos.
from sklearn.datasets import load_breast_cancer
import numpy as np
breast = load_breast_cancer()
breast
breast_data = breast.data
breast_data.shape
breast_labels = breast.target
breast_labels.shape
breast_data
labels = np.reshape(breast_labels,(569,1))
breast_labels
final_breast_data = np.concatenate([breast_data,labels],axis=1)
final_breast_data
import pandas as pd
breast_dataset = pd.DataFrame(final_breast_data)
features = breast.feature_names
features
features_labels = np.append(features,'label')
breast_dataset.columns = features_labels
breast_dataset.head()
breast_dataset['label'].replace(0, 'Benign',inplace=True)
breast_dataset['label'].replace(1, 'Malignant',inplace=True)
breast_dataset.tail()
Se comienza por Standardizinglos datos, ya que la salida de PCA se ve influenciada en función de la escala de las características de los datos.
Es una práctica común normalizar sus datos antes de enviarlos a cualquier algoritmo de aprendizaje automático.
Para aplicar la normalización, importará StandardScalerel módulo de la biblioteca sklearn y seleccionará solo las funciones que breast_datasetcreó en el paso de Exploración de datos. Una vez que tenga las funciones, aplicará la escala basándose fit_transformen los datos de las funciones.
Al aplicar StandardScaler, cada característica de sus datos debe distribuirse normalmente de modo que escale la distribución a una media de cero y una desviación estándar de uno.
from sklearn.preprocessing import StandardScaler
x = breast_dataset.loc[:, features].values
x = StandardScaler().fit_transform(x) # normalizing the features
x
x.shape
np.mean(x),np.std(x)
feat_cols = ['feature'+str(i) for i in range(x.shape[1])]
feat_cols
normalised_breast = pd.DataFrame(x,columns=feat_cols)
normalised_breast.tail()
Ahora viene la parte crítica: las próximas líneas de código proyectarán los datos de treinta dimensiones del cáncer de mama a dos dimensiones principal components.
Utilizará la biblioteca sklearn para importar el PCAmódulo y, en el método PCA, pasará la cantidad de componentes (n_components=2) y finalmente llamará a fit_transform en los datos agregados. Aquí, varios componentes representan la dimensión inferior en la que proyectará los datos de su dimensión superior.
from sklearn.decomposition import PCA
pca_breast = PCA(n_components=3)
principalComponents_breast = pca_breast.fit_transform(x)
principal_breast_Df = pd.DataFrame(data = principalComponents_breast
, columns = ['principal component 1', 'principal component 2', 'principal component 3'])
principal_breast_Df.tail()
Una vez que tenga los componentes principales, podrá encontrar el archivo explained_variance_ratio. Le proporcionará la cantidad de información o variación que contiene cada componente principal después de proyectar los datos a un subespacio de menor dimensión.
print('Explained variation per principal component: {}'.format(pca_breast.explained_variance_ratio_))
Del resultado anterior, se puede observar que principal component 1contiene el 44,2% de la información, mientras que principal component 2solo contiene el 19% de la información. Además, el otro punto a tener en cuenta es que al proyectar datos de treinta dimensiones a datos de dos dimensiones, se perdió el 36,8% de la información.
Tracemos la visualización de las 569 muestras a lo largo del eje principal component - 1y principal component - 2. Debería brindarle una buena idea de cómo se distribuyen sus muestras entre las dos clases.
import matplotlib.pyplot as plt
plt.figure()
plt.figure(figsize=(5,5))
plt.xticks(fontsize=12)
plt.yticks(fontsize=14)
plt.xlabel('Principal Component - 1',fontsize=20)
plt.ylabel('Principal Component - 2',fontsize=20)
plt.title("Principal Component Analysis of Breast Cancer Dataset",fontsize=20)
targets = ['Benign', 'Malignant']
colors = ['r', 'g']
for target, color in zip(targets,colors):
indicesToKeep = breast_dataset['label'] == target
plt.scatter(principal_breast_Df.loc[indicesToKeep, 'principal component 1']
, principal_breast_Df.loc[indicesToKeep, 'principal component 3'], c = color, s = 50)
plt.legend(targets,prop={'size': 15})