Integrando ChatGPT en los flujos de trabajo de Ciencia de Datos Consejos y Mejores Prácticas
Integrating ChatGPT in Data Science Workflows Tips and Best Practices.
¿Buscas integrar ChatGPT en tu flujo de trabajo de ciencia de datos? Aquí tienes un ejemplo junto con consejos y mejores prácticas para sacar el máximo provecho de ChatGPT para la ciencia de datos.
ChatGPT, su sucesor GPT-4 y sus alternativas de código abierto han sido extremadamente exitosas. Los desarrolladores y científicos de datos buscan ser más productivos y utilizar ChatGPT para simplificar sus tareas diarias.
Aquí veremos cómo utilizar ChatGPT para la ciencia de datos a través de una sesión de programación en pareja con ChatGPT. Construiremos un modelo de clasificación de texto, visualizaremos el conjunto de datos, identificaremos los mejores hiperparámetros para el modelo, probaremos diferentes algoritmos de aprendizaje automático y más, todo utilizando ChatGPT.
- Zepes News, 31 de mayo Bard para la Hoja de Trucos de Ciencia de Datos • Las 10 mejores herramientas para detectar ChatGPT, GPT-4, Bard y otros LLMs.
- Lenguajes de Programación para Roles de Datos Específicos
- 10 Consejos y Trucos de Jupyter Notebook para Científicos de Datos
En el camino, también veremos ciertos consejos para estructurar los comandos de manera que obtengamos resultados útiles. Para seguir adelante, necesitas tener una cuenta gratuita de OpenAI. Si eres un usuario de GPT-4, también puedes seguir los mismos comandos.
Construir un modelo de trabajo más rápido
Intentemos construir un modelo de clasificación de noticias usando ChatGPT para el conjunto de datos de 20 newsgroups en scikit-learn.
Este es el comando que usé: “Me gustaría construir un modelo de clasificación de noticias utilizando el conjunto de datos de 20 newsgroups de sklearn. ¿Sabes algo sobre esto?”
Aunque mi comando no es muy específico en este punto, he indicado tanto el objetivo como el conjunto de datos:
- Objetivo: construir un nuevo modelo de clasificación
- Conjunto de datos a utilizar: conjunto de datos de 20 newsgroups de scikit-learn
La respuesta de ChatGPT nos indica que comencemos cargando el conjunto de datos.
# Cargar el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)
newsgroups_test = fetch_20newsgroups(subset='test', shuffle=True)
Como también hemos indicado el objetivo (construir un modelo de clasificación de texto), ChatGPT nos indica cómo podemos hacer esto.
Vemos que nos da los siguientes pasos:
- Usar
TfidfVectorizer
para el preprocesamiento de texto y obtener una representación numérica. Este enfoque de usar los puntajes TF-IDF es mejor que usar las ocurrencias de conteo utilizando unCountVectorizer
. - Crear un modelo de clasificación en la representación numérica del conjunto de datos utilizando un clasificador Naive Bayes o Support Vector Machine (SVM).
También dio el código para un clasificador Naive Bayes multinomial, así que lo usaremos y verificaremos si ya podemos tener un modelo de trabajo.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
# Preprocesar los datos de texto
vectorizer = TfidfVectorizer(stop_words='english')
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)
# Entrenar un clasificador Naive Bayes
clf = MultinomialNB()
clf.fit(X_train, newsgroups_train.target)
# Evaluar el rendimiento del clasificador
y_pred = clf.predict(X_test)
print(classification_report(newsgroups_test.target, y_pred))
Fui y ejecuté el código anterior. Y funciona como se esperaba, sin errores. Pasamos de una pantalla en blanco a un modelo de clasificación de texto en unos minutos con un solo comando.
Resultados >>
precision recall f1-score support
0 0.80 0.69 0.74 319
1 0.78 0.72 0.75 389
2 0.79 0.72 0.75 394
3 0.68 0.81 0.74 392
4 0.86 0.81 0.84 385
5 0.87 0.78 0.82 395
6 0.87 0.80 0.83 390
7 0.88 0.91 0.90 396
8 0.93 0.96 0.95 398
9 0.91 0.92 0.92 397
10 0.88 0.98 0.93 399
11 0.75 0.96 0.84 396
12 0.84 0.65 0.74 393
13 0.92 0.79 0.85 396
14 0.82 0.94 0.88 394
15 0.62 0.96 0.76 398
16 0.66 0.95 0.78 364
17 0.95 0.94 0.94 376
18 0.94 0.52 0.67 310
19 0.95 0.24 0.38 251
accuracy 0.82 7532
macro avg 0.84 0.80 0.80 7532
weighted avg 0.83 0.82 0.81 7532
Aunque hemos obtenido un modelo funcional para resolver el problema en cuestión, aquí hay algunos consejos que pueden ayudarte cuando hagas una solicitud. La solicitud podría haber sido mejor y desglosada en pasos más pequeños, como los siguientes:
- Por favor, dime más sobre el conjunto de datos de 20 grupos de noticias de scikit-learn.
- ¿Cuáles son las posibles tareas que puedo realizar con este conjunto de datos? ¿Puedo construir un modelo de clasificación de texto?
- ¿Puede decirme qué algoritmo de aprendizaje automático será el más adecuado para esta aplicación?
Visualiza el conjunto de datos
Vale, ya hemos construido un modelo de clasificación de texto. Pero sucedió muy rápido, así que vamos a ralentizar y tratar de idear una visualización simple del conjunto de datos.
En particular, intentemos comprender la distribución de las muestras de entrenamiento en las 20 categorías de noticias e identificar si hay algún desequilibrio de clases.
Aquí está la solicitud que usé: “Me gustaría visualizar el conjunto de datos para comprender la distribución de clases e identificar el desequilibrio de clases. ¿Puedes ayudarme con la visualización?”
ChatGPT sugirió que un gráfico de barras o un histograma del número de muestras en cada una de las clases sería una buena visualización. Eso suena razonable.
Aquí está el código que ChatGPT generó para crear un gráfico de barras simple en matplotlib:
import matplotlib.pyplot as plt
# Carga el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)
# Cuenta el número de muestras para cada clase
class_counts = {}
for label in newsgroups_train.target:
class_name = newsgroups_train.target_names[label]
if class_name in class_counts:
class_counts[class_name] += 1
else:
class_counts[class_name] = 1
# Grafica la distribución de clases
plt.bar(class_counts.keys(), class_counts.values())
plt.xticks(rotation=90)
plt.xlabel('Clase')
plt.ylabel('Número de muestras')
plt.title('Distribución de clases')
plt.show()
Aquí está el gráfico. Es ordenado, las etiquetas son legibles. También podemos ver el número de muestras en cada una de las 20 clases.
La distribución de muestras de entrenamiento en las 20 clases es aproximadamente uniforme y no hay un desequilibrio de clases visible. Por lo tanto, el modelo que obtuvimos en el paso anterior es útil. Y no necesitamos usar ninguna técnica de re-muestreo novedosa para abordar el desequilibrio de clases.
Ajuste de hiperparámetros
A continuación, me gustaría ajustar los hiperparámetros del modelo. Primero, me gustaría comprender los diferentes hiperparámetros que se pueden ajustar. Luego, podemos hacer una búsqueda en cuadrícula simple si no hay demasiados hiperparámetros.
Aquí está la solicitud: “¿Hay algún hiperparámetro que pueda ajustar para mejorar el modelo clasificador?”
En el código que obtuvimos, max_df
para TfidfVectorizer
también es ajustable. Sabemos que la puntuación TF-IDF funciona asignando un peso más alto a los términos que ocurren con frecuencia en un documento particular mientras asigna un peso sustancialmente menor a los términos que ocurren con frecuencia en todos los documentos. El max_df
utiliza el porcentaje de ocurrencia para ignorar un término particular.
Por ejemplo, un max_df
de 0.5 indica que se ignorarán todos los términos que se produzcan en al menos el 50% de los documentos. Si lo desea, puede eliminar esto. Pero voy a mantenerlo solo para ver qué max_df
puedo usar.
El código utiliza una búsqueda en cuadrícula simple y selecciona los valores óptimos en función de las puntuaciones de validación cruzada.
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
# Define el pipeline con TF-IDF y Multinomial Naive Bayes
pipeline = Pipeline([
('tfidf', TfidfVectorizer(stop_words='english')),
('clf', MultinomialNB())
])
# Define la cuadrícula de hiperparámetros
param_grid = {
'tfidf__max_df': [0.5, 0.75, 1.0],
'clf__alpha': [0.1, 0.5, 1.0],
'clf__fit_prior': [True, False],
}
# Realiza la búsqueda en cuadrícula con validación cruzada
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(newsgroups_train.data, newsgroups_train.target)
# Imprime los mejores hiperparámetros y la puntuación de validación cruzada
print("Mejores hiperparámetros: ", grid_search.best_params_)
print("Puntuación de validación cruzada: ", grid_search.best_score_)
Output >>
Mejores hiperparámetros: {'clf__alpha': 0.1, 'clf__fit_prior': False, 'tfidf__max_df': 0.5}
Puntuación de validación cruzada: 0.9088736147919108
Al insertar los valores de estos hiperparámetros, obtuve una mejora del 2% en la precisión de la clasificación.
Aquí, no tuvimos muchos hiperparámetros para ajustar. Si tiene muchos hiperparámetros donde cada uno puede tomar un conjunto de valores, ejecutar una búsqueda en cuadrícula podría ser costoso. Y podría tener sentido ejecutar una búsqueda aleatoria en su lugar.
Iteración más rápida sobre diferentes modelos
Vimos en uno de los primeros pasos que un SVM también funciona bien para este problema de clasificación.
Ahora me gustaría construir un clasificador de vectores de soporte para el mismo conjunto de datos.
La indicación que utilicé: “¿Puede decirme si puedo usar un SVM para resolver el mismo problema? ¿Puede generar el código para hacerlo?”
y aquí vamos:
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# Cargar el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)
# Convertir los datos de texto en una matriz de características TF-IDF
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(newsgroups_train.data)
y = newsgroups_train.target
# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Definir el clasificador SVM
clf = SVC(kernel='linear')
# Entrenar el clasificador SVM
clf.fit(X_train, y_train)
# Predecir las etiquetas de clase para el conjunto de prueba
y_pred = clf.predict(X_test)
# Calcular la precisión del clasificador SVM
accuracy = accuracy_score(y_test, y_pred)
print('Precisión:', accuracy)
Dado que tenemos una puntuación de precisión de más del 90%, SVM parece ser una buena opción para este conjunto de datos.
Salida >> Precisión: 0.9019001325673884
Como se puede ver, puede usar ChatGPT para probar rápidamente diferentes modelos para resolver el mismo problema.
Explorando la reducción de dimensionalidad
Una vez que se ha centrado en construir un modelo funcional, también se pueden explorar otras direcciones disponibles. Veamos la reducción de dimensionalidad como ejemplo.
En este punto, no estoy interesado en ejecutar algoritmos de reducción de dimensionalidad porque ya tengo un modelo funcional. Y el espacio de características no es muy dimensional. Entonces no necesitamos reducir el número de dimensiones antes de construir el modelo.
Sin embargo, veamos los enfoques de reducción de dimensionalidad para este conjunto de datos específico.
La indicación que utilicé: “¿Puede decirme las técnicas de reducción de dimensionalidad que puedo usar para este conjunto de datos?”
Los siguientes técnicas han sido sugeridas por ChatGPT:
- Análisis semántico latente o SVD
- Análisis de componentes principales (PCA)
- Factorización de matrices no negativas (NMF)
Terminemos nuestra discusión enumerando las mejores prácticas para usar ChatGPT.
Mejores prácticas para usar ChatGPT en ciencia de datos
Estas son algunas de las mejores prácticas a tener en cuenta al usar ChatGPT para la ciencia de datos:
- No ingrese datos confidenciales ni código fuente: no ingrese datos confidenciales en ChatGPT. Cuando trabaje en equipos de datos en organizaciones, a menudo construirá modelos en datos de clientes, que deben mantenerse confidenciales. En su lugar, puede intentar construir prototipos para conjuntos de datos públicos similares y tratar de transponerlos en su conjunto de datos o problema. Del mismo modo, absténgase de ingresar código fuente sensible o cualquier información que no deba divulgarse.
- Especifique claramente sus indicaciones: sin indicaciones específicas, es bastante difícil obtener respuestas útiles de ChatGPT. Por lo tanto, estructure su indicación de manera que sean lo suficientemente específicas. Las indicaciones deben transmitir el objetivo claramente, uno paso a la vez.
- Descomponga indicaciones más largas en indicaciones más pequeñas: si tiene una cadena de pensamiento sobre cómo lograr una tarea específica, intente descomponerla en pasos más simples e indicar a ChatGPT que realice cada uno de los pasos.
- Depure de manera efectiva utilizando ChatGPT: en este ejemplo, todo el código que obtuvimos se ejecutó sin errores; pero esto no siempre es el caso. Puede encontrar errores debido a funciones obsoletas, referencias API no válidas y más. Cuando se encuentre con errores, puede ingresar el mensaje de error y la traza relevante en su indicación. Y observe las soluciones ofrecidas, luego proceda a depurar su código.
- Haga un seguimiento de las indicaciones: si usa (o planea usar) ChatGPT mucho en su flujo de trabajo diario de ciencia de datos, puede ser una buena idea hacer un seguimiento de las indicaciones. Esto puede ayudar a refinar las indicaciones con el tiempo e identificar técnicas de ingeniería de indicaciones para obtener mejores resultados de ChatGPT.
Conclusión
Cuando se utiliza ChatGPT para aplicaciones de ciencia de datos, comprender el problema empresarial es el primer y más importante paso. Por lo tanto, ChatGPT es solo una herramienta para simplificar y automatizar ciertas tareas y no es un reemplazo para la experiencia técnica de los desarrolladores.
Sin embargo, sigue siendo una herramienta invaluable para aumentar la productividad al ayudar a construir y probar rápidamente diferentes modelos y algoritmos. ¡Así que aprovechemos ChatGPT para perfeccionar nuestras habilidades y convertirnos en mejores desarrolladores! Bala Priya C es una desarrolladora y escritora técnica de India. Le gusta trabajar en la intersección de las matemáticas, la programación, la ciencia de datos y la creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, ciencia de datos y procesamiento del lenguaje natural. ¡Disfruta de la lectura, la escritura, la programación y el café! Actualmente, está trabajando en aprender y compartir sus conocimientos con la comunidad de desarrolladores mediante la redacción de tutoriales, guías prácticas, artículos de opinión y más.
We will continue to update Zepes; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Zepes News, 7 de junio ChatGPT para hojas de trucos de entrevistas de ciencia de datos • Lenguajes de programación para roles de datos específicos.
- Cómo optimizar consultas SQL para una recuperación de datos más rápida.
- ¿Cómo automatizar el análisis de datos con Langchain?
- Implementar una solución de seguimiento de múltiples objetos en un conjunto de datos personalizado con Amazon SageMaker.