0% encontró este documento útil (0 votos)
9 vistas14 páginas

PCA en Minería de Datos: Guía Práctica

El documento presenta un análisis de componentes principales (PCA) aplicado a un dataset sobre la expresión de proteínas en ratones, con el objetivo de reducir la dimensionalidad de los datos sin perder información relevante. Se detalla el proceso de carga de datos, exploración y limpieza, así como la estandarización necesaria antes de aplicar PCA. Finalmente, se discuten los resultados y la importancia de esta técnica en el análisis de datos complejos.

Cargado por

David Cajas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas14 páginas

PCA en Minería de Datos: Guía Práctica

El documento presenta un análisis de componentes principales (PCA) aplicado a un dataset sobre la expresión de proteínas en ratones, con el objetivo de reducir la dimensionalidad de los datos sin perder información relevante. Se detalla el proceso de carga de datos, exploración y limpieza, así como la estandarización necesaria antes de aplicar PCA. Finalmente, se discuten los resultados y la importancia de esta técnica en el análisis de datos complejos.

Cargado por

David Cajas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Minería de Datos TDFI105

Sesión 07
Análisis de Componentes Principales, PCA

Javier Palma Espinosa, Ph.D.(c)


[Link]@[Link]
Semestre de Primavera 2023
Índice

1 Introducción 3
1.1 Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Carga de los datos y EDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 PCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Referencias 14

Javier Palma Espinosa, Ph.D.(c) 2 of 14


1. Introducción

En clases se vió la utilidad que tiene el implementar técnicas de reducción de dimensión para visualizar
y manejar grandes volúmenes de datos. Este apunte (y el cuaderno jupyter asociado) muestra cómo se
puede utilizar la técnica de Análisis de Componentes Principales (PCA) para disminuir la cantidad de
características, sin perder una parte importante de la estructura de los datos.

1.1. Dataset

Para ejemplificar la utilización de PCA, se utilizará el dataset “Expresión de Proteínas en Rato-


nes”(Fujiwara, Kwon, y Ma 2019). El Síndrome de Down (SD) es una de las mayores causas de déficits
de memoria y aprendizage a nivel genético. A pesar de ello, aún no hay terapias farmacológicas
que puedan ser utilizadas para mejorar el aprendizaje en personas que presentan esta condición
(Higuera, Gardiner, y Cios 2015). Por ello, se hace necesario explorar diferentes terapias que puedan
mejorar la memoria y aprendizaje en personas con SD. Este dataset es el resumen de un experimento
farmacológico utilizando Memantina, un fármaco que se utiliza como tratamiento para la pérdida
de memoria en Alzheimer(Rogawski y Wenk 2003). El dataset cuenta con 82 características y 1080
observaciones. Dentro de estas características se midió la expresión de proteínas en ratones control
y ratones tipo SD. El objetivo de este estudio es el predecir qué proteínas podrían discriminar los
diferentes grupos de ratones experimentales y qué interacción puede haber entre el tratamiento
farmacológico y las proteínas estudiadas. Para mayor información, puede leer el paper que originó
estos datos:
Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to
Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126. [Link]
1/[Link].0129126

1.2. Carga de los datos y EDA

#Primero, se importan las librerías que se utilizarán


import numpy as np
import pandas as pd
import [Link] as plt

#cargar los datos


dataset = pd.read_excel('./Data_Cortex_Nuclear.xls')

Javier Palma Espinosa, Ph.D.(c) 3 of 14


# Visualizar una muestra de los datos.
# Permite tener una idea muy general de la estructura
# con la que se trabajará
[Link][:,:5].sample(5)

MouseID DYRK1A_N ITSN1_N BDNF_N NR1_N

888 3498_4 0.878349 1.03681 0.289645 2.06469


389 3497_15 0.437189 0.569368 0.290585 2.19774
10 309_11 0.366511 0.513278 0.327792 2.07257
1027 3517_8 0.329361 0.503216 0.326145 2.48789
894 3498_10 0.743142 0.839056 0.245156 1.83848

Debido a que los atributos son muchos (~80), es más fácil graficar la cantidad de valores nulos que
existen en cada atributo.

# Buscar valores faltantes


[Link]([i for i in range(len([Link]))],[Link]().sum());
[Link]()

Javier Palma Espinosa, Ph.D.(c) 4 of 14


250

200

150

100

50

