Мы живем в захватывающее время, когда обнаруживаем связанность данных и представляем интегрированные данные в виде графиков. Пока мы разрабатываем варианты использования науки о данных, которые находят новые применения, я хотел бы упомянуть один, который недавно пришел мне на ум. Здесь используется так называемый «линейный график» графика.
Линейный графграфа 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/, чтобы предсказать класс(ы) для входящего узла(ов).
Точно так же, если пользователи заинтересованы в классификации отношений в графе, а также в прогнозировании классов для входящих ребер, можно было бы добавить префикс построения линейных графов к конвейеру классификации узлов. Необходимые шаги будут выглядеть следующим образом:
- Ввод/дополнение графа новыми узлами и/ребрами.
- Найти/обновить линейный график графика.
- Примените этап классификации узлов (обучение/тестирование/предсказание).
Случаи использования классификации ребер пригодятся, когда кто-то пытается классифицировать ребра на два или более наборов, каждый набор качественно описывает силу отношений, находятся ли они между очень влиятельными узлами, насколько слабы или сильны отношения и т. д.
Ниже приведен рабочий процесс шифровального запроса для создания линейного графика графика и проведения аналитики узлов графика на линейном графике.
// Запросы шифрования для создания линейного графика графика с меткой узла (: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;