首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Encog查询分类

Encog查询分类
EN

Stack Overflow用户
提问于 2014-05-24 11:51:03
回答 1查看 845关注 0票数 2

我正在尝试使用Encog处理此数据集。为了做到这一点,我将输出组合成一个(似乎无法弄清楚如何使用多个预期输出,即使是我试图用4个输出神经元手动训练NN )和值:"disease1“、"disease2”、"none“和”二者“。

从那里开始,在CSV中使用分析师向导,自动过程用预期的输出训练一个NN。文件中的一个峰值:

代码语言:javascript
复制
"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,both
41.2,no,yes,yes,no,yes,second,second

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

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

编辑:我发现的解决方案是为疾病1和疾病2使用一个单独的网络,但我真的很想知道是否有可能将它们结合在一起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 15:59:34

您是正确的,您将需要将输出列组合为单个值。Encog分析师将只对一个输出列进行分类。输出列可以有许多不同的值。因此,将两个输出列正常化为none,第一,第二,两者都能工作。如果你直接使用底层神经网络,你实际上可以训练两个输出,每个输出做一个独立的分类。但在这次讨论中,我将假设我们是在与分析师打交道。

您是使用工作台查询网络,还是使用代码查询网络?默认情况下,Encog分析师使用等边编码对神经网络进行编码。这导致输出神经元数等于n-1,其中n是类的数目。如果您在分析向导中选择一个n个编码,那么BasicNetwork上的常规分类方法就会工作,因为它只为n中的一个设计。

如果要使用等边查询(在代码中),则可以使用类似以下方法。我将此添加到下一个版本的Encog中。

代码语言:javascript
复制
/**
 * Used to classify a neural network that has been encoded using equilateral encoding.
 * This is the default for the Encog analyst. Equilateral encoding uses an output count
 * equal to the number of classes minus one.  
 * @param input The input to the neural network.
 * @param high The high value of the activation range, usually 1.
 * @param low The low end of the normalization range, usually -1 or 0. 
 * @return The class that the input belongs to.
 */
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());
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23844676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档