17.6.3 Advanced Hyperparameter Customization
You can build an Unsupervised Anomaly Detection GraphWise model using rich
hyperparameter customization.
This is implemented using the sub-config
classes, GraphWiseConvLayerConfig
and
GraphWiseEmbeddingConfig
, as shown in the following code.
The example also specifies a weight decay parameter of
0.001
and dropout with dropping probability
0.5
for the model to counteract overfitting. The Dominant
embedding layer's alpha value is specified as 0.6 to slightly increase the
importance of the feature reconstruction.
opg4j> var weightProperty = analyst.pagerank(trainGraph).getName()
opg4j> var convLayerConfig = analyst.graphWiseConvLayerConfigBuilder().
setNumSampledNeighbors(25).
setActivationFunction(ActivationFunction.TANH).
setWeightInitScheme(WeightInitScheme.XAVIER).
setWeightedAggregationProperty(weightProperty).
setDropoutRate(0.5).
build()
opg4j> var predictionLayerConfig = analyst.graphWisePredictionLayerConfigBuilder().
setHiddenDimension(8).
setActivationFunction(ActivationFunction.RELU).
build()
opg4j> var dominantConfig = analyst.graphWiseDominantLayerConfigBuilder().
setDecoderLayerConfigs(predictionLayerConfig).
setAlpha(0.6).
build()
opg4j> var model = analyst.unsupervisedAnomalyDetectionGraphWiseModelBuilder().
setVertexInputPropertyNames("vertex_features").
setConvLayerConfigs(convLayerConfig).
setEmbeddingConfig(dominantConfig).
setWeightDecay(0.001).
setEmbeddingDim(256).
setLearningRate(0.05).
setNumEpochs(30).
setSeed(42).
setShuffle(false).
setStandardize(true).
setBatchSize(64).
build()
String weightProperty = analyst.pagerank(trainGraph).getName()
GraphWiseConvLayerConfig convLayerConfig = analyst.graphWiseConvLayerConfigBuilder()
.setNumSampledNeighbors(25)
.setActivationFunction(ActivationFunction.TANH)
.setWeightInitScheme(WeightInitScheme.XAVIER)
.setWeightedAggregationProperty(weightProperty)
.setDropoutRate(0.5)
.build();
GraphWisePredictionLayerConfig predictionLayerConfig = analyst.graphWisePredictionLayerConfigBuilder()
.setHiddenDimension(8)
.setActivationFunction(ActivationFunction.RELU)
.build();
GraphWiseEmbeddingConfig dominantConfig = analyst.graphWiseDominantLayerConfigBuilder()
.setDecoderLayerConfigs(predictionLayerConfig)
.setAlpha(0.6)
.build();
UnsupervisedAnomalyDetectionGraphWiseModel model = analyst.unsupervisedAnomalyDetectionGraphWiseModelBuilder()
.setVertexInputPropertyNames("vertex_features")
.setEmbeddingConfig(dominantConfig)
.setConvLayerConfigs(convLayerConfig)
.setWeightDecay(0.001)
.setEmbeddingDim(256)
.setLearningRate(0.05)
.setNumEpochs(30)
.setSeed(42)
.setShuffle(false)
.setStandardize(true)
.setBatchSize(64)
.build();
weightProperty = analyst.pagerank(train_graph).name
conv_layer_config = dict(num_sampled_neighbors=25,
activation_fn='tanh',
weight_init_scheme='xavier',
neighbor_weight_property_name=weightProperty,
dropout_rate=0.5)
conv_layer = analyst.graphwise_conv_layer_config(**conv_layer_config)
dominant_config = dict(alpha=0.6)
dominant_layer = analyst.graphwise_dominant_layer_config(**dominant_config)
params = dict(conv_layer_config=[conv_layer],
embedding_config=dominant_layer,
vertex_input_property_names=["vertex_features"],
weight_decay=0.001,
layer_size=256,
learning_rate=0.05,
num_epochs=30,
seed=42,
standardize=true,
batch_size=64
)
model = analyst.unsupervised_anomaly_detection_graphwise_builder(**params)