Skip to content
forked from ysig/GraKeL

A scikit-learn compatible library for graph kernels

License

Notifications You must be signed in to change notification settings

kalofoli/GraKeL

 
 

Repository files navigation

GraKeL: A library for graph kernels

Pypi Versions Coverage Status Travis Status Appveyor status CircleCI Status

GraKeL is a library compatible with the project of scikit-learn

Installation

The GraKeL library requires:

  • Python (>=2.7, >=3.5)
  • NumPy (>=1.8.2)
  • SciPy (>=0.13.3)
  • Cython (>=0.27.3)
  • cvxopt (>=1.2.0) [optional: lovasz]
  • future (>=0.16.0) (for python 2.7)

Installing Dependencies

You can install the dependencies as follows:

$ pip install extension>=extension_version

or

$ pip install -r requirements.txt

Installing the development-version

To install the development-version using pip execute:

$ pip install grakel-dev

Getting Started

To learn how to use the GraKeL api as a user, please read the documentation on sections Introduction and A longer introduction (in case your are full of curiosity).

Initialise a Kernel

from grakel import GraphKernel
wl_subtree = GraphKernel(kernel=['WL', 'ST-WL'], normalize=True)

Provide Input

  • Custom Input

    H2O = [[(0, 1), (0, 2), (2, 0), (1, 0)], # Directed Graph
           {0: 'O', 1: 'H', 2: 'H'}] # Node Labels
    H3O = [[(0, 1), (0, 2), (0, 3), (3, 0), (2, 0), (1, 0)], # Directed Graph
           {0: 'O', 1: 'H', 2: 'H', 3:'H'}]] # Node Labels
    X = [H2O, H3O] # List of Graph-Like Objects
  • Download a Dataset

    from grakel.datasets import fetch_dataset
    MUTAG = fetch_dataset("MUTAG")
    X = MUTAG.data # MUTAG.target contains class labels

Calculate Kernel Matrix

   K = wl_subtree.fit_transform(X) # len(X) x len(X): symmetric

Testing

You first need to build the package's c++ extensions locally by executing:

$ python setup.py build_ext -i

To test the package, execute:

$ nosetests

For executing unit_tests or use a testing-interface for testing the kernel module:

$ python  grakel/tests/test_kernels.py --help
usage: test_kernels.py [-h] [--verbose] [--problematic] [--slow]
                       [--ignore_warnings] [--dataset DATASET] [--normalize]
                       [--develop | --all | --main]

A test file for all kernels

optional arguments:
  -h, --help         show this help message and exit
  --verbose          print kernels with their outputs on stdout
  --problematic      allow execution of problematic test cases in development
  --slow             allow execution of slow test cases in development
  --ignore_warnings  ignore warnings produced by kernel executions
  --dataset DATASET  chose the datset you want the tests to be executed
  --normalize        normalize the kernel output
  --develop          execute only tests connected with current development
  --all              execute all tests
  --main             execute the main tests [default]

For testing graph_kernels:

$ python grakel/tests/test_graph_kernel.py --help
usage: test_graph_kernels.py [-h] [--verbose] [--problematic] [--slow]
                             [--normalize] [--ignore_warnings]
                             [--dataset DATASET] [--develop | --all | --main]

A test file for all kernels

optional arguments:
  -h, --help         show this help message and exit
  --verbose          print kernels with their outputs on stdout
  --problematic      allow execution of problematic test cases in development
  --slow             allow execution of slow test cases in development
  --normalize        normalize the kernel output
  --ignore_warnings  ignore warnings produced by kernel executions
  --dataset DATASET  chose the datset you want the tests to be executed
  --develop          execute only tests connected with current development
  --all              execute all tests
  --main             execute the main tests [default]

And for testing the Graph class:

$ python grakel/tests/test_graph.py --help
usage: test_graph.py [-h] [--verbose] [--ignore_warnings]

A test file for all `Graph` type objects

optional arguments:
  -h, --help         show this help message and exit
  --verbose          verbose outputs on stdout
  --ignore_warnings  ignore warnings produced by kernel executions

You can also execute the kernel test locally through a test-main-function as

$ python -m grakel.tests

Contributing

To learn how to integrate your own kernel and how to contribute to the GraKeL project, please read the sections Write your own kernel and Contributing in the Documentation, respectively.

License

GraKeL comes with a BSD 3-clause license (as with scikit-learn). It contains the C++ source code of BLISS (a library for graph isomorphism) which is LGPL licensed. Futhermore its optional dependency in the package of cvxopt (a tool for solving convex-optimization problems) comes with a GPL license.

Citation

If you use GraKeL in a scientific publication, please cite our paper:

@article{siglidis2018grakel,
  title={GraKeL: A Graph Kernel Library in Python},
  author={Siglidis, Giannis and Nikolentzos, Giannis and Limnios, Stratis and Giatsidis, Christos and Skianis, Konstantinos and Vazirgiannis, Michalis},
  journal={arXiv preprint arXiv:1806.02193},
  year={2018}
}

About

A scikit-learn compatible library for graph kernels

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 72.3%
  • C++ 25.9%
  • Other 1.8%