In [ ]:
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (15.0, 6.0)
import numpy as np
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
from IPython.display import Image
El juego de adivina quién es, consiste en adivinar el personaje que tu oponente ha seleccionado antes de que él/ella adivine el tuyo. La dinámica del juego es:
A continuación, cargamos el tablero con los personajes.
In [ ]:
Image('data/guess_who_board.jpg', width=700)
Para la carga de datos usaremos la función read_csv
de pandas. Pandas cuenta con un amplio listado de funciones para la carga de datos. Mas informacion en la documentación de la API.
In [ ]:
# Carga el modulo pandas
In [ ]:
# Escribe aqui tu codigo para cargar los datos (utiliza read_csv), llama a los datos df
df =
df.head()
In [ ]:
#Separamos los tipos de variables
categorical_var = 'color de cabello'
binary_vars = list(set(df.keys()) - set([categorical_var, 'NOMBRE']))
In [ ]:
# *** Escribe tu codigo aquí ***
# Para las variables booleanas calculamos la suma
In [ ]:
# *** Escribe tu codigo aquí ***
# Para las variables categoricas, observamos la frecuencia de cada categoría
In [ ]:
# *** Escribe tu codigo aquí ***
In [ ]:
# *** Escribe tu codigo aquí ***
In [ ]:
labels = df['NOMBRE']
del df['NOMBRE']
df.head()
In [ ]:
# inspección del target
In [ ]:
from sklearn.feature_extraction import DictVectorizer
vectorizer = DictVectorizer(sparse=False)
ab=vectorizer.fit_transform(df.to_dict('records'))
dft = pd.DataFrame(ab, columns=vectorizer.get_feature_names())
dft.head().T
In [ ]:
from sklearn.tree import DecisionTreeClassifier
clasificador = DecisionTreeClassifier(criterion='entropy', random_state=42)
clasificador.fit(dft, labels)
In [ ]:
feat = pd.DataFrame(index=dft.keys(), data=clasificador.feature_importances_, columns=['score'])
feat = feat.sort_values(by='score', ascending=False)
In [ ]:
# grafica feat, para ver las variables mas relevantes
In [ ]:
from sklearn.tree import export_graphviz
dotfile = open('quien_es_quien_tree.dot', 'w')
export_graphviz(
clasificador,
out_file = dotfile,
filled=True,
feature_names = dft.columns,
class_names=list(labels),
rotate=True,
max_depth=None,
rounded=True,
)
dotfile.close()
!dot -Tpng quien_es_quien_tree.dot -o quien_es_quien_tree.png
Image('quien_es_quien_tree.png', width=1000)
In [ ]:
# Elige un personaje por su numero de observacion
observacion_numero = 17
mi_personaje = dft.iloc[observacion_numero]
mi_personaje
In [ ]:
personaje = clasificador.predict(mi_personaje)[0]
print('El personaje elegido es: ' + personaje + ' y en realidad es: ' + labels[observacion_numero+1])
In [ ]:
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(criterion='entropy', random_state=42)
rfc.fit(dft, labels)
In [ ]:
new_per = np.zeros(len(dft.keys()))
nuevo_personaje = pd.DataFrame(index=dft.keys(), data=new_per, columns=['features']).T
nuevo_personaje.T
In [ ]:
def modifica_feature_de_personaje(data, feature, nuevo_valor=1.0):
data[feature] = nuevo_valor
return data
In [ ]:
Image('data/guess_who_board.jpg', width=700)
In [ ]:
nuevo_personaje = modifica_feature_de_personaje(nuevo_personaje, 'bigote', 1.0)
nuevo_personaje.T
In [ ]:
print('El arbol de decision dice que es: ' + clasificador.predict(nuevo_personaje)[0])
In [ ]:
print('El random forest cree que es: ' + rfc.predict(nuevo_personaje)[0])
In [ ]:
ind = range(24)
plt.bar(ind,rfc.predict_proba(nuevo_personaje)[0])
plt.xticks(ind, labels.values, rotation='vertical')
plt.show()