【发布时间】:2017-10-26 16:19:05
【问题描述】:
我正在使用 Weka 的 API 对一些数据进行分类。我使用 BayesNet 算法,因此需要对数据集中的数值进行离散化。我读过我需要在离散化测试数据集时使用训练数据集作为输入格式,以便离散化的训练和测试数据集兼容(https://weka.wikispaces.com/Discretizing+datasets)。我已经使用了过滤器:
weka.filters.supervised.attribute.Discretize.
这是我对测试数据集进行离散化的代码:
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 文件(有时只有一个实例)的测试数据。问题是当我使用不同的测试 arff 文件时,离散化不再起作用。例如,我有一个数字属性,当我离散化训练数据时得到 6 个区间,而当我离散化测试数据时它只得到 1 个区间,这当然会使训练和测试数据不兼容。有谁知道为什么会这样?我真的认为,当我在离散化测试数据时使用训练数据作为离散化过滤器的输入格式时,过滤器会创建与离散化训练数据时相同的间隔。
【问题讨论】: