Я пытаюсь понять, как использовать класс EdgeSplitter
Stellargraph. В частности, примеры на документация по обучению модели предсказания ссылок на основе Node2Vec разбивает граф на следующие части:
Распределение сэмплов по наборам train, val и test
Следуя примерам в документации , сначала вы выбираете 10% ссылок полного графа, чтобы получить тестовый набор:
# Define an edge splitter on the original graph:
edge_splitter_test = EdgeSplitter(graph)
# Randomly sample a fraction p=0.1 of all positive links, and same number of negative links, from graph, and obtain the
# reduced graph graph_test with the sampled links removed:
graph_test, examples_test, labels_test = edge_splitter_test.train_test_split(
p=0.1, method="global"
)
Насколько я понял из документов, graph_test
- это исходный график, но с удаленными тестовыми ссылками. Затем вы выполняете ту же операцию с тренировочным набором,
# Do the same process to compute a training subset from within the test graph
edge_splitter_train = EdgeSplitter(graph_test)
graph_train, examples, labels = edge_splitter_train.train_test_split(
p=0.1, method="global"
)
Следуя предыдущей логике, graph_train
соответствует graph_test
с удаленными обучающими ссылками.
Насколько я понимаю, дальше по коду мы используем graph_train
для обучения внедрению и обучающим образцам (примеры, метки) для обучения классификатора. Итак, у меня есть несколько вопросов здесь:
- Почему мы используем непересекающиеся наборы обучающих данных для обучения разных частей модели? Разве мы не должны обучать и встраивание, и классификатор с полным обучающим набором ссылок?
- Почему набор тестов такой большой? Не лучше ли иметь большинство образцов в обучающем наборе?
- Как правильно использовать класс
EdgeSplitter
?
Заранее спасибо за вашу помощь!