Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
import pandas as pd
2
import numpy as np
3
import matplotlib.pyplot as plt
4
%matplotlib inline
5
plt.rcParams['figure.figsize'] = (16, 9)
6
plt.style.use('ggplot')
7
from sklearn.decomposition import PCA
8
from sklearn.preprocessing import StandardScaler
9
10
#cargamos los datos de entrada
11
dataframe = pd.read_csv(r"comprar_alquilar.csv")
12
print(dataframe.tail(10))
13
14
#normalizamos los datos
15
scaler=StandardScaler()
16
df = dataframe.drop(['comprar'], axis=1) # quito la variable dependiente "Y"
17
scaler.fit(df) # calculo la media para poder hacer la transformacion
18
X_scaled=scaler.transform(df)# Ahora si, escalo los datos y los normalizo
19
20
#Instanciamos objeto PCA y aplicamos
21
pca=PCA(n_components=9) # Otra opción es instanciar pca sólo con dimensiones nuevas hasta obtener un mínimo
22
"explicado" ej.: pca=PCA(.85)
23
pca.fit(X_scaled) # obtener los componentes principales
24
X_pca=pca.transform(X_scaled) # convertimos nuestros datos con las nuevas dimensiones de PCA
25
26
print("shape of X_pca", X_pca.shape)
27
expl = pca.explained_variance_ratio_
28
print(expl)
29
print('suma:',sum(expl[0:5]))
30
#Vemos que con 5 componentes tenemos algo mas del 85% de varianza explicada
31
32
#graficamos el acumulado de varianza explicada en las nuevas dimensiones
33
plt.plot(np.cumsum(pca.explained_variance_ratio_))
34
plt.xlabel('number of components')
35
plt.ylabel('cumulative explained variance')
36
plt.show()
37
38
#graficamos en 2 Dimensiones, tomando los 2 primeros componentes principales
39
Xax=X_pca[:,0]
40
Yax=X_pca[:,1]
41
labels=dataframe['comprar'].values
42
cdict={0:'red',1:'green'}
43
labl={0:'Alquilar',1:'Comprar'}
44
marker={0:'*',1:'o'}
45
alpha={0:.3, 1:.5}
46
fig,ax=plt.subplots(figsize=(7,5))
47
fig.patch.set_facecolor('white')
48
for l in np.unique(labels):
49
ix=np.where(labels==l)
50
ax.scatter(Xax[ix],Yax[ix],c=cdict[l],label=labl[l],s=40,marker=marker[l],alpha=alpha[l])
51
52
plt.xlabel("First Principal Component",fontsize=14)
53
plt.ylabel("Second Principal Component",fontsize=14)
54
plt.legend()
55
plt.show(
fit(X [, y]) Calcule la media y el estándar que se utilizará para
escalar más tarde.
Iris-setosa (n = 50)
Iris-versicolor (n = 50)
Iris-virginica (n = 50)