1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jajupmochi-graphkit-learn

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Python-пакет graphkit-learn: описание и использование

graphkit-learn — это пакет Python для работы с графовыми ядрами, расстояниями редактирования графов и задачей прообраза графа.

Требования:

  • Python 3.6 и выше;
  • numpy 1.16.2 и выше;
  • scipy 1.1.0 и выше;
  • matplotlib 3.1.0 и выше;
  • networkx 2.2 и выше;
  • scikit-learn 0.20.0 и выше;
  • tabulate 0.8.2 и выше;
  • tqdm 4.26.0 и выше;
  • control 0.8.2 (только для обобщённых случайных блужданий, требует компилятор Fortran и BLAS/LAPACK);
  • slycot 0.3.3 (только для обобщённых случайных блужданий, требуется компилятор Fortran).

Как использовать?

  1. Установка библиотеки:

    • Установите стабильную версию из PyPI (может быть неактуальной):
      $ pip install graphkit-learn
    • Установите последнюю версию из GitHub:
      $ git clone https://github.com/jajupmochi/graphkit-learn.git
      $ cd graphkit-learn/
      $ python setup.py install
  2. Запуск теста: Для проверки корректности работы библиотеки выполните серию тестов:

    $ pip install -U pip pytest codecov coverage pytest-cov
    $ pytest -v --cov-config=.coveragerc --cov-report term --cov=gklearn gklearn/tests/
  3. Проверка примеров: Примеры использования библиотеки доступны на Google Colab и в папке example.

  4. Другие демонстрации: В каталоге notebooks можно найти дополнительные демонстрации:

    • В каталоге notebooks представлены тестовые коды графовых ядер на основе линейных паттернов;
    • В каталоге notebooks/tests находятся коды, проверяющие некоторые библиотеки и функции;
    • В каталоге notebooks/utils содержатся полезные инструменты, такие как проверка матрицы Грамма и функция для получения свойств наборов данных;
    • Каталог notebooks/else содержит другие коды, используемые для экспериментов.
  5. Документация: Документация по библиотеке доступна здесь.

  6. Основное содержание: Пакет предоставляет список графовых ядер:

    • Основанные на блужданиях:
      • Общее ядро блуждания;
      • Маргинализованное ядро с и без тотиринга;
      • Обобщённое ядро случайного блуждания с различными методами решения.
    • Основанные на путях:
      • Ядро кратчайшего пути. Ядро кратчайшего пути

kernel [4]

Нелинейные ядра:

Демонстрация расчёта ядер графа доступна на Google Colab и в папке examples.

2. Расстояния редактирования графа

3. Методы пред-образа графа

Демонстрацию генерации пред-образов графа можно найти на Google Colab и в папке examples.

4. Интерфейс к GEDLIB

GEDLIB — это легко расширяемая библиотека C++ для (субоптимального) вычисления расстояния редактирования графа между атрибутированными графами. В этой библиотеке интегрирован интерфейс Python для GEDLIB, основанный на библиотеке gedlibpy.

5. Методы оптимизации вычислений

  • Модуль Python multiprocessing.Pool применяется для распараллеливания вычислений всех ядер, а также выбора модели.
  • Метод быстрого вычисления ядра кратчайшего пути (FCSP) реализован в ядре случайного блуждания, ядре кратчайшего пути, а также в структурном ядре кратчайшего пути, где FCSP применяется как к вершинным, так и к рёберным ядрам.
  • Структура данных trie используется в ядре пути до длины h для хранения путей в графах.

Проблемы

  • Эта библиотека использует функцию multiprocessing.Pool.imap_unordered для распараллеливания, которая может не работать корректно в системе Windows. На данный момент пользователям Windows может потребоваться закомментировать параллельные коды и раскомментировать коды ниже них, которые выполняются последовательно. Мы рассмотрим возможность добавления параметра для управления последовательными или параллельными вычислениями по мере необходимости.

  • Некоторые модули (например, Numpy, Scipy, sklearn) применяют OpenBLAS для выполнения параллельных вычислений по умолчанию, что вызывает конфликты с другими модулями распараллеливания, такими как multiprossing.Pool, значительно увеличивая время вычислений. Установив его поток равным 1, OpenBLAS вынужден использовать один поток/CPU, что позволяет избежать конфликтов. На данный момент эту процедуру необходимо выполнять вручную. В Linux введите эту команду в терминале перед запуском кода:

$ export OPENBLAS_NUM_THREADS=1

Или добавьте export OPENBLAS_NUM_THREADS=1 в конец вашего файла ~/.bashrc, затем выполните:

$ source ~/.bashrc

чтобы сделать это эффективным навсегда.

Результаты

Подробное описание ядер графа и экспериментальных результатов см. в статье:

Linlin Jia, Benoit Gaüzère, and Paul Honeine. Graph Kernels Based on Linear Patterns: Theoretical and Experimental Comparisons. working paper or preprint, March 2019. URL https://hal-normandie-univ.archives-ouvertes.fr/hal-02053946.