0
0 10 20 30 40 50 60 70 80

Con la información anterior, se observa que hay un par de atributos que tienen muchísimos datos
faltantes. Dichos atributos serán eliminados, y se observará nuevamente los datos faltantes.

remove_list = [Link]().sum()[[Link]().sum()>20]
[Link](dataset[remove_list.keys()],axis = 1, inplace=True)
#Se elimina también el ID, pues no es relevante
[Link]('MouseID',axis = 1, inplace=True)
[Link]([i for i in range(len([Link]))],[Link]().sum());
[Link]()

Javier Palma Espinosa, Ph.D.(c) 5 of 14


17.5

15.0

12.5

10.0

7.5

5.0

2.5

0.0
0 10 20 30 40 50 60 70

Si se observa, la cantidad de datos faltantes es aproximadamente un 16 % del total, por lo tanto, serán
reemplazados por cero.

#Imputar datos
[Link](0, inplace=True)

Debido a que hay variables numéricas y categóricas, se creará un subconjunto de datos, donde sólo se
considerarán los atributos de tipo numéricos

numeric = list((k) for k, v in [Link]() if v =='float64')

1.2.1. Gráficos

nrows = 3
ncols = 3
xpos = [(i+1) for i in range(8)]

Javier Palma Espinosa, Ph.D.(c) 6 of 14


