0% encontró este documento útil (0 votos)
15 vistas10 páginas

Ejercicio 6

El documento describe una práctica de inteligencia artificial que involucra la carga y análisis de varios conjuntos de datos, incluyendo el de Titanic, opiniones de productos y salarios de empleados. Se utilizan modelos de aprendizaje automático como Regresión Logística, Árbol de Decisión y Random Forest para clasificar datos, así como Isolation Forest para detectar anomalías. Además, se incluyen pasos para la limpieza de datos y visualización de resultados.

Cargado por

Pablo Grageda
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas10 páginas

Ejercicio 6

El documento describe una práctica de inteligencia artificial que involucra la carga y análisis de varios conjuntos de datos, incluyendo el de Titanic, opiniones de productos y salarios de empleados. Se utilizan modelos de aprendizaje automático como Regresión Logística, Árbol de Decisión y Random Forest para clasificar datos, así como Isolation Forest para detectar anomalías. Además, se incluyen pasos para la limpieza de datos y visualización de resultados.

Cargado por

Pablo Grageda
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

UNIVERSIDAD PRIVADA DOMINGO SAVIO

Practica #6
Materia: Inteligencia Artificial
Docente: Vladimir Rojas
Estudiantes:

● Gerardo Pablo Moya Grageda

Carrera: ingeniería en sistemas

Cochabamba
Título:
_____________________________________________________________

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 1. Cargar el archivo titanic_limpio.csv.


