17.5.14 例: Movielensデータセットへのエッジ埋込みの計算
この項では、Movielensグラフを例として使用し、PGXでの
UnsupervisedEdgeWise
の使用方法について説明します。
このデータ・セットは、1682本の映画に対する943人のユーザーからの100,000の評価(1-5)で構成され、ユーザー(年齢、性別、職業)および映画(年、増悪、ジャンル)に関する単純な統計情報があります。ユーザーおよび映画は頂点ですが、映画に対するユーザーの評価はrating
特徴を持つエッジです。
次の例では、UnsupervisedEdgeWise
モデルを使用して評価を予測します。最初にモデルを構築し、trainGraph
に適合します。
opg4j> var convLayer = analyst.graphWiseConvLayerConfigBuilder().
setNumSampledNeighbors(10).
build()
opg4j> var model = analyst.unsupervisedEdgeWiseModelBuilder().
setVertexInputPropertyNames("movie_year", "avg_rating", "movie_genres", // Movies features
"user_occupation_label", "user_gender", "raw_user_age"). // Users features
setEdgeInputPropertyNames("user_rating").
setConvLayerConfigs(convLayer).
setNumEpochs(10).
setEmbeddingDim(32).
setLearningRate(0.003).
setStandardize(true).
setNormalize(false). //recommended
setSeed(0).
build()
opg4j> model.fit(trainGraph)
GraphWiseConvLayerConfig convLayer = analyst.graphWiseConvLayerConfigBuilder()
.setNumSampledNeighbors(10)
.build();
UnsupervisedEdgeWiseModel model = analyst.unsupervisedEdgeWiseModelBuilder()
.setVertexInputPropertyNames("movie_year", "avg_rating", "movie_genres", // Movies features
"user_occupation_label", "user_gender", "raw_user_age") // Users features
.setEdgeInputPropertyNames("user_rating")
.setConvLayerConfigs(convLayer)
.setNumEpochs(10)
.setEmbeddingDim(32)
.setLearningRate(0.003)
.setStandardize(true)
.setNormalize(false) //recommended
.setSeed(0)
.build();
model.fit(trainGraph);
conv_layer_config = dict(num_sampled_neighbors=10)
conv_layer = analyst.graphwise_conv_layer_config(**conv_layer_config)
params = dict(conv_layer_config=[conv_layer],
vertex_input_property_names=["movie_year", "avg_rating", "movie_genres",
"user_occupation_label", "user_gender", "raw_user_age"],
edge_input_property_names=["user_rating"],
num_epochs=10,
embedding_dim=32,
learning_rate=0.003,
normalize=False, #recommended
seed=0)
model = analyst.unsupervised_edgewise_builder(**params)
model.fit(train_graph)
EdgeWise
は帰納的であるため、表示されないエッジの評価を推測できます:
opg4j> var embeddings = model.inferEmbeddings(fullGraph, testEdges)
opg4j> embeddings.head().print()
PgxFrame embeddings = model.inferEmbeddings(fullGraph,testEdges);
embeddings.head().print();
embeddings = model.infer_embeddings(full_graph, test_edges)
embeddings.print()