<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
Step1:  <i class="fa fa-diamond"></i> Primero pimpea tu libreta!
Step2:  Introduccion a Machine Learning
En Machine learning, computadoras aplican tecnicas de aprendizaje estadistico para automaticamente reconocer patrones en los datos.
Estas tecnicas se pueden utilizar para predecir, clasificar, ajustar modelos, descubrir patrones y reducir dimencionalidad.
Para ello utilizaremos la libreria Scikit-learn
Step3:  El panorama!
Primero, a usar la intuicion!
Como clasificaremos a estos dos grupos?
Que se te ocurre?
El problema de Clasificacion
En ML, categorizar puntos de datos es un problema de classificacion.
Normalmente X representan los datos y Y los valores a predecir.
<i class="fa fa-eye"></i> (Ojo)
Step4:  A visualizar!
Con Y, el valor que queremos predecir, podemos asignar colores
Step5:  k-means al rescate!
K-mean es un algoritmo sencillo que podemos utilizar, busca los centros mas "probables" y entonces un punto se encuentra en la categoria si se encuentra mas cerca a estos centros.
Step6:  mas bonito
Step7:  podemos cuantificar el error para ver que tal
Step8:  y visualizar los centros
Step9:  Finalemente vamos a visualizar el error conforme el numero de K's
Step10:  Le atinamos?
Que podemos cambiar?
Actividad!
Crear un numero alteatorio, guardalo en una variable, recuerda (np.random.randint())
NO LO VEAS!
Crea gaussianas con esa variable
Usa K-means para tratar de encontrar el numero de classificaciones.
Que pasa cuando los clusters se encuentran cerca? Es decir cuando hay sobrelape
Mas dimensiones extra, mas info, sutilezas
Dimensiones en un conjunto de datos se llaman features o variables.
La esencia del aprendizaje estadistico es identificar los limites en los datos usando matematicas.
Crea modelo tambien se dice que es "entrenar un modelo".
Step11:  vamos a ver que acabamos de lodear
Step12:  corremos k-means
Step13:  y visualizamos
<ASSISTANT_TASK:>
Python Code:
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()
Explanation: <i class="fa fa-diamond"></i> Primero pimpea tu libreta!
End of explanation
import numpy as np
import sklearn as sk
import matplotlib.pyplot as plt
import sklearn.datasets as datasets
%matplotlib inline
Explanation: Introduccion a Machine Learning
En Machine learning, computadoras aplican tecnicas de aprendizaje estadistico para automaticamente reconocer patrones en los datos.
Estas tecnicas se pueden utilizar para predecir, clasificar, ajustar modelos, descubrir patrones y reducir dimencionalidad.
Para ello utilizaremos la libreria Scikit-learn:
End of explanation
X, Y = datasets.make_blobs(centers=2)
print("Informacion sobre X:")
print(X.shape)
print(X)
print("Informacion sobre Y:")
print(Y.shape)
print(Y)
Explanation: El panorama!
Primero, a usar la intuicion!
Como clasificaremos a estos dos grupos?
Que se te ocurre?
El problema de Clasificacion
En ML, categorizar puntos de datos es un problema de classificacion.
Normalmente X representan los datos y Y los valores a predecir.
<i class="fa fa-eye"></i> (Ojo):
X es un arreglo multidimencional, tiene informacion del eje x y y!
End of explanation
plt.scatter(X[:,0], X[:,1], c=Y);
Explanation: A visualizar!
Con Y, el valor que queremos predecir, podemos asignar colores
End of explanation
from sklearn.cluster import KMeans
kmeans = KMeans(4)
Y_pred = kmeans.fit(X).labels_
print(Y_pred)
Explanation: k-means al rescate!
K-mean es un algoritmo sencillo que podemos utilizar, busca los centros mas "probables" y entonces un punto se encuentra en la categoria si se encuentra mas cerca a estos centros.
End of explanation
plt.scatter(X[:,0], X[:,1], c=Y_pred);
Explanation: mas bonito
End of explanation
error=kmeans.score(X,Y)
print("El error es : %f "%error)
Explanation: podemos cuantificar el error para ver que tal
End of explanation
plt.scatter(X[:,0], X[:,1], c=Y_pred, alpha=0.4)
mu = kmeans.cluster_centers_
plt.scatter(mu[:,0], mu[:,1], s=100, c=np.unique(Y_pred))
print mu
Explanation: y visualizar los centros:
End of explanation
ks =[ 2,5,8,10,20,40,60,80,100]
error=[]
for k in ks:
    kmeans = KMeans(k)
    kmeans.fit(X)
    error.append(kmeans.score(X,Y))
plt.plot(ks,error,'-o')
plt.show()
Explanation: Finalemente vamos a visualizar el error conforme el numero de K's
End of explanation
from sklearn.cluster import KMeans
from sklearn.utils import shuffle
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
Y = digits.target
#X_digits, _,_, Y_digits = load_digits() # datos MNIST
#X_digits, Y_digits = shuffle(X_digits,Y_digits) # movemos los datos aleatoriamente
#X_digits = X_digits[-5000:]       # take only the last instances, to shorten runtime of KMeans
Explanation: Le atinamos?
Que podemos cambiar?
Actividad!
Crear un numero alteatorio, guardalo en una variable, recuerda (np.random.randint())
NO LO VEAS!
Crea gaussianas con esa variable
Usa K-means para tratar de encontrar el numero de classificaciones.
Que pasa cuando los clusters se encuentran cerca? Es decir cuando hay sobrelape
Mas dimensiones extra, mas info, sutilezas
Dimensiones en un conjunto de datos se llaman features o variables.
La esencia del aprendizaje estadistico es identificar los limites en los datos usando matematicas.
Crea modelo tambien se dice que es "entrenar un modelo".
End of explanation
plt.rc("image", cmap="binary") # use black/white palette for plotting
for i in xrange(10):
    plt.subplot(2,5,i+1)
    plt.imshow(X[i].reshape(28,28))
    plt.xticks(())
    plt.yticks(())
plt.tight_layout()
Explanation: vamos a ver que acabamos de lodear:
End of explanation
kmeans = KMeans(20)
mu_digits = kmeans.fit(X).cluster_centers_
Explanation: corremos k-means
End of explanation
plt.figure(figsize=(16,6))
for i in xrange(2*(mu_digits.shape[0]/2)): # loop over all means
    plt.subplot(2,mu_digits.shape[0]/2,i+1)
    plt.imshow(mu_digits[i].reshape(32,32))
    plt.xticks(())
    plt.yticks(())
plt.tight_layout()
Explanation: y visualizamos
End of explanation
<END_TASK>