try:
df_titanic_limpio = pd.read_csv('titanic_limpio.csv')
print("DataFrame 'titanic_limpio.csv' cargado exitosamente.")
except FileNotFoundError:
print("Error: 'titanic_limpio.csv' no encontrado. Asegúrate de que
el archivo esté en el mismo directorio o proporciona la ruta
completa.")
df_titanic_limpio = None

if df_titanic_limpio is not None:


# 2. Preparar los datos: Seleccionar características (X) y la
variable objetivo (y).
# Verificar primero qué columnas están disponibles
print(f"Columnas disponibles en el dataset:
{list(df_titanic_limpio.columns)}")

# Usar 'Sex_male' en lugar de 'male' basado en el contenido real


del CSV
features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare', 'Sex_male']
target = 'Survived'

# Verificar que las columnas necesarias existan en el DataFrame


missing_features = [f for f in features if f not in
df_titanic_limpio.columns]
if missing_features:
print(f"Error: Faltan las siguientes columnas en
'titanic_limpio.csv': {missing_features}. Asegúrate de que el Ejercicio
1 se ejecutó correctamente.")
elif target not in df_titanic_limpio.columns:
print(f"Error: La columna objetivo '{target}' no se encuentra
en 'titanic_limpio.csv'.")
else:
X = df_titanic_limpio[features]
y = df_titanic_limpio[target]

# Verificar si hay valores faltantes y manejarlos


print(f"\nValores faltantes por columna:")
print(X.isnull().sum())

Página | 2
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

# Eliminar filas con valores faltantes (especialmente en Age


que suele tener NaN)
initial_rows = len(X)
X_clean = X.dropna()
y_clean = y.loc[X_clean.index]
final_rows = len(X_clean)

if initial_rows != final_rows:
print(f"Se eliminaron {initial_rows - final_rows} filas con
valores faltantes.")
print(f"Filas restantes: {final_rows}")

# Dividir el dataset en conjuntos de entrenamiento y prueba


X_train, X_test, y_train, y_test = train_test_split(X_clean,
y_clean, test_size=0.2, random_state=42)
print("\nDatos divididos en conjuntos de entrenamiento y prueba
(80/20).")
print(f"Tamaño del conjunto de entrenamiento (X_train):
{X_train.shape}")
print(f"Tamaño del conjunto de prueba (X_test):
{X_test.shape}")

# Inicializar un diccionario para almacenar las precisiones


accuracies = {}

try:
# 3. Entrenar y evaluar un modelo de Regresión Logística.
log_reg_model = LogisticRegression(random_state=42,
solver='liblinear', max_iter=200) # Usar solver 'liblinear' para
datasets pequeños
log_reg_model.fit(X_train, y_train)
y_pred_log_reg = log_reg_model.predict(X_test)
accuracy_log_reg = accuracy_score(y_test, y_pred_log_reg)
accuracies['Regresión Logística'] = accuracy_log_reg
print(f"\nPrecisión del modelo de Regresión Logística:
{accuracy_log_reg:.4f}")

# 4. Entrenar y evaluar un modelo de Árbol de Decisión.


dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)
y_pred_dt = dt_model.predict(X_test)
accuracy_dt = accuracy_score(y_test, y_pred_dt)
accuracies['Árbol de Decisión'] = accuracy_dt
print(f"Precisión del modelo de Árbol de Decisión:
{accuracy_dt:.4f}")

# 5. Entrenar y evaluar un modelo de Random Forest.


rf_model = RandomForestClassifier(random_state=42)

Página | 3
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

rf_model.fit(X_train, y_train)
y_pred_rf = rf_model.predict(X_test)
accuracy_rf = accuracy_score(y_test, y_pred_rf)
accuracies['Random Forest'] = accuracy_rf
print(f"Precisión del modelo de Random Forest:
{accuracy_rf:.4f}")

# 6. Comparar las precisiones de los tres modelos.


print("\n--- Comparación de Precisiones ---")
for model_name, accuracy in accuracies.items():
print(f"{model_name}: {accuracy:.4f}")

# Opcional: Identificar el mejor modelo


best_model = max(accuracies, key=accuracies.get)
print(f"\nEl modelo con la mayor precisión es: {best_model}
con una precisión de {accuracies[best_model]:.4f}")

except Exception as e:
print(f"Error durante el entrenamiento de los modelos:
{e}")
print("Verifica que los datos estén correctamente
preparados.")

else:
print("\nNo se pudo proceder con el Ejercicio de Comparación de
Modelos - Titanic debido a un error en la carga del archivo.")

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
import re # Para limpieza de texto

# --- Carga del dataset (re-incluido para asegurar que este script sea
ejecutable por sí mismo) ---
Página | 4
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

try:
df_opiniones = pd.read_csv('opiniones_productos.csv',sep=';',
encoding='utf-8')
print("Dataset 'opiniones_productos.csv' cargado exitosamente para
preprocesamiento de texto.")
except FileNotFoundError:
print("Error: El archivo 'opiniones_productos.csv' no se encuentra.
Asegúrate de que esté en el directorio correcto.")
exit()

# 1. Definir características (X) y la variable objetivo (y)


X = df_opiniones['reviews']
y = df_opiniones['labels']

print(f"\nCantidad total de reseñas: {len(X)}")


print(f"Cantidad total de etiquetas: {len(y)}")

# 2. Limpieza básica del texto


# Función para limpiar el texto: convertir a minúsculas y eliminar
caracteres no alfabéticos
def clean_text(text):
text = text.lower() # Convertir a minúsculas
text = re.sub(r'[^a-z\s]', '', text) # Eliminar todo lo que no sea
una letra o espacio
return text

print("\nAplicando limpieza básica a las reseñas...")


X_cleaned = X.apply(clean_text)
print("Limpieza de texto completada. Ejemplo de reseña limpia:")
print(X_cleaned.iloc[0]) # Mostrar la primera reseña limpia

# 3. Vectorización TF-IDF
# Inicializar TfidfVectorizer
# min_df: ignora términos que aparecen en menos de 5 documentos
# max_df: ignora términos que aparecen en más del 80% de los documentos
# stop_words: elimina palabras comunes que no aportan mucho significado
(ej. 'el', 'la', 'un')
tfidf_vectorizer = TfidfVectorizer(min_df=5, max_df=0.8,
stop_words='english')
# 'english' para español, necesitarías descargar 'stopwords' de NLTK o
tener una lista personalizada.
# Por simplicidad y dado que los textos suelen estar en inglés en este
tipo de datasets, usaremos 'english'.
# Si las reseñas son en español, sería necesario adaptar esto.

print("\nRealizando vectorización TF-IDF...")


# Ajustar (fit) y transformar (transform) las reseñas limpias
X_tfidf = tfidf_vectorizer.fit_transform(X_cleaned)

Página | 5
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

print(f"Dimensiones de la matriz TF-IDF: {X_tfidf.shape}")


print(f"Número de características (palabras/términos) después de TF-
IDF: {X_tfidf.shape[1]}")

# 4. División en conjuntos de entrenamiento y prueba


# Usamos un 80% para entrenamiento y un 20% para prueba.
# 'random_state' asegura que la división sea reproducible.
X_train, X_test, y_train, y_test = train_test_split(X_tfidf, y,
test_size=0.2, random_state=42)

print(f"\nDimensiones de X_train (TF-IDF): {X_train.shape}")


print(f"Dimensiones de X_test (TF-IDF): {X_test.shape}")
print(f"Dimensiones de y_train: {y_train.shape}")
print(f"Dimensiones de y_test: {y_test.shape}")

print("\nPreprocesamiento de texto y vectorización TF-IDF completados.


Los datos están listos para el entrenamiento del modelo.")

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
import numpy as np

# 1. Cargar el archivo empleados_salarios.csv.


try:
df_empleados = pd.read_csv('empleados_salarios.csv')
print("DataFrame 'empleados_salarios.csv' cargado exitosamente.")
except FileNotFoundError:
print("Error: 'empleados_salarios.csv' no encontrado. Asegúrate de
que el archivo esté en el mismo directorio o proporciona la ruta
completa.")
df_empleados = None

if df_empleados is not None:

Página | 6
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

# 2. Preparar los datos seleccionando las características numéricas


relevantes.
features = ['edad', 'experiencia', 'salario']

# Verificar que las columnas necesarias existan


missing_features = [f for f in features if f not in
df_empleados.columns]
if missing_features:
print(f"Error: Faltan las siguientes columnas en
'empleados_salarios.csv': {missing_features}.")
else:
X = df_empleados[features]
print("\nCaracterísticas seleccionadas para la detección de
anomalías:")
print(X.head())

# 3. Inicializar y entrenar un modelo IsolationForest.


# contamination: la proporción esperada de anomalías en el
dataset
iso_forest = IsolationForest(random_state=42,
contamination=0.05) # Asumimos un 5% de anomalías
iso_forest.fit(X)
print("\nModelo IsolationForest entrenado.")

# 4. Realizar predicciones para identificar los puntos de datos


que el modelo considera anomalías.
# -1 para anomalías, 1 para puntos normales
df_empleados['anomalia'] = iso_forest.predict(X)
df_empleados['score_anomalia'] =
iso_forest.decision_function(X) # Puntuación de decisión, más baja =
más anómala

# Filtrar las anomalías


anomalias = df_empleados[df_empleados['anomalia'] == -1]
normales = df_empleados[df_empleados['anomalia'] == 1]

print(f"\nNúmero total de registros: {len(df_empleados)}")


print(f"Número de anomalías detectadas: {len(anomalias)}")
print("\nRegistros identificados como anomalías:")
print(anomalias)

# 5. Visualizar las anomalías identificadas.


# Gráfico de dispersión para visualizar anomalías (puedes
ajustar las columnas para visualizar)
plt.figure(figsize=(10, 7))
plt.scatter(normales['edad'], normales['salario'],
color='blue', label='Normal', s=20, alpha=0.8)

Página | 7
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

plt.scatter(anomalias['edad'], anomalias['salario'],
color='red', label='Anomalía', s=60, edgecolors='k', marker='o')
plt.title('Detección de Anomalías en Salarios (Edad vs.
Salario)')
plt.xlabel('Edad')
plt.ylabel('Salario')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

# También se puede visualizar con experiencia


plt.figure(figsize=(10, 7))
plt.scatter(normales['experiencia'], normales['salario'],
color='blue', label='Normal', s=20, alpha=0.8)
plt.scatter(anomalias['experiencia'], anomalias['salario'],
color='red', label='Anomalía', s=60, edgecolors='k', marker='o')
plt.title('Detección de Anomalías en Salarios (Experiencia vs.
Salario)')
plt.xlabel('Experiencia')
plt.ylabel('Salario')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

else:
print("\nNo se pudo proceder con el Ejercicio 9 debido a un error
en la carga del archivo.")

Página | 8
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

Página | 9
Asignatura:
Carrera: ingeniería en sistemas
Título:
_____________________________________________________________

Página | 10
Asignatura:
Carrera: ingeniería en sistemas

También podría gustarte