<jupyter_start><jupyter_text>Métodos de ensamble aplicados a clasificaciónLos métodos de esnamble sirven para probar muchos estimadores, es decir, probamos diferentes algorimtos y luego le decimos que lleguen en común a una conclusión.Combinar diferentes métodos de ML con diferentes configuraciones y aplicar un método para logra un consenso.La diversidad es una muy buena opciónLos métods de ensamble se han destacado por ganar muchas competencias de ML. Baggin:Viene de Boottrap AggregationConsiste en consultar la opinion de varios expertos, el algotritmo lo que hace es que permtie que cada uno de los expertos decida en paralelo. Y atraves de una formula al final  filtra el mejor.1. Se parten los datos2. Se entrenan los modelos 3. Se combinan por ejemplo las respeustasAlgunos métodos reconocidos de Baggin son:1. Random Forest2. Voting Classifiers/Regressors3. En general se peuden aplciar sobre cualquer modelo de mahcine learnign BoostingBoosting Viene de impulsarTrabaja no en paraleo si no en serie, le pedimos a un experto el criterio sobre un problema. Medimos su posible errir, y luego usando ese error calculado le pedimos a otr experto su juiocio sobre el mismo problema. Es como pasar  los datos por diferentes filtros. E experto corrige basados en un error. Todo hasta lelgar a un consejo.Busca fortalecer gradualmente un modelo de aprendizaje usando siempre el error residual de las etapas anteriores.El resultado final también se consigue por consenso entre tods los modelos.Los modelos mas conocidos de ensamblado por boosting1.AdaBoost2.Gradiente Tree Boosting3. XGBoost  Preparación de datos para implementar métodos de ensambleEl metaestimado Bugguin clasifiers significa que lo puedo adaptar para diferentes familais de estimadores y automaticamente se convierte en un método de ensamble.Haremos este ejerccio con el data set de afecciones cardiacas.<jupyter_code>import pandas as pd

from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import BaggingClassifier

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


dt_heart = pd.read_csv('./data/heart.csv')
dt_heart
dt_heart['target'].describe()
# Cargamso en los features todos los datasets excepto la variable target.
X = dt_heart.drop(['target'], axis =1)
y = dt_heart['target']
# Entreno mi modelo 
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size =0.35)<jupyter_output><empty_output><jupyter_text>Implementación de Bagging<jupyter_code>knn_class = KNeighborsClassifier().fit(X_train, y_train) # Ajustamos
knn_pred = knn_class.predict(X_test) # Predecimos
accuracy_only_clasifier = accuracy_score(knn_pred, y_test) #Comparamos contra lsodatos reales
print("This is the accuracy with Knn: "+ str(accuracy_only_clasifier) )<jupyter_output>This is the accuracy: 0.6935933147632312<jupyter_text>Ahora queremos comparar este clasificador con la implmentación del clasificador por ensamble<jupyter_code>'''
Primer argumento:
** En  qué está basado nuestro pimer estimaodor base_estimator
** Y un numero de estimadores
'''
bag_class = BaggingClassifier(base_estimator=KNeighborsClassifier(), n_estimators=50).fit(X_train, y_train) 
bag_predictions = bag_class.predict(X_test)
accuracy_bag_ensamble = accuracy_score(bag_predictions, y_test)
print("This is the accuracy with Assemble: " + str(accuracy_bag_ensamble) )<jupyter_output>This is the accuracy with Assemble: 0.7409470752089137<jupyter_text>Con el método por ensamble se optiene un valro superior a l del clasificador solo. Tener meayor grado de confianza supone la vida de un paciente y al desición respecto al diagnostico. ¡Como interpreto este numero?Assemble: 0.7409470752089137 Que con un 74,% de confianza estamso predicioendo que un paciente tenga probelams cariacos o no. ¿?  Implementación de BoostingUsaremos el gradientr tree boosting. Usaremos neuvamente target como la variable que uqeremso clasificar, e importaremos nuestros arboles de deicicon.<jupyter_code>from sklearn.ensemble import GradientBoostingClassifier

# Defnimos el clasificadors 
'''
Los estimadores aqui son el numeor de arboles de desicion. 
Se peude ajsutar según criterio o ealgo llamado Crosx Validation... que es?
Construye arboles pequeños profundo con pocas hojas, entrena uno de tras de otro para un resultado optimio de la sclasificacion.
'''
boost = GradientBoostingClassifier(n_estimators=50).fit(X_train, y_train)
boost_predictions = boost.predict(X_test)
accuracy_boost = accuracy_score(boost_predictions, y_test)
print("This is the accuracy with Boosting: " + str(accuracy_boost) )<jupyter_output>This is the accuracy with Boosting: 0.935933147632312
{'fraction_non_alphanumeric': 0.049753377653870896, 'fraction_numerical': 0.01844306240617628, 'mean_word_length': 6.231007751937985, 'pattern_counts': {'":': 0, '<': 14, '<?xml version=': 0, '>': 14, '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': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '512521', 'license': 'MIT', 'n_tokens_mistral': 1570, 'n_tokens_neox': 1501, 'n_words': 545, 'path': 'NoteBooks/Curso de Scikit-learn/Jupyter Notes/Métodos de ensamble aplicados a clasificación.ipynb', 'repo_name': 'Alejandro-sin/Learning_Notebooks', 'size': '4663'}