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()