Мы живем в захватывающее время, когда обнаруживаем связанность данных и представляем интегрированные данные в виде графиков. Пока мы разрабатываем варианты использования науки о данных, которые находят новые применения, я хотел бы упомянуть один, который недавно пришел мне на ум. Здесь используется так называемый «линейный график» графика.

Линейный графграфа G, обозначаемый как L(G), — это простой граф (граф без параллельных ребер), вершины которого являются ребрами G, а две вершины L(G) иметь ребро между ними, если их соответствующие ребра в графе смежны. Некоторые примеры и результаты, относящиеся к линейным графикам, можно найти здесь https://mathworld.wolfram.com/LineGraph.html. Один примечательный результат заключается в следующем: линейный граф эйлерова графа является одновременно эйлеровым и гамильтоновым.

Связь между линейными графами и кластеризацией ребер в науке о данных теперь будет довольно простой. Вот оно. Вложения узлов — это способ представления узлов в виде векторов. Эти векторы фиксируют топологию сети. Вложения основаны на понятии подобия, и некоторые подходы, такие как GraphSAGE, используют числовые векторы на узлах вместе с близостью, определяемой топологией графа, для вычисления вложений узлов. Вложения узлов используются в задачах прогнозирования машинного обучения, таких как классификация входящих новых узлов. Реализация GraphSAGE, которая будет работать для крупномасштабных сетей, доступна в библиотеке Graph Data Science от neo4j: https://neo4j.com/developer/graph-data-science/graph-embeddings/. Как только свойства узла будут обогащены вложениями узлов, можно использовать конвейеры классификации узлов, такие как https://neo4j.com/docs/graph-data-science/current/machine-learning/nodeclassification-pipelines/, чтобы предсказать класс(ы) для входящего узла(ов).

Точно так же, если пользователи заинтересованы в классификации отношений в графе, а также в прогнозировании классов для входящих ребер, можно было бы добавить префикс построения линейных графов к конвейеру классификации узлов. Необходимые шаги будут выглядеть следующим образом:

  1. Ввод/дополнение графа новыми узлами и/ребрами.
  2. Найти/обновить линейный график графика.
  3. Примените этап классификации узлов (обучение/тестирование/предсказание).

Случаи использования классификации ребер пригодятся, когда кто-то пытается классифицировать ребра на два или более наборов, каждый набор качественно описывает силу отношений, находятся ли они между очень влиятельными узлами, насколько слабы или сильны отношения и т. д.

Ниже приведен рабочий процесс шифровального запроса для создания линейного графика графика и проведения аналитики узлов графика на линейном графике.

// Запросы шифрования для создания линейного графика графика с меткой узла (:Node) с типом отношения [:Rel_of_Interest]

// https://mathworld.wolfram.com/LineGraph.html

// Разделить каждое интересующее ребро

// https://mathworld.wolfram.com/GraphSubdivision.html

ПОИСКПОЗ (n:Узел) -[e:Rel_of_Interest]-> (m:Узел)

СОЗДАТЬ (ln:LineGraph_Node)

// Установите для любых свойств [e] значение (ln:LineGraph_Node) для проведения аналитики здесь

CREATE (ln) -[:Subdivided_Rel]-> (n)

CREATE (ln) -[:Subdivided_Rel]-> (m);

// Для каждой пары смежных [:Rel_of_Interest] ссылок создаем смежность между соответствующими узлами (:LineGraph_Node)

ПОИСКПОЗ (ln1:LineGraph_Node) → (:Node) ← (ln2:LineGraph_Node) ГДЕ id(s1) ‹ id(s2)

CREATE (ln1) -[:LineGraph_Rel]-> (ln2);

// Выполняем любую аналитику узла графа на (:LineGraph_Node) -[:LineGraph_Edge]-> (:LineGraph_Node) графе

// Сохраняем результаты в LineGraph_Node

// Эквивалентно проведению анализа ребер графа на графе (:Node) -[:Rel_of_Interest]-> (:Node)

// Отбрасываем линейный график

ПОИСКПОЗ (ln: LineGraph_Node) DETACH DELETE ln;