Когда я пробую этот метод с данными плотных векторов, он работает правильно, но с данными разреженных векторов выдает 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);
...
ArrayAdapterDatabaseConnection
поддерживает только плотные данные.DoubleVector
также является плотным типом данных. Есть ли шанс, что вы неверно истолковали форматdata
? - person Has QUIT--Anony-Mousse   schedule 20.01.2016double[]
— это плотный формат. Вы можете создать свой собственный источник данных или использовать источник данных Arff, или, или, или, ... но, в конце концов, k-means предполагает плотные данные с теоретической точки зрения. - person Has QUIT--Anony-Mousse   schedule 20.01.2016@data {1 X, 3 Y, 4 "class A"} {2 W, 4 "class B"}
, поэтому я используюarrlist.add(data)
. Когда я прекращаю чтение, я делаюinputMatrix = new double[arrlist.size()][arrlist.get(0).length]; inputMatrix = arrlist.toArray(inputMatrix);
, потому что в моей программе я не могу напрямую читать файл arff, мне нужно читать его постепенно. - person Wesin Alves   schedule 20.01.2016double[]
? Почему бы вам не включить весь этот код в вопрос? Кроме того, это похоже на категориальные данные, k-средние требуют непрерывных данных. - person Has QUIT--Anony-Mousse   schedule 20.01.2016runKmeans(inputMatrix);
- person Wesin Alves   schedule 20.01.2016double[][]
плотный, а вам нужны разреженные данные! Что бы вы ни делали (добавьте код подготовки к вашему вопросу, пожалуйста), вы не создаете разреженные векторы. - person Has QUIT--Anony-Mousse   schedule 20.01.2016toArray
), делает его, вероятно, неквадратным (из-за рваных массивов). Возможно, это вызывает ошибку. Убедитесь, что все строки имеют одинаковую длину (но опять же, это плотный формат, который вы используете). - person Has QUIT--Anony-Mousse   schedule 20.01.2016SparseDoubleVector
от Elki для хранения разреженных данных? - person Wesin Alves   schedule 20.01.2016