gpt4 book ai didi

java - 提取用于 Weka 多层感知器标准化的值

转载 作者:行者123 更新时间:2023-11-30 09:38:24 25 4
gpt4 key购买 nike

我有一个机器学习方案,其中我使用 Weka 的 java 类在 matlab 脚本中实现机器学习。然后,我将分类器的模型上传到数据库,因为我需要在不同的机器上使用不同的语言 (obj-c) 执行分类。网络的评估编程起来相当简单,但我需要 WEKA 在训练前用来标准化数据集的值,以便我可以在稍后的网络评估中使用它们。有谁知道如何获得 weka 用于训练多层感知器网络的归一化因子?我更喜欢用 Java 来回答。

最佳答案

在深入研究 WEKA 源代码和文档之后...这就是我得出的结论。尽管 WEKA 中有一个名为“Normalize”的过滤器,但多层感知器并不使用它,而是在内部使用了一些如下所示的代码。

m_attributeRanges = new double[inst.numAttributes()];
m_attributeBases = new double[inst.numAttributes()];
for (int noa = 0; noa < inst.numAttributes(); noa++) {
min = Double.POSITIVE_INFINITY;
max = Double.NEGATIVE_INFINITY;
for (int i=0; i < inst.numInstances();i++) {
if (!inst.instance(i).isMissing(noa)) {
value = inst.instance(i).value(noa);
if (value < min) {
min = value;
}
if (value > max) {
max = value;
}
}
}

m_attributeRanges[noa] = (max - min) / 2;
m_attributeBases[noa] = (max + min) / 2;
if (noa != inst.classIndex() && m_normalizeAttributes) {
for (int i = 0; i < inst.numInstances(); i++) {
if (m_attributeRanges[noa] != 0) {
inst.instance(i).setValue(noa, (inst.instance(i).value(noa)
- m_attributeBases[noa]) /
m_attributeRanges[noa]);
}
else {
inst.instance(i).setValue(noa, inst.instance(i).value(noa) -
m_attributeBases[noa]);
}

因此,我需要传输到我试图用来评估该网络的其他系统的唯一值是最小值和最大值。对我来说幸运的是,过滤器 weka.filters.unsupervised.attribute.Normalize 上有一个方法,它返回已处理数据集的最小值和最大值的 double 组。然后我所要做的就是告诉多层感知器不要自动标准化我的数据,并使用过滤器单独处理它,这样我就可以提取最小值和最大值,连同权重和其他所有内容一起发送到数据库。

关于java - 提取用于 Weka 多层感知器标准化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18365312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com