Encog查询分类

我正在尝试使用Encog处理这个数据集。为此,我将输出合并为一个(我似乎无法弄清楚如何使用多个预期输出,尽管我尝试过手动训练一个具有4个输出神经元的NN,但没有成功),使用的值为:“disease1”、“disease2”、“none”和“both”。

从那里开始,我在CSV中使用了分析师向导,自动过程训练了一个具有预期输出的NN。文件中的一个片段如下:

"field:1","field:2","field:3","field:4","field:5","field:6","field:7","Output:field:7"40.5,yes,yes,yes,yes,no,both,both41.2,no,yes,yes,no,yes,second,second

现在我的问题是:我该如何查询它?我尝试使用分类,但据我所知,结果只给我{0,1,2}的值,所以有两个类别我无法区分(两者都是0)。

这个问题同样适用于wiki中介绍的Iris示例。此外,Encog是如何从输出神经元值推断出0/1/2结果的?

编辑:我找到的解决方案是为disease 1和disease 2使用单独的网络,但我真的很想知道是否可以将它们合并为一个。


回答:

你说的对,你需要将输出列合并为一个值。Encog分析师只能对单个输出列进行分类。该输出列可以有许多不同的值。因此,将两个输出列标准化为none、first、second、both是可行的。如果你直接使用底层神经网络,你实际上可以训练两个输出,每个输出进行独立分类。但在本讨论中,我假设我们处理的是分析师。

你是使用工作台还是在代码中查询网络?默认情况下,Encog分析师使用等边编码对神经网络进行编码。这会导致输出神经元的数量等于n-1,其中n是类别的数量。如果你在分析师向导中选择了one-of-n编码,那么BasicNetwork上的常规分类方法将有效,因为它仅适用于one-of-n。

如果你想使用等边编码进行查询(在代码中),你可以使用类似于下面的方法。我将在Encog的下一个版本中添加这个功能。

/** * 用于对使用等边编码的神经网络进行分类。 * 这是Encog分析师的默认设置。等边编码使用输出数量等于类别数量减一。   * @param input 神经网络的输入。 * @param high 激活范围的高值,通常为1。 * @param low 归一化范围的低端,通常为-1或0。  * @return 输入所属的类别。 */public int classifyEquilateral(final MLData input,double high, double low) {    MLData result = this.compute(input);    Equilateral eq = new Equilateral(getOutputCount()+1,high,low);    return eq.decode(result.getData());}

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注