Сравнение производительности ядер графа на эталонных наборах данных можно найти здесь.

Как внести свой вклад

Разветвите библиотеку и откройте запрос на вытягивание! Сделайте свой собственный вклад в сообщество!

Авторы

Если вы использовали graphkit-learn в своей публикации, пожалуйста, процитируйте следующую статью:

@article{JIA2021,
    title = "graphkit-learn: A Python Library for Graph Kernels Based on Linear Patterns",
    journal = "Pattern Recognition Letters",
    year = "2021",
    issn = "0167-8655",
    doi = "https://doi.org/10.1016/j.patrec.2021.01.003",
    url = "http://www.sciencedirect.com/science/article/pii/S0167865521000131",
    author = "Linlin Jia and Benoit Gaüzère and Paul Honeine",
    keywords = "Графовые ядра, линейные паттерны, реализация на Python",
    abstract = "В данной статье представлена graphkit-learn — первая библиотека Python для эффективного вычисления графовых ядер на основе линейных паттернов, способная работать с различными типами графов. Графовые ядра на основе линейных паттернов тщательно реализованы, каждое со своими специфическими методами вычислений, а также представлены два хорошо известных графовых ядра на основе нелинейных паттернов для сравнительного анализа. Поскольку вычислительная сложность является ахиллесовой пятой графовых ядер, мы предлагаем несколько стратегий для решения этой критической проблемы, включая параллелизацию, структуру данных trie и метод FCSP, который мы расширяем для других ядер и сравнения рёбер. Все предложенные стратегии экономят порядки величин времени вычислений и использования памяти. Более того, все графовые ядра можно просто вычислить с помощью одного оператора Python, что делает их привлекательными для исследователей и практиков. Для удобства использования предоставляется усовершенствованная процедура выбора модели как для задач регрессии, так и для классификации. Эксперименты на синтезированных наборах данных и 11 реальных наборах данных показывают актуальность предложенной библиотеки."
}

БЛАГОДАРНОСТИ

Это исследование было поддержано CSC (China Scholarship Council) и французским национальным исследовательским агентством (ANR) в рамках гранта APi (ANR-18-CE23-0014). Авторы хотели бы поблагодарить CRIANN (Le Centre Régional Informatique et d’Applications Numériques de Normandie) за предоставление вычислительных ресурсов.

ЛИТЕРАТУРА

[1] Thomas Gärtner, Peter Flach, и Stefan Wrobel. On graph kernels: Hardness results and efficient alternatives. Learning Theory and Kernel Machines, страницы 129–143, 2003.

[2] H. Kashima, K. Tsuda, и A. Inokuchi. Marginalized kernels between labeled graphs. В Proceedings of the 20th International Conference on Machine Learning, Вашингтон, округ Колумбия, США, 2003 г.

[3] Vishwanathan, S.V.N., Schraudolph, N.N., Kondor, R., Borgwardt, K.M., 2010. Graph kernels. Journal of Machine Learning Research 11, 1201–1242.

[4] K. M. Borgwardt и H.-P. Kriegel. Shortest-path kernels on graphs. В Proceedings of the International Conference on Data Mining, страницы 74–81, 2005.

[5] Liva Ralaivola, Sanjay J Swamidass, Hiroto Saigo, и Pierre Baldi. Graph kernels for chemical informatics. Neural networks, 18(8):1093–1110, 2005.

[6] Suard F, Rakotomamonjy A, Bensrhair A. Kernel on Bag of Paths For Measuring Similarity of Shapes. В ESANN 2007 Apr 25 (стр. 355–360).

[7] Mahé, P., Ueda, N., Akutsu, T., Perret, J.L., Vert, J.P., 2004. Extensions of marginalized graph kernels, в: Proc. the twenty-first international conference on Machine learning, ACM. стр. 70.

[8] Lifan Xu, Wei Wang, M Alvarez, John Cavazos, и Dongping Zhang. Parallelization of shortest path graph kernels on multi-core cpus and gpus. Proceedings of the Programmability Issues for Heterogeneous Multicores (MultiProg), Вена, Австрия, 2014 г.

[9] Edward Fredkin. Trie memory. Communications of the ACM, 3(9):490–499, 1960.

[10] Gaüzere, B., Brun, L., Villemin, D., 2012. Two new graphs kernels in chemoinformatics. Pattern Recognition Letters 33, 2038–2047.

[11] Shervashidze, N., Schweitzer, P., Leeuwen, E.J.v., Mehlhorn, K., Borgwardt, K.M., 2011. Weisfeiler-lehman graph kernels. Journal of Machine Learning Research 12, 2539–2561.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jajupmochi-graphkit-learn.git
git@api.gitlife.ru:oschina-mirror/jajupmochi-graphkit-learn.git
oschina-mirror
jajupmochi-graphkit-learn
jajupmochi-graphkit-learn
master