#Importacion de las librerias
import numpy as np
import pandas as pd
from google.colab import drive
import os
drive.mount('/content/gdrive')
# Establecer ruta de acceso en dr
import os
print(os.getcwd())
os.chdir("/content/gdrive/My Drive")
Mounted at /content/gdrive /content
#Importacion del conjunto de datos
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
dataset = pd.read_csv("iris.data", names=names)
#Veamos el dataset
dataset.head()
sepal-length | sepal-width | petal-length | petal-width | Class | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
#Preprocesamiento
X = dataset.drop('Class', 1)
y = dataset['Class']
#Separamos en train y test
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#Normalizamos los datos para que PCA funcione mejor!
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#Aplicacion de PCA
from sklearn.decomposition import PCA
pca = PCA()
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)
#Análisis de la varianza explicada para cada componente
explained_variance = pca.explained_variance_ratio_
explained_variance
array([0.72317687, 0.23215265, 0.03983465, 0.00483583])
Insights:
El primer componente principal es responsable de la varianza del 72,22%. De manera similar, el segundo componente principal causa una variación del 23,9% en el conjunto de datos. En conjunto, podemos decir que (72,22 + 23,9) el 96,21% por ciento de la información de clasificación contenida en el conjunto de características es capturada por los dos primeros componentes principales.
Para finalizar, usemos una sola componente para entrenar un modelo de Random Forest y evaluar qué tan bien funciona!
from sklearn.decomposition import PCA
pca = PCA(n_components=1)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)
from sklearn.ensemble import RandomForestClassifier
# Creación del modelo
model_rf = RandomForestClassifier(max_depth=2, random_state=0)
model_rf.fit(X_train, y_train)
# Predicción
y_pred = model_rf.predict(X_test)
#Evaluación básica del modelo
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print('El accuracy del modelo es:', accuracy)
El accuracy del modelo es: 0.9333333333333333
Insights: Únicamente utilizando una componente tenemos un accuracy muy bueno para nuestro modelo 😉