Práctico 0: Introducción a Scikit-Learn
Scikit-Learn
(sklearn
para los amigos) es una librería creada por David Cournapeau, como un Google Summer Code Project y luego Matthieu Brucher en su tesis.calidad
si sigue los estándares implementados por Scikit-Learn
.Scikit-Learn
debe poseer 3 años desde su publicación y 200+ citaciones mostrando su utilidad y amplio uso (ver acá).Scikit-Learn
sigue un patrón de Programación Orientada a Objetos (POO)
basado en clases.Scikit-Learn
sigue el siguiente estándar:
CamelCase
: Ej: KMeans
,LogisticRegression
, StandardScaler
.Estimators
.Transformers
.snake_case
y permiten realizar algunas operaciones básicas en el proceso de modelamiento. Ej: train_test_split()
, cross_val_score()
.Matrices
o DataFrames
, mientras que las letras minúsculas denotan Vectores
o Series
.from sklearn.sub_modulo import Estimator
model = Estimator(hp1=v1, hp2=v2,...)
model.fit(X)
y_pred = model.predict(X)
## Opcionalmente se puede entrenar y predecir a la vez.
model.fit_predict(X)
L1. Importar la clase a utilizar.
L2. Instanciar
el modelo y sus hiperparámetros
.
L3. Entrenar
o ajustar el modelo (Requiere sólo de X).
L5. Predecir
. Los modelos de clasificación tienen la capacidad de generar probabilidades.
L7-8. Este tipo de modelos permite entrenar y predecir en un sólo paso.
from sklearn.sub_modulo import Estimator
model = Estimator(hp1=v1, hp2=v2,...)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)
model.score(X_test,y_test)
L1. Importar la clase a utilizar.
L2. Instanciar
el modelo y sus hiperparámetros
.
L3. Entrenar
o ajustar el modelo (Ojo, requiere de X
e y
).
L5–6. Predecir
en datos nuevos. (Algunos modelos pueden predecir probabilidades).
L8. Evaluar
el modelo en los datos nuevos.
.fit()
)Muchos modelos pueden entregar información sólo luego de ser entrenados (su atributo termina con un _
).
Ej: model.coef_
, model.intercept_
.
El modelo es una herramienta a la cual le entregamos datos (Input), y nos devuelve datos (Predicciones).
Estimators
, los Transformers
no son modelos.Transformers
permiten escalar los datos, transformar categorías en números, rellenar valores faltantes. (Veremos más acerca de esto en los Preprocesamiento
).from sklearn.preprocessing import Transformer
tr = Transformer(hp1=v1, hp2=v2,...)
tr.fit(X)
X_new = tr.transform(X)
## Opcionalmente
X_new = tr.fit_transform(X)
L1. Importar la clase a utilizar (en este caso del submodulo preprocessing
, aunque pueden haber otros como impute
).
L2. Instanciar
el Transformer y sus hiperparámetros
.
L3. Entrenar
o ajustar el Transformer.
L5. Transformar
los datos.
L7-8. Adicionalmente se puede entrenar
y transformar
los datos en un sólo paso.
Transformers
o Transformers + un Estimator
.Un Pipeline puede tener sólo un Estimator.
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
pipe = Pipeline(steps=[
("ohe", OneHotEncoder()),
("sc", StandardScaler()),
("model", DecisionTreeClassifier())
])
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)
pipe.score(X_test, y_test)
L1-2. Importo mi modelo y mis preprocesamientos
L3. Importo el Pipeline
.
L5-9. Instancio un Pipeline
.
L11. Entreno el Pipeline
.
L12. Predigo utilizando el Pipeline
entrenado.
L14. Evalúo el modelo en datos no vistos.
Probablemente
Scikit-Learn
tenga una de las mejores documentaciones existentes.