gpt4 book ai didi

weka - 如何从命令行使用 weka 计算最近邻居?

转载 作者:行者123 更新时间:2023-12-03 01:33:50 27 4
gpt4 key购买 nike

我有一个 csv 文件,其中每一行都是代表数据点的数字向量。我想从命令行使用 weka 来计算 csv 文件中每个数据点的最近邻。我知道如何从命令行进行 k 最近邻分类,但这不是我想要的。我想要真正的邻居。我该怎么做?

我想使用 weka 而不是其他工具来完成此操作。

最佳答案

Weka 没有一个衬垫来执行我认为您建议的操作(摄取文件,将其转换为实例,然后找到每个实例的所有 N 个最近邻居)

但是您可以通过利用 Weka 和几行 Java 来设置命令行样式,如下所示:

Compile the following code. I used Eclipse, but you can just as easily use javac at the command line - just make sure that you have weka.jar in your classpath. I show you an example of how to call this as a one liner from the cammand line after the code below

import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.core.neighboursearch.LinearNNSearch;

public class WekaCLFindNN {
public static void main(String[] args) throws Exception {

//report that the code is running
System.out.println("Weka Command Line Find Nearest " + args[0] + " Neighbors for each Instance in " + args[1]); // Display the string.

//setup datasources, grab instances, and calculate the nearest neighbors
DataSource source = new DataSource(""+args[1]);
Instances instances = source.getDataSet();
weka.core.neighboursearch.LinearNNSearch knn = new LinearNNSearch(instances);

//cycle through the dataset and get instances for the nearestneighbors
for(int j=0;j<instances.numInstances();j++){
Instances nearestInstances= knn.kNearestNeighbours(instances.instance(j), Integer.parseInt(args[0]));

//cycle through the instances and printout the nearestneighbors
System.out.println("\n\n" + instances.instance(j));
for(int i =0;i<Integer.parseInt(args[0]);i++)
{
System.out.println("\n\t" + nearestInstances.instance(i));

}

}

//close the code
System.out.println("\n"+"Nearest Neighbors found"); // Display the string.

}
}

现在只需使用以下命令从命令行运行它。

java -cp weka.jar;. WekaCLFindNN numNN csvfile

这是它在我的机器上运行的屏幕截图。请注意,运行 java 时所在的目录中有 weka.jar 文件和 WekaCLFindNN 文件。另请注意,我在 Windows 下运行此程序,其中类路径分隔符是分号 (;) 如果您在 Linux 下运行此程序,则必须使用冒号 (:)

weka working from command line

你可以忽略关于数据库驱动程序的部分,这只是 Weka 向 stderr 抛出一些东西。但正如您所看到的,向量左对齐,并且它们最近的邻居按照您的要求列出。

如果你想要日志文件中的数据,只需这样执行

java -cp weka.jar;. WekaCLFindNN > outputlog

日志文件将如下所示,并注意它没有有关数据库的错误:

outputlog

虽然在原始实例数据集中同时拥有最近邻居及其索引会很好,但我检查了 kNearestNeighbours 方法,发现索引数据在报告之前就被丢弃了。如果您想要它,则必须继承 LinearNNSearch 类并编写一个输出实例和索引的新方法。

所以我希望这会有所帮助。不幸的是,Weka 没有提供开箱即用的功能,但您只需几行代码即可完成。

关于weka - 如何从命令行使用 weka 计算最近邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350506/

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