<jupyter_start><jupyter_text>Act 5: Árbol de decisiónObjetivo.- Entrenar un árbol de decisión en python.Instrucciones.-Elaborarlo en una notebook (Colab o Jupyter) y subirlo a su repositorio de Github correspondiente a esta materia.Utilizar el ejemplo visto en clase como base: https://vincentblog.xyz/posts/decision-trees-in-pythonhttps://nbviewer.jupyter.org/github/vincent1bt/Machine-learning-tutorials-notebooks/blob/master/decisionTrees/decisionTreeTutorial1.ipynb Utilizar el dataset que vimos en clase en la página kaggle: https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset?select=heart.csv Al final entrenaran dos árboles de decisión:Modelo 1: Sin modificar características del árbol. Modelo 2: Modificar la profundidad del árbol de decisión y una característica mas que ustedes quieran. Cada modelo deberá mostrar el resultado de su desempeño en términos de exactitud, como en el ejemplo.<jupyter_code>from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier   #librerias de modelo de disicion 
import numpy as np        #para funciones matematicas
import pandas as pd         #para leeer sets de datos 
from sklearn.metrics import accuracy_score
dataset=pd.read_csv("heart.csv")     #GUARDAR SET DE DATOS EN LA VARIABLE DATASET
dataset.head()           #SET DE DATOS INICIAL 
dataset.shape      #CUENTA CON 303 FILAS Y 14 COLUMNAS 
features = dataset.drop(["output"], axis=1)     # SE QUITA LA COLUMNA OUTCOME
X = np.array(features)              #GUARDAN LOS VALORES EN UN ARREGLO EN NUMPY EN UNA MATRIZ DE 2 DIMENSIONES  DATOS DE ENTRADA
y = np.array(dataset["output"])      #VARIABLE Y ES LA SALIDA, EN NUESRO OUTCOME , TOMAMOS LA VARIABLE INICIAL DATASET Y LLAMAMOS A SOLO LA COMLUMNA DE DATASET
X_train, X_val, y_train, y_val = train_test_split(X, y, random_state=0, test_size=0.20)    # DIVISION A DATOS DE ENTRENAMIENTO  DE MANERA QUE SE ENTRENA EL ARBOL DE DECISION Y DESPUES SE UTILIZA PARA EVALUARLO SI FUE EXITOSO<jupyter_output><empty_output><jupyter_text>CREACION DEL MODELO<jupyter_code>tree = DecisionTreeClassifier()    #GENERAMOS LA ESTRUCTURA DE ARBOL DE DECISION 
tree.fit(X_train, y_train)   #CREACION DE MODELO, AGREGA LOS DATOS DE ENTRADA 
tree.tree_.max_depth    #
validation_prediction = tree.predict(X_val)     #validacion del arbol de decision del arbol entrenado, funcion de prediccion para darle los valores 
training_prediction = tree.predict(X_train)     #
print('Exactitud training data: ', accuracy_score(y_true=y_train, y_pred=training_prediction))
print('Exactitud validation data: ', accuracy_score(y_true=y_val, y_pred=validation_prediction))<jupyter_output>Exactitud training data:  1.0
Exactitud validation data:  0.7704918032786885<jupyter_text>Mostrando el arbol de manera visual<jupyter_code>!apt-get install graphviz
!pip install graphviz
import graphviz 
from sklearn.tree import export_graphviz
feature_names = features.columns
dot_data = export_graphviz(tree, out_file=None, 
                         feature_names=feature_names,  
                         class_names=True,  
                         filled=True, rounded=True,  
                         special_characters=True)  
graph = graphviz.Source(dot_data)
graph<jupyter_output><empty_output><jupyter_text>Segundo modelo<jupyter_code>tree = DecisionTreeClassifier(min_samples_leaf=10, max_depth=8, min_samples_split=50)   #modificacion de max depth
tree.fit(X_train, y_train)
validation_prediction = tree.predict(X_val)
training_prediction = tree.predict(X_train)
print('Exactitud training data: ', accuracy_score(y_true=y_train, y_pred=training_prediction))
print('Exactitud validation data: ', accuracy_score(y_true=y_val, y_pred=validation_prediction))
dot_data = export_graphviz(tree, out_file=None, 
                         feature_names=feature_names,  
                         class_names=True,  
                         filled=True, rounded=True,  
                         special_characters=True)  
graph = graphviz.Source(dot_data)
graph<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.070253009088676, 'fraction_numerical': 0.009825595676737903, 'mean_word_length': 4.4077025232403715, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 16, 'https://': 3, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '346718', 'license': 'MIT', 'n_tokens_mistral': 1414, 'n_tokens_neox': 1344, 'n_words': 351, 'path': 'ACT5_ArbolDeDecision.ipynb', 'repo_name': 'CarranzaDritte/my_first_repo', 'size': '4071'}