Aprender los conceptos clave

1

Todo lo que aprender谩s sobre MA con Scikit-Learn

2

驴C贸mo aprenden las m谩quinas?

3

Problemas que podemos resolver con Scikit-learn

4

Las matem谩ticas que vamos a necesitar

Iniciar un proyecto con sklearn

5

Configuraci贸n de nuestro entorno Python

6

Instalaci贸n de librer铆as en Python

7

Datasets que usaremos en el curso

Optimizaci贸n de features

8

驴C贸mo afectan nuestros features a los modelos de Machine Learning?

9

Introducci贸n al PCA

10

Preparaci贸n de datos para PCA e IPCA

11

Implementaci贸n del algoritmo PCA e IPCA

12

Kernels y KPCA

13

驴Qu茅 es la regularizaci贸n y c贸mo aplicarla?

14

Implementaci贸n de Lasso y Ridge

15

Explicaci贸n resultado de la implementaci贸n

16

ElasticNet: Una t茅cnica intermedia

Regresiones robustas

17

El problema de los valores at铆picos

18

Regresiones Robustas en Scikit-learn

19

Preparaci贸n de datos para la regresi贸n robusta

20

Implementaci贸n regresi贸n robusta

M茅todos de ensamble aplicados a clasificaci贸n

21

驴Qu茅 son los m茅todos de ensamble?

22

Preparaci贸n de datos para implementar m茅todos de ensamble

23

Implementaci贸n de Bagging

24

Implementaci贸n de Boosting

Clustering

25

Estrategias de Clustering

26

Implementaci贸n de Batch K-Means

27

Implementacti贸n de Mean-Shift

Optimizaci贸n param茅trica

28

Validaci贸n de nuestro modelo usando Cross Validation

29

Implementaci贸n de K-Folds Cross Validation

30

Optimizaci贸n param茅trica

31

Implementaci贸n de Randomized

32

Bonus: Auto Machine Learning

Salida a producci贸n

33

Revisi贸n de nuestra arquitectura de c贸digo

34

Importar y exportar modelos con Sklearn

35

Creaci贸n de una API con Flask para el modelo

36

Cierre del curso

37

Material adicional para consultar

ElasticNet: Una t茅cnica intermedia

16/37

Lectura

ElasticNet: Una t茅cnica intermedia:

Hasta el momento hemos podido ver dos t茅cnicas de regularizaci贸n en las cuales a帽adimos un componente de penalizaci贸n en el proceso donde encontramos los valores de los par谩metros 饾浗 minimizando la funci贸n de error.

Por ejemplo, si usamos el m茅todo de M铆nimos Cuadrados Ordinarios, tenemos por definici贸n nuestra funci贸n definida como:

Ahora bien. Si aplicamos la regularizaci贸n L1 tambi茅n conocida como Lasso (Least Absolute Shrinkage and Selection Operator), tenemos una ecuaci贸n de la forma:

donde tenemos un par谩metro de ajuste llamado 茮 que si tiene valores altos para el problema mandar谩 el valor de 饾浗j a 0.

Por otro lado. Si aplicamos la regularizaci贸n L2 tambi茅n conocida como Ridge, tendremos la siguiente ecuaci贸n:

Tendremos una penalizaci贸n tambi茅n pero que no tiene la posibilidad de llevar los valores de los coeficientes a cero. Sin embargo esto nos permitir谩 realizar el intercambio de +sesgo por -varianza.

Recordando que :

  1. Ninguna de las dos es mejor que la otra para todos los casos.

  2. Lasso env铆a algunos coeficientes a cero permitiendo as铆 seleccionar variables significativas para el modelo.

  3. Lasso funciona mejor si tenemos pocos predictores que influyen sobre el modelo.

  4. Ridge funciona mejor si es el caso contrario y tenemos una gran cantidad.

Para aplicarlos y decidir cu谩l es el mejor en la pr谩ctica, podemos probar usando alguna t茅cnica como cross-validation iterativamente. o bien, podemos combinarlos鈥

Regularizaci贸n ElasticNet

Es com煤n encontrarnos en la literatura con un camino intermedio llamado ElasticNet. Esta t茅cnica consiste en combinar las dos penalizaciones anteriores en una sola funci贸n. As铆, nuestra ecuaci贸n de optimizaci贸n quedar谩:

Donde tenemos ahora un par谩metro adicional 饾泜 que tiene un rango de valores entre 0 y 1. Si 饾泜 = 0 , ElasticNet se comportar谩 como Ridge, y si 饾泜 = 1 , se comportar谩 como Lasso. Por lo tanto, nos brinda todo el espectro lineal de posibles combinaciones entre estos dos extremos.

  1. Tenemos una forma de probar ambas L1 y L2 al tiempo sin perder informaci贸n.

  2. Supera las limitaciones individuales de ellas.

  3. Si hace falta experiencia, o el conocimiento matem谩tico de fondo, puede ser la opci贸n preferente para probar la regularizaci贸n.

