Skip to main content

A Python package of mixed integer convex programming for directed acyclic graphs.

Project description

micodag is a Python package for learning Bayesian network using mixed integer convex programming.

  • Related paper:
    1. Integer Programming for Learning Directed Acyclic Graphs from Non-identifiable Gaussian Models
    2. An Asymptotically Optimal Coordinate Descent Algorithm for Learning Bayesian Networks from Gaussian Models
  • Authors: Tong Xu, Armeen Taeb, Simge Kucukyavuz, Ali Shojaie
  • Code for reproducing experiments in the paper is available on Github
  • Source code: https://github.com/AtomXT/micodag

Install

$ pip install micodag

Simple example

Please download the following test files: data, true graph, and moral graph.

import micodag as mic
import pandas as pd
import numpy as np

data = pd.read_csv("data_3bowling_n_500_iter_1.csv", header=None)
moral = pd.read_table('Sparse_Moral_edges_9_500_3.txt', delimiter=",", header=None)
true_B = pd.read_table('Sparse_Original_edges_9_500_3.txt', delimiter=",", header=None)
n, p = data.shape
lam = 12*np.log(p)/n

true_moral_ = [[0] * data.shape[1] for i in range(data.shape[1])]
for i in range(len(moral)):
    true_moral_[moral.iloc[i, 0] - 1][moral.iloc[i, 1] - 1] = 1
true_moral_ = np.array(true_moral_)

RGAP, B, _, obj, _ = mic.optimize(data, moral, lam)
est, min_obj = mic.CD(data, true_moral_, MAX_cycles=400,
                  lam=np.sqrt(12 * np.log(p) / n))
B_arcs = pd.DataFrame([[i+1, j+1] for i in range(p) for j in range(p) if B[i, j] != 0])
B_arcs_cd = pd.DataFrame([[i+1, j+1] for i in range(p) for j in range(p) if est[i, j] != 0])
print(B_arcs)
print(B_arcs_cd)
print(true_B)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

micodag-0.0.8.tar.gz (6.6 kB view details)

Uploaded Source

File details

Details for the file micodag-0.0.8.tar.gz.

File metadata

  • Download URL: micodag-0.0.8.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for micodag-0.0.8.tar.gz
Algorithm Hash digest
SHA256 b976ecff1e8869ebaa3f94c24628c004b3fea6f1408c0c8713e985813169fa29
MD5 0959ebcf517e370c7bed38ad8042ccf5
BLAKE2b-256 b8e468d6d1fceeeed676da85b178eca3e03b9f9d3f24929233479909a1779fc1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page