Primero pimpea tu libreta!


In [50]:
from IPython.core.display import HTML
import os
def css_styling():
    """Load default custom.css file from ipython profile"""
    base = os.getcwd()
    styles = "<style>\n%s\n</style>" % (open(os.path.join(base,'files/custom.css'),'r').read())
    return HTML(styles)
css_styling()


Out[50]:

Primero librerias


In [ ]:
import numpy as np
import sklearn as sk
import matplotlib.pyplot as plt
import sklearn.datasets as datasets
import seaborn as sns
%matplotlib inline

Vamos a crear datos de jugete

Crea varios "blobs"

recuerda la funcion de scikit-learn datasets.make_blobs() Tambien prueba

centers = [[1, 1], [-1, -1], [1, -1]]
 X,Y = datasets.make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)

In [ ]:

Ahora vamos a crear un modelo de arbol

podemos usar DecisionTreeClassifier como clasificador


In [ ]:
from sklearn.tree import DecisionTreeClassifier

Que parametros y funciones tiene el classificador?

Hint: usa help(cosa)!


In [ ]:
help(clf)

vamos a ajustar nuestro modelo con fit y sacar su puntaje con score


In [ ]:

Por que no queremos 100%?

Este problema se llama "Overfitting"

Pasos para un tipico algoritmo ML:

  • Crear un modelo
  • Particionar tus datos en diferentes pedazos (10% entrenar y 90% prueba)
  • Entrenar tu modelo sobre cada pedazo de los datos
  • Escogete el mejor modelo o el promedio de los modelos
  • Predice!

Primero vamos a particionar los datos usando


In [ ]:
from sklearn.cross_validation import train_test_split

cuales son los tamanios de estos nuevos datos?


In [ ]:

y ahora entrenamos nuestro modelo y checamos el error


In [ ]:

Como se ve nuestro modelo?

Que fue mas importante para hacer una decision?

Como podemos mejorar y controlar como dividimos nuestros datos?


In [ ]:

Validación cruzada y

K-fold

Y lo mejor es que podemos hacer todo de usa sola patada con sci-kit!

Hay que usar cross_val_score


In [ ]:
from sklearn.cross_validation import cross_val_score

In [ ]:


In [ ]:

Y como podemos mejorar un arbol de decision?

RandomForestClassifier(n_estimators=n_estimators) Al rescate!


In [ ]:
from sklearn.ensemble import RandomForestClassifier

a probarlo!


In [ ]:

mejoro?


In [ ]:

Pero ahora tenemos un parametro nuevo, cuantos arboles queremos usar?

,, ...

Que tal si probamos con un for loop!? Y checamos el error conforme al numero de arboles?

Actividad!

Hay que :

  • Definir nuestro rango de arboles a probar en un arreglo
  • hacer un for loop sobre este arreglo
    • Para cada elemento, entrena un bosque y saca el score
    • Guarda el score en una lista
    • graficalo!

In [ ]:

El conjunto de datos Iris

Un modelo multi-dimensional


In [ ]:
g = sns.PairGrid(iris, hue="species")
g = g.map(plt.scatter)
g = g.add_legend()

Actividad:

Objetivo: Entrena un arbol para predecir la especie de la planta

  • Checa las graficas, que variables podrian ser mas importante?
  • Agarra los datos, que dimensiones son?
  • Rompelos en pedacitos y entrena tus modelos
  • Que scores te da? Que resulto ser importante?

In [ ]:
iris = datasets.load_iris()
X = iris.data
Y = iris.target

In [ ]: