首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试数据集的离散化

测试数据集的离散化
EN

Stack Overflow用户
提问于 2017-10-25 20:40:14
回答 1查看 400关注 0票数 0

我正在使用Weka的API对一些数据进行分类。我使用BayesNet算法,因此需要对数据集中的数值进行离散化。我读到,在离散化测试数据集时,我需要使用训练数据集作为输入格式,以便离散化的训练数据集和测试数据集是兼容的(https://weka.wikispaces.com/Discretizing+datasets)。我已经使用了过滤器:

代码语言:javascript
复制
weka.filters.supervised.attribute.Discretize.

这是我的测试数据集离散化代码:

代码语言:javascript
复制
private Instances filterData(Instances testData) {      
    int[] discIndices = {0,2,5,6}; //indices of numeric attributes

    Discretize discFilter = new Discretize();       

    try {           
        discFilter.setAttributeIndicesArray(discIndices);
        discFilter.setInputFormat(trainingData); // notice that the traning data is used as input format

        return Filter.useFilter(testData, discFilter);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

当我使用相同的arff文件进行训练和测试时,一切工作正常。但当然,我想使用来自不同(测试) arff文件的测试数据(有时只有一个实例).The问题是,当我使用不同的测试arff文件时,字典不再起作用。例如,我有一个数值属性,当我离散化训练数据时,它会得到6个间隔,而当我离散化测试数据时,它只会得到1个间隔,这当然会使训练数据和测试数据不兼容。有人知道为什么会这样吗?我真的认为,当我使用训练数据作为离散化过滤器的输入格式时,当离散化测试数据时,过滤器将创建与离散化训练数据相同的间隔。

EN

回答 1

Stack Overflow用户

发布于 2017-10-26 16:19:06

我发现应该使用以下代码对单个测试实例进行离散化:

代码语言:javascript
复制
discFilter.input(instance);
Instance filteredInstance = discFilter.output();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46932704

复制
相关文章

相似问题

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