<jupyter_start><jupyter_text>3.1 Clasificador de arbol decision<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

from utilities import visualize_classifier 
data = np.loadtxt('data_decision_trees.txt', delimiter = ',')
X, y = data[:, :-1], data[:,-1]
class_0 = np.array(X[y==0])
class_1 = np.array(X[y==1])
print(class_1)
plt.figure()
plt.scatter(class_0[:,0], class_0[:,1], s=75, 
            facecolors='black',edgecolors='black',linewidth=1,marker='x')
plt.scatter(class_1[:,0],class_1[:,1], s=75, facecolors='white',
           edgecolors='black', linewidth=1, marker='o')
plt.title('Input data')
X_train ,  X_test, y_train,  y_test = train_test_split(X,y,test_size=0.25,random_state= 5)
#Decision , Trees classifier 
params = {'random_state':0,'max_depth':4}
classifier = DecisionTreeClassifier(**params)
classifier.fit(X_train,y_train)
print('Training dataset')
visualize_classifier(classifier, X_train, y_train)
y_test_pred = classifier.predict(X_test)
print('Test dataset')
visualize_classifier(classifier, X_test, y_test)
class_names = ['Class-0', 'Class-1']
print("\n" + "#"*40)
print("\nClassifier performance on training dataset\n")
print(classification_report(y_train, classifier.predict(X_train),
                       target_names=class_names))
print("#"*40 + '\n')
print("#"*40)
print("\nClassifier performance on test dataset\n")
print(classification_report(y_test, y_test_pred, target_names=class_names))
print("#"*40 + "\n")
"""
El rendimiento de un clasificador se caracteriza por la precisión, la recuperación y las puntuaciones f1. 
La precisión se refiere a la precisión de la clasificación y 
el recuerdo se refiere al número de elementos que se recuperaron como un porcentaje del número total de elementos
que se suponía que debían recuperarse.
Un buen clasificador tendrá alta precisión y alta recuperación, 
pero generalmente es una compensación entre los dos. 
Por lo tanto, tenemos puntaje f1 para caracterizar eso.
La puntuación F1 es la media armónica de precisión y recuperación, 
lo que le da un buen equilibrio entre la precisión y los valores de recuperación.
"""<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11585365853658537, 'fraction_numerical': 0.018292682926829267, 'mean_word_length': 6.223270440251572, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, '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': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '347430', 'license': 'MIT', 'n_tokens_mistral': 783, 'n_tokens_neox': 768, 'n_words': 211, 'path': 'supervised/3.1.decision_trees.ipynb', 'repo_name': 'andres-mestra/AI_learning', 'size': '2296'}