elki 中具有稀疏向量的 kmeans
kmeans with sparse vectors in elki
当我使用密集向量数据尝试此方法时,它 运行 正确,但使用稀疏向量数据时会抛出 java.lang.ArrayIndexOutOfBoundsException
。我可以使用什么数据源来正确读取稀疏向量数据?
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
只能 用于 dense 向量。您必须提供 square double[][]
数组。
您可以使用 FileBasedDatabaseConnection
和 ArffParser
来读取稀疏数据。或者您可以实现自己的 DatabaseConnection
,它只是一个方法,loadData()
.
DoubleVector
is a dense data type. SparseDoubleVector
是稀疏向量类型。为此,DoubleVector
使用密集的 double[]
数组作为后盾,而 SparseDoubleVector
使用具有非零维度的 int[]
加上具有非零值的 double[]
仅.
K-means 需要 一个固定的维度来分配平均向量(这些向量总是密集的),所以确保提供 VectorFieldTypeInformation
最大维度。有一个类型转换过滤器,可以简单地扫描一次数据集,并相应地设置维度。
当我使用密集向量数据尝试此方法时,它 运行 正确,但使用稀疏向量数据时会抛出 java.lang.ArrayIndexOutOfBoundsException
。我可以使用什么数据源来正确读取稀疏向量数据?
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
只能 用于 dense 向量。您必须提供 square double[][]
数组。
您可以使用 FileBasedDatabaseConnection
和 ArffParser
来读取稀疏数据。或者您可以实现自己的 DatabaseConnection
,它只是一个方法,loadData()
.
DoubleVector
is a dense data type. SparseDoubleVector
是稀疏向量类型。为此,DoubleVector
使用密集的 double[]
数组作为后盾,而 SparseDoubleVector
使用具有非零维度的 int[]
加上具有非零值的 double[]
仅.
K-means 需要 一个固定的维度来分配平均向量(这些向量总是密集的),所以确保提供 VectorFieldTypeInformation
最大维度。有一个类型转换过滤器,可以简单地扫描一次数据集,并相应地设置维度。