如何使用Encog NEAT网络进行无监督学习?

3

我想知道是否可以使用一种带有无监督学习的NEAT网络类型,利用Encog框架。我希望利用它们的自组织特性,因为我的系统没有季节性特征。据我所知,只看到使用NEAT进行监督训练的网络示例。


我原以为解决方案是 NeuralDataSet validationSet = new BasicNeuralDataSet(input,null);,但事实并非如此。它抛出了异常“尝试在空对象引用上调用接口方法' double[] org.encog.ml.data.MLData.getData()”。 - murt
1个回答

2

免责声明:我对机器学习和Encog的知识都很低。

我认为“boxes”例子实际上演示了使用Encog的NEAT能力进行无监督学习。

要进行无监督学习,实现CalculateScore接口,并在创建网络时将该评分评估器传递给NEATUtil.constructNEATTrainer(pop, score)

在此示例中,BoxesScore实现了该接口,并调用TrialEvaluation来计算适应度:

public double calculateFitness() {
    final double threshold = BoxesScore.EDGE_LEN * BoxesScore.SQR_LEN;
    double rmsd = Math.sqrt(this.accDistance / 75.0);
    double fitness;
    if(rmsd > threshold) {
        fitness = 0.0;
    } else {
        fitness = (((threshold-rmsd) * 100.0) / threshold) + (this.accRange / 7.5);
    }

    return fitness
}

你会从其余的代码中看到,结果并不是一些硬编码的测试用例和预期结果。
因此,只要你能定义解决方案的“适应度”是什么意思,就可以使用Encog的NEAT实现进行无监督学习。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接