fig,ax = [Link](nrows,ncols, figsize=(15,12))
for k in range(nrows*ncols-1):
init = 8*k
end = init+8
[Link][:,init:end].boxplot(ax=ax[k//3,k %3])
ax[k//3,k %3].set_xticks(xpos)
ax[k//3,k %3].set_xticklabels(labels=numeric[init:end],rotation=45)
[Link][:,64:].boxplot(ax=ax[2,2])
ax[2,2].set_xticks(xpos[:-1])
ax[2,2].set_xticklabels(labels=numeric[64:],rotation=45)
[Link]()

8 6 3.0
5 2.5
6
4 2.0
4 3 1.5
2 1.0
2
1 0.5
0 0 0.0
_N
1_N

pB N

_N
_N

T_N

N
ITS _N

F_N

pN N
_N

CA N
BD N

_N

_N

pE N

_N

II_N
_N
_N

pR N
_

K_

K_
_
_

B_

A_

B_

_
NF

KT

LK
RK

EK
R1
A

AF
N1

2A

KII

SK

EB
CA

AB

AK
RA

MK
NR

pJN

EL
K1

RE

R2

R2
pA

BR
AM

pM
NR

CR
PK
pE

3.5
KC
R

pC

pN

pN
DY

pP
pC

5 1.75
3.0
4 1.50
2.5
1.25
3 2.0
1.00
0.75 1.5
2
0.50 1.0
1 0.5
0.25
0 0.00 0.0
N

_N

P_N

pP _N

P7 N
_N

NR N
N

MT N
_N

pM N
DS _N
AM _N

pN _N

NU _N

pG _N

pP _N

_N
TIA _N

CD N
_N
K_

K_

B_

_
A_
B_

K_

8_

G_
JNK

M1

MB
KA

D1
OR

R
1

2B

S6

6
3B

K5
R
nin
AP

P3

CR

0S
ER

ME

RS

PK

UM
K3

TO

TO

KC

3.0
70
TR

SK
SO
ate
GS

2.5
RA
Bc

2.0
2.5
2.0
2.0 1.5
1.5
1.5
1.0 1.0
1.0
0.5 0.5
0.5
0.0
0.0 0.0
_N
N

nN N

N
Ac B1_N

_N
AD N

_N

5_N

PS _N
5_N

N
6_N

P_N
Glu N

_N

SH 6_N

_N
_N
_N

_N
RR 9_N

X_

4_

B_
_

C_

H_
_
P1

Tau
S6

OS

P9
AP

CA

NA
R3
R4

itin

SY
BB

52

D9

pS
r21
AR
K

BA

IL1
GF

AS
AR

lH3

Glu

SN

Ca
iqu
P3
ER

_Ty
pC
ety

Ub

3B
SK
pG

Como se puede observar, la variabilidad de los datos es muy grande. Para poder aplicar PCA deben
estandarizarse los datos.

Javier Palma Espinosa, Ph.D.(c) 7 of 14


from [Link] import StandardScaler
scaler = StandardScaler()
df = [Link](scaler.fit_transform(dataset[numeric]), columns=numeric)

nrows = 3
ncols = 3
xpos = [(i+1) for i in range(8)]
fig,ax = [Link](nrows,ncols, figsize=(15,12))
for k in range(nrows*ncols-1):
init = 8*k
end = init+8
[Link][:,init:end].boxplot(ax=ax[k//3,k %3])
ax[k//3,k %3].set_xticks(xpos)
ax[k//3,k %3].set_xticklabels(labels=numeric[init:end],rotation=45)
[Link][:,64:].boxplot(ax=ax[2,2])
ax[2,2].set_xticks(xpos[:-1])
ax[2,2].set_xticklabels(labels=numeric[64:],rotation=45)
[Link]()

Javier Palma Espinosa, Ph.D.(c) 8 of 14


8 10.0 8
6 7.5 6
4 5.0 4
2 2.5 2
0 0
0.0
2 2
2.5
4 4
5.0
6 6
_N
1_N

pB N

_N
_N

pN N
_N

T_N

N
ITS _N

F_N

CA N
BD N

_N

_N

pE N

_N

II_N
_N
_N

pR N
_

K_

K_
_
_

B_

A_

B_

_
NF

KT

LK
RK

EK
R1
A

AF
N1

2A

KII

SK

EB
CA

AB

AK
RA

MK
NR

pJN

EL
K1

RE

R2

R2
15.0
pA

BR
AM

pM
NR

CR
PK
pE

KC
6
R

pC

pN

pN
DY

pP
pC

4 12.5
4
10.0
2 2 7.5
0 0 5.0
2 2.5
2
0.0
4 4 2.5
6 6 5.0
N

_N

P_N

pP _N

P7 N
_N

NR N
N

MT N
_N

pM N
DS _N
AM _N

pN _N

NU _N

pG _N

pP _N

_N
TIA _N

CD N
_N
K_

K_

B_

_
A_
B_

K_

8_

G_
JNK

M1

MB
KA

D1
OR

R
1

2B

S6

6
3B

K5
R
nin
AP

P3

CR

0S
ER

ME

RS

PK

UM
K3

TO

TO

KC
15

70
TR

SK
SO
ate
GS

P
15.0

RA
Bc

4
10 12.5
10.0
2
5 7.5
5.0 0
0 2.5
0.0 2
5 2.5
5.0 4
_N
N

nN N
Ac B1_N

_N

N
AD N

_N

5_N

PS _N
5_N

_N

N
6_N

P_N
Glu N

SH 6_N

_N
_N
_N

_N
RR 9_N

X_

4_

B_
_

C_

H_
_
P1

Tau
S6

OS

P9
AP

CA

NA
R3
R4

itin

SY
BB

52

D9

pS
r21
AR
K

BA

IL1
GF

AS
AR

lH3

Glu

SN

Ca
iqu
P3
ER

_Ty
pC
ety

Ub

3B
SK
pG

Se observa que ahora los datos tienen, en general, media cero. Es posible usar PCA y disminuir la
cantidad de dimensiones.

1.3. PCA

La utilización de PCA en python es increíblemente simple1 . Sólo es necesario importar un paquete y


en una línea puede realizarse la proyección de los datos. Sin embargo, para ejemplificar y seleccionar
la cantidad de componentes (PC) a utilizar, se mostrará el “método del codo”

from [Link] import PCA


# se usarán desde 1 hasta la cantidad de atributos
# como componentes principales.
# Se calculará la varianza explicada por cada PC

1
Vea la documentación disponible en [Link]
analysis-pca

Javier Palma Espinosa, Ph.D.(c) 9 of 14


# y finalmente se sumará la varianza total
# explicada por todas las PC

total_explained_variance = [Link](len(numeric)-1)
for i in range(1,len(numeric)):
pca = PCA(n_components=i);
[Link]([Link](df));
total_explained_variance[i-1] =
,→ [Link](pca.explained_variance_ratio_)[-1];

1.3.1. Elbow Method

Para poder seleccionar la cantidad de componentes óptimas para reducir los datos, se usarán como
criterios:

Que las componentes principales puedan explicar 80 % de la varianza de los datos


Que la diferencia entre las componentes sea menor al 2 %

fig, axs = [Link](nrows=1,ncols=2)

axs[0].plot(total_explained_variance, lw=3,zorder=2)
axs[0].set_xlabel('# of PC')
axs[0].set_ylabel('Cum sum')
axs[0].axhline(0.8,ls='--', lw=1, color='grey',zorder=-1)
axs[0].axvline(7.9, ls='--',lw=1, color='grey',zorder=-1)
axs[0].set_ylim(0.25,1.05);
axs[0].plot(7.8,.801,'k.', ms=12)

axs[1].plot([Link](total_explained_variance), color='C3',lw=3)
axs[1].set_xlabel('# of PC')
axs[1].set_ylabel('Difference')
axs[1].axhline(0.02,ls='--', lw=1, color='grey',zorder=-1)
axs[1].axvline(7.9, ls='--',lw=1, color='grey',zorder=-1)

[Link]()

Javier Palma Espinosa, Ph.D.(c) 10 of 14


0.16
1.0
0.14
0.9
0.12
0.8
0.10
0.7

Difference
Cum sum

0.08
0.6
0.06
0.5
0.04
0.4 0.02
0.3 0.00
0 20 40 60 0 20 40 60
# of PC # of PC

1.3.2. Proyectar los datos

pca = PCA(n_components=4)
x_transformed = pca.fit_transform(df)

fig,ax = [Link](ncols=4,nrows=4, figsize=(12,12))


for i in range(4):
for j in range(4):
ax[i][j].plot(x_transformed[:,i],x_transformed[:,j],
'ko', alpha=0.1)
ax[3][j].set_xlabel('PC %d' %(j+1), fontsize=15, weight='bold')
ax[i][0].set_ylabel('PC %d' %(i+1), fontsize=15, weight='bold')

Javier Palma Espinosa, Ph.D.(c) 11 of 14


15 7.5
30 10
10 5.0
20 5
5 2.5
10
PC1

0 0.0
0 0
5 2.5
10 5 5.0
10
0 20 0 20 0 20 0 20
15 7.5
30 10
10 5.0
20 5
5 2.5
10
PC2

0 0.0
0 0
5 2.5
10 5 5.0
10
0 10 0 10 0 10 0 10
15 7.5
30 10
10 5.0
20 5
5 2.5
10
PC3

0 0.0
0 0
5 2.5
10 5 5.0
10
10 0 10 10 0 10 10 0 10 10 0 10
15 7.5
30 10
10 5.0
20 5
5 2.5
10
PC4

0 0.0
0 0
5 2.5
10 5 5.0
10
5 0 5 5 0 5 5 0 5 5 0 5
PC1 PC2 PC3 PC4

Resumen

Se observa que para este conjunto de datos, fue posible reducir la dimensión de 72 atributos a
8. Esto permite trabajar de forma mucho más cómoda y acelerar los modelos y los procesos de
análisis.

Javier Palma Espinosa, Ph.D.(c) 12 of 14


Ejercicios Propuestos

1. Realice PCA utilizando el dataset Iris. Recuerde documentar su trabajo.


2. En clase se mencionó que la matemática detrás de PCA está en calcular los autovalores
y autovectores. Esto es simple cuando se cuenta con una matriz cuadrada A, pues los
autovalores y autovectores se calculan a través de

(A − λI)x = 0

donde λ corresponde a los valores propios y x a los vectores propios que deben calcular-
se. Sin embargo, cuando no hay matrices cuadradas, como ocurre en este ejemplo, esta
ecuación no es válida. Investigue sobre el singular value decomposition. ¿Qué significa
que M = U ΣV ∗ ?

Javier Palma Espinosa, Ph.D.(c) 13 of 14


Referencias

Fujiwara, Takanori, Oh-Hyun Kwon, y Kwan-Liu Ma. 2019. «Supporting analysis of dimensionality re-
duction results with contrastive learning». IEEE transactions on visualization and computer graphics
26 (1): 45-55.

Higuera, Clara, Katheleen J Gardiner, y Krzysztof J Cios. 2015. «Self-organizing feature maps identify
proteins critical to learning in a mouse model of down syndrome». PloS one 10 (6): e0129126.

Rogawski, Michael A, y Gary L Wenk. 2003. «The neuropharmacological basis for the use of memantine
in the treatment of Alzheimer’s disease». CNS drug reviews 9 (3): 275-308.

Javier Palma Espinosa, Ph.D.(c) 14 of 14

También podría gustarte