ElasticNet con Scikit-learn

Para implementar esta t茅cnica a帽adimos primero el algoritmo ubicado en el m贸dulo linear_model.

from sklearn.linear_model import ElasticNet

Y luego simplemente lo inicializamos con el constructor ElasticNet() y entrenamos con la funci贸n fit().

regr = ElasticNet(random_state=0)

regr.fit(X, y)

Aportes 4

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Al comparar con distintos valores de alpha, al parecer lo que nos indica es que es mejor idea usar Ridge que lasso.

   # elasticnet model
    
    def modelElastic(alpha=1):
        modelElastic= ElasticNet(random_state=0, alpha=alpha)
        modelElastic.fit(X_train, y_train)
        y_predic_elastic=modelElastic.predict(X_test)
        # loss function
        elastic_loss = mean_squared_error(y_test, y_predic_elastic)
        return elastic_loss

    alphas = np.arange(0,1,0.01)
    loss_total = []
    for i in alphas:
        res = modelElastic(i)
        loss_total.append(res)

    loss_total = np.array(loss_total)
    plt.plot(alphas, loss_total)
    plt.xlabel('alphas')
    plt.ylabel('Loss Elastic')
    plt.text(0.02, 0.8, 'loss min:{}'.format(np.min(loss_total)), fontsize=7)
    plt.show()

Al agregar este algoritmo de regularizaci贸n al ejercicio anterior, vemos que tiene da por resultados que los otros dos y que lo que hizo fue lleva todos los coeficientes a cero.

Linear Loss:  9.11362706964361e-08
Lasso Loss:  0.04613142141272012
Ridge Loss:  0.005158990858509752
ElasticNet Loss:  1.1991244060565747
================================

Coef Linear:  [[1.00012822 0.99987164 0.9999141  1.00013558 0.9996458  1.00007078
  0.99987976]]
Coef Lasso:  [1.35269253 0.86910384 0.37857477 0.83535984 0.         0.22914234
 0.90887934]
Coef Ridge:  [[1.08843372 0.95300018 0.84338277 0.90422291 0.64360573 0.76090281
  0.96456701]]
Coef Elastic:  [0. 0. 0. 0. 0. 0. 0.]

A continuaci贸n les dejo el c贸digo:

import pandas as pd
import sklearn

from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.linear_model import ElasticNet

from sklearn. model_selection import train_test_split
from sklearn.metrics import mean_squared_error


if __name__ == "__main__":
    dataset = pd.read_csv('./dataset/felicidad.csv')
    # print(dataset.describe())

    X = dataset[['gdp', 'family', 'lifexp', 'freedom',
                 'corruption', 'generosity', 'dystopia']]
    y = dataset[['score']]

    # print(X.shape)
    # print(y.shape)

    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.25, random_state=0)

    modelLinear = LinearRegression().fit(X_train, y_train)
    y_pred_linear = modelLinear.predict(X_test)

    modelLasso = Lasso(alpha=0.02).fit(X_train, y_train)
    y_pred_lasso = modelLasso.predict(X_test)

    modelRidge = Ridge(alpha=1).fit(X_train, y_train)
    y_pred_ridge = modelRidge.predict(X_test)

    modelElasticNet = ElasticNet(random_state=0).fit(X_train, y_train)
    y_pred_elastic = modelElasticNet.predict(X_test)

    linear_loss = mean_squared_error(y_test, y_pred_linear)
    print('Linear Loss: ', linear_loss)

    lasso_loss = mean_squared_error(y_test, y_pred_lasso)
    print('Lasso Loss: ', lasso_loss)

    ridge_loss = mean_squared_error(y_test, y_pred_ridge)
    print('Ridge Loss: ', ridge_loss)

    elastic_loss = mean_squared_error(y_test, y_pred_elastic)
    print('ElasticNet Loss: ', elastic_loss)

    print('='*32, '\n')
    print("Coef Linear: ", modelLinear.coef_)
    print("Coef Lasso: ", modelLasso.coef_)
    print("Coef Ridge: ", modelRidge.coef_)
    print("Coef Elastic: ", modelElasticNet.coef_)```

Probando el modelo ElasticNet obtuve estos scores:

Loss Modelo Lineal: 9.113627069637195e-08
Loss Modelo Lasso: 0.04613142141272011
Loss Modelo Ridge: 0.005158990858509747
Loss Modelo ElasticNet: 1.1991244060565747

La p茅rdida es mucho mayor y el score me da negativo, a alguien m谩s le ocurri贸?