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:Grafodesde el cual iniciar la búsqueda.grafos_iniciales: lista deGrafopara 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). Siyno tiene nombre, indícala conRedBayesiana(grafo, objetivo="Churn"). - Con etiquetas de texto, las métricas que usan
pos_label(F1, precisión, recall) necesitanmake_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). NaiveBayesse usa igual:TunedThresholdClassifierCV(NaiveBayes(clase="Churn"), cv=5).fit(X_train, y_train).
Dependencias
numpy >= 1.23pandas >= 1.5scikit-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)
| File | Size | Uploaded | |
|---|---|---|---|
| inteligenciartificial-0.0.7.tar.gz | 16.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|