gpt4 book ai didi

java - elki 中具有稀疏 vector 的 kmeans

转载 作者:行者123 更新时间:2023-11-30 10:50:58 25 4
gpt4 key购买 nike

当我对密集 vector 数据尝试此方法时,它运行正确,但对稀疏 vector 数据抛出 java.lang.ArrayIndexOutOfBoundsException。我可以使用什么数据源来正确读取稀疏 vector 数据?

public void runKmeans(double[][] data) {
ArrayAdapterDatabaseConnection dataArray = new ArrayAdapterDatabaseConnection(data);

ListParameterization params = new ListParameterization();
params.addParameter(AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dataArray);

Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, params);
db.initialize();


// Parameterization
//params = new ListParameterization();
params = new ListParameterization();
params.addParameter(KMeans.K_ID, k);
params.addParameter(KMeans.SEED_ID, 0);


// setup Algorithm
KMeansOutlierDetection<DoubleVector> kmeansAlg = ClassGenericsUtil.parameterizeOrAbort(KMeansOutlierDetection.class, params);
//testParameterizationOk(params);

// run KMEANS on database
OutlierResult result = kmeansAlg.run(db);
...

最佳答案

类(class)ArrayAdapterDatabaseConnection 只能用于密集 vector 。您必须提供一个正方形 double[][] 数组。

您可以使用 FileBasedDatabaseConnectionArffParser 来读取稀疏数据。或者您可以实现自己的 DatabaseConnection ,它只是一个方法,loadData()

DoubleVector是一种密集数据类型。 SparseDoubleVector是稀疏 vector 类型。为此,DoubleVector 使用密集的 double[] 数组作为后盾,而 SparseDoubleVector 使用 int[]具有非零维度,加上一个 double[] 具有非零值 only

K-means 需要一个固定的维度来分配平均 vector (这些 vector 总是密集的),所以确保提供一个具有最大维度的VectorFieldTypeInformation。有一个类型转换过滤器,它只需扫描一次数据集,然后相应地设置维度。

关于java - elki 中具有稀疏 vector 的 kmeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34875729/

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