<jupyter_start><jupyter_text>AutoMLCuando utilizar AutoML* Tenemos un problema que involucra una de estas opciones.     * Imagenes         * Clasificacion (A nivel de imagen)         * Detección de objectos (A nivel de sección)         * Segmentation (A nivel de pixel)     * Texto         * Clasificación de texto         * Extracción de entidades         * Analisis de sentimiento     * Datos tabulares (CSV)         * Regresión         * Clasificacion         * Predicción (Forecasting)     * Video         * Clasificación         * Reconocimiento de acciones         * Seguimiento de objetos (Object tracking)         * El problema es básico.* El equipo es pequeño o no tiene experiencia.* Se búsca un prototico o prueba de concepto rápida.* El modelo no necesitaria ser mejorado  Ejemplo con datos tabulares* La primera linea del CSV ha de ser la cabecera, estos son los nombres de las columnas* Las columnas pueden contener caracteres alfanúmericos y la barra baja "_" (no puede comenzar por)* Cada CSV no puede pasar de 10GB, si pesa mas de 10GB lo puedes repartir en varios CSV hasta un máximo de 100GB* El delimitador ha de ser la coma ",".* Al menos 1000 filas para Tabular Data, 100 imagenes por clase para Vision AI    No hace falta delimitar el schema del CSV (si las columnas son enteros, flotantes, strings..., etc), Vertex AI lo hace por ti.Se puede repartir los datos entre entrenamiento, validación y test de forma automatica o manual AutomáticoEjemplo para un caso sin asignar|"John"|"Doe"|"555-55-5555"||"Jane"|"Doe"|"444-44-4444"||"Roger"|"Rogers"|"123-45-6789"||"Sarah"|"Smith"|"333-33-3333"| ManualEjemplo con los datos asignados"TRAIN","John","Doe","555-55-5555""TEST","Jane","Doe","444-44-4444""TRAIN","Roger","Rogers","123-45-6789""VALIDATE","Sarah","Smith","333-33-3333" Manual/Automático"UNASSIGNED","John","Doe","555-55-5555""TEST","Jane","Doe","444-44-4444""UNASSIGNED","Roger","Rogers","123-45-6789""UNASSIGNED","Sarah","Smith","333-33-3333" ChronologicallyEn este caso se asignan los casos en el orden de aparición en el CSV. Por ejemplo un reparto 80 10 10 daría como resultado* El primer 80% de las líneas del CSV se asignaria a entrenamiento, TRAIN.* El siguiente 10% se asignaria a validacion, VALIDATION.* El último 10% se asignaria a test, TEST.<jupyter_code>from sklearn.datasets import fetch_covtype
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, f1_score
df = fetch_covtype(return_X_y=False, as_frame=True)['frame']
df = df[df.Cover_Type.isin([5,3])].sample(2000).reset_index(drop=True)
#df.to_csv("cover.csv", index=False)
#df = df[["Wilderness_Area_3", "Wilderness_Area_0","Elevation", "Cover_Type"]]
rfc = RandomForestClassifier(warm_start=True, n_estimators=30)
train = df.head(1500)
test = df.tail(500)
X_train, y_train = train.iloc[:, :-1].values, train.iloc[:, -1:].values.reshape(-1)
X_test, y_test = test.iloc[:, :-1].values, test.iloc[:, -1:].values.reshape(-1)
rfc.fit(X_train, y_train)
y_pred = rfc.predict(X_test)
confusion_matrix(y_test, y_pred)
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(dpi=144)
order = np.argsort(rfc.feature_importances_)[::-1]
names = df.columns[:-1][order]
values = rfc.feature_importances_[order]
_ = plt.barh(y=names[:10], width=values[:10])
_ = plt.yticks(fontsize=4)
ax.xaxis.label.set_size(10)
import seaborn as sns
sns.pairplot(df.head(1000)[["Elevation", "Wilderness_Area_3", "Wilderness_Area_2", "Cover_Type"]], diag_kind='kde')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12549351381838691, 'fraction_numerical': 0.049633389734912575, 'mean_word_length': 5.022071307300509, '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': '262923', 'license': 'MIT', 'n_tokens_mistral': 1391, 'n_tokens_neox': 1234, 'n_words': 347, 'path': '2-AutoML.ipynb', 'repo_name': 'SergioPN/GCPDeploymentCourse', 'size': '3546'}