В рамках моего исследования я заинтересован в распространении меток на графике. Меня особенно интересуют эти два метода:
- Сяоцзинь Чжу и Зубин Гахрамани. Обучение на помеченных и немаркированных данных с распространением меток. Технический отчет CMU-CALD-02-107, Университет Карнеги-Меллона, 2002 г. http://pages.cs.wisc.edu/~jerryzhu/pub/CMU-CALD-02-107.pdf
- Денйонг Чжоу, Оливье Буске, Томас Навин Лал, Джейсон Уэстон, Бернхард Шоелкопф. Обучение с локальной и глобальной согласованностью (2004) http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.115.3219
Я видел, что scikit-learn предлагает модель для этого. Однако предполагается, что эта модель будет применяться к векторным структурированным данным ( т.е. точкам данных).
Модель строит матрицу сродства из точек данных, используя ядро, а затем запускает алгоритм на построенной матрице. Я хотел бы иметь возможность напрямую вводить матрицу смежности моего графа вместо матрицы подобия.
Есть идеи, как этого добиться? Или вы знаете какую-либо библиотеку Python, которая позволит запускать распространение меток непосредственно на данных со структурой графа для двух вышеупомянутых методов?
Заранее спасибо за помощь!
scikit-learn
graphs
Тибо Мартинес
источник
источник
Ответы:
Отвечая на мой собственный вопрос, я надеюсь, что он будет полезен некоторым читателям.
Scikit-learn в первую очередь предназначен для работы с векторными данными. Следовательно, если вы хотите выполнять распространение меток / распространение меток на данных с графовой структурой, вам, вероятно, лучше переопределить метод самостоятельно, чем использовать интерфейс Scikit.
Вот реализация распространения меток и распространения меток в PyTorch.
Оба метода в целом следуют одним и тем же алгоритмическим шагам, с вариациями того, как нормализуется матрица смежности и как метки распространяются на каждом шаге. Поэтому давайте создадим базовый класс для наших двух моделей.
Модель принимает в качестве входных данных матрицу смежности графа, а также метки узлов. Метки представлены в виде вектора целого числа, указывающего номер класса каждого узла с -1 в положении немеченых узлов.
Алгоритм распространения метки представлен ниже.
От Сяоцзин Чжу и Зубина Гахрамани. Обучение на помеченных и немаркированных данных с распространением меток. Технический отчет CMU-CALD-02-107, Университет Карнеги-Меллона, 2002
Мы получаем следующую реализацию.
Алгоритм распространения меток:
От Денгён Чжоу, Оливье Буске, Томаса Навина Лала, Джейсона Уэстона, Бернхарда Шоелкопфа. Обучение с локальной и глобальной последовательностью (2004)
Реализация, следовательно, заключается в следующем.
Теперь давайте проверим наши модели распространения на синтетических данных. Для этого мы решили использовать граф пещерного человека .
Внедренные модели работают корректно и позволяют выявлять сообщества на графике.
Примечание. Представленные методы распространения предназначены для использования на неориентированных графах.
Код доступен в виде интерактивной записной книжки Jupyter здесь .
источник