Skip to main content

Paquete Inteligencia Artificial

Paquete de algoritmos de Inteligencia Artificial para aprendizaje de estructura de Redes Bayesianas.

Instalación

pip install inteligenciartificial

O desde fuente local:

pip install ./fia

Uso

Algoritmos de aprendizaje de estructura

K2

Algoritmo greedy que requiere un orden topológico de variables. Agrega padres iterativamente si mejoran la métrica de scoring.

from inteligenciartificial.modelografosprobabilisticos.busqueda import K2
from inteligenciartificial.modelografosprobabilisticos.metricas import Entropia, BIC

orden = ["Churn", "tenure_cat", "OnlineSecurity", "TechSupport", "Contract"]
k2 = K2(orden, max_padres=4, df=df_train, metrica=Entropia())
# [K2] Grafos explorados: 35 | Tiempo: 0.1234 s | Throughput: 283.61 grafos/s

modelo = k2.fit(X_train, y_train, alpha=1.0)

Hill-Climbing

Algoritmo de búsqueda local que en cada paso evalúa operaciones de agregar, eliminar e invertir aristas, seleccionando la que mayor mejora produce.

A partir de la versión 0.0.6 acepta configurar el estado inicial:

  • Por defecto parte de un grafo vacío.
  • grafo_inicial: Grafo desde el cual iniciar la búsqueda.
  • grafos_iniciales: lista de Grafo para ejecutar varias corridas con inicios manuales.
  • reinicios + seed: número de reinicios desde DAGs aleatorios reproducibles.
from inteligenciartificial.modelografosprobabilisticos.busqueda import HillClimbing
from inteligenciartificial.modelografosprobabilisticos.metricas import BIC
from inteligenciartificial.modelografosprobabilisticos.grafo import Grafo

variables = ["Churn", "tenure_cat", "OnlineSecurity", "TechSupport", "Contract"]

# Inicio por defecto (grafo vacío)
hc = HillClimbing(variables, max_padres=4, df=df_train, metrica=BIC(), max_iter=100)

# Inicio desde un grafo dado
hc = HillClimbing(variables, max_padres=4, df=df_train, metrica=BIC(), max_iter=100,
                  grafo_inicial=Grafo([("Contract", "Churn")]))

# Reinicios aleatorios reproducibles
hc = HillClimbing(variables, max_padres=4, df=df_train, metrica=BIC(), max_iter=100,
                  reinicios=5, seed=42)

# Reinicios manuales
hc = HillClimbing(variables, max_padres=4, df=df_train, metrica=BIC(), max_iter=100,
                  grafos_iniciales=[Grafo([]), Grafo([("Contract", "Churn")])])

modelo = hc.fit(X_train, y_train, alpha=1.0)

Simulated Annealing

Búsqueda estocástica que en cada iteración propone una operación vecina aleatoria (agregar / eliminar / invertir arista). Si la operación mejora el score se acepta; si lo empeora, se acepta con probabilidad exp(Δ / T). La temperatura decae geométricamente con factor enfriamiento.

from inteligenciartificial.modelografosprobabilisticos.busqueda import SimulatedAnnealing
from inteligenciartificial.modelografosprobabilisticos.metricas import BIC

sa = SimulatedAnnealing(
    variables, max_padres=4, df=df_train, metrica=BIC(),
    max_iter=2000, t_inicial=1.0, t_min=1e-3, enfriamiento=0.995, seed=42,
)
modelo = sa.fit(X_train, y_train, alpha=1.0)

Métricas de throughput

Todos los algoritmos (K2, Hill-Climbing y Simulated Annealing) reportan automáticamente al finalizar el entrenamiento:

Atributo Descripción
grafos_explorados Cantidad de configuraciones de grafo (conjuntos de padres) evaluadas
tiempo_segundos Tiempo total de la búsqueda de estructura en segundos
throughput Tasa de exploración: grafos_explorados / tiempo_segundos (grafos/s)
print(k2.grafos_explorados)   # e.g., 35
print(k2.tiempo_segundos)     # e.g., 0.1234
print(k2.throughput)           # e.g., 283.61

Métricas de scoring

Métrica Descripción
Entropia Usa -H(X|Pa) como score (mayor es mejor)
BIC Bayesian Information Criterion con penalización (k/2)*log(N)

Modelos

  • RedBayesiana: Red Bayesiana discreta con CPTs estimadas por conteos + suavizado Dirichlet(alpha).
  • NaiveBayes: Caso especial donde todas las features dependen únicamente de la clase.

Ambos son clasificadores de scikit-learn (ver abajo).

Integración con scikit-learn

A partir de la versión 0.0.7, RedBayesiana y NaiveBayes heredan de ClassifierMixin y BaseEstimator: se pueden clonar y, tras fit, exponen classes_ y predict_proba (P(objetivo | X), una columna por clase). Por eso se acoplan directamente a TunedThresholdClassifierCV (scikit-learn ≥ 1.5), que elige por validación cruzada el umbral de decisión que maximiza una métrica en problemas binarios. En la RedBayesiana la estructura del grafo queda fija y en cada fold solo se re-estiman las CPTs.

from sklearn.metrics import f1_score, make_scorer
from sklearn.model_selection import TunedThresholdClassifierCV

red = hc.fit(X_train, y_train, alpha=1.0)   # o RedBayesiana(grafo, alpha=1.0)

ajustado = TunedThresholdClassifierCV(
    red, scoring=make_scorer(f1_score, pos_label="Yes"), cv=5,
).fit(X_train, y_train)

print(ajustado.best_threshold_, ajustado.best_score_)
y_pred = ajustado.predict(X_test)
  • La variable objetivo es el nombre de y (pd.Series). Si y no tiene nombre, indícala con RedBayesiana(grafo, objetivo="Churn").
  • Con etiquetas de texto, las métricas que usan pos_label (F1, precisión, recall) necesitan make_scorer(..., pos_label=...); la métrica por defecto, balanced_accuracy, no.
  • Con un conjunto de validación aparte: TunedThresholdClassifierCV(red, cv="prefit", refit=False).fit(X_val, y_val).
  • NaiveBayes se usa igual: TunedThresholdClassifierCV(NaiveBayes(clase="Churn"), cv=5).fit(X_train, y_train).

Dependencias

  • numpy >= 1.23
  • pandas >= 1.5
  • scikit-learn >= 1.5

Licencia

MIT

Metadata

Release files for inteligenciartificial 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for inteligenciartificial 0.0.7
File Size Uploaded
inteligenciartificial-0.0.7.tar.gz 16.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for inteligenciartificial 0.0.7
File Interpreter ABI Platform
inteligenciartificial-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 38.4 kB

Release files / inteligenciartificial-0.0.7.tar.gz

Download URL inteligenciartificial-0.0.7.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
40840124f5cf9c96186c5c661866c876f0f76fc9dddc2063e05e4c3d1a0022ad
BLAKE2b-256 checksum
How to use checksums
e72d17477c13012946474276b5a1c745c3a3a6f84d3753e5bdabed3d832a681d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / inteligenciartificial-0.0.7-py3-none-any.whl

Download URL inteligenciartificial-0.0.7-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1856f2d92a64b678b3ad2525bf55fb39746893321381c686c97f807482817088
BLAKE2b-256 checksum
How to use checksums
565802322ecf5604794683804f6dba36520386d886da4085128157cb62ffdb8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

0.0.9

2 release files

0.0.8

2 release files

This release

0.0.7 This release

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page