Я пишу код Java для обнаружения вредоносных программ с использованием методов сбора данных (кластеризация kmeans). Я использую библиотеку jnetpcap для обнюхивания пакетов для ее анализа, затем в методе nextpacket
Я пишу алгоритм кластеризации kmeans для первого пакета.weka java code kmeans clustering
Алгоритм работает хорошо, так как он создает объекты класса Instances
с конкретными атрибутами, которые будут основываться на них на кластере, но на следующем пакете этот код не может быть запущен снова, поскольку он генерирует исключение.
код, я использую это:
for(int dim = 0; dim < numDimensions; dim++)
{
Attribute current = new Attribute("Attribute" + dim , dim);
if(dim == 0)
{
for(int obj = 0; obj < numInstances; obj++)
{
// instances.add(new SparseInstance(numDimensions));
instances.add(new DenseInstance(numDimensions));
}
}
for(int obj = 0; obj < numInstances; obj++)
{
instances.get(obj).setValue(current, (Double)data[dim+1][obj]);
}
atts.add(current);
}
Instances newDataset = new Instances("Dataset" , atts, instances.size()); //this is the line that throws the exception
for(Instance inst : instances)
newDataset.add(inst);
SimpleKMeans kMeans = new SimpleKMeans();
kMeans.setNumClusters(2);
// kMeans.setMaxIterations(4);
kMeans.buildClusterer(newDataset);
// int clusterNumbers;
// clusterNumbers=kMeans.numberOfClusters();
for (int j=0;j<numInstances;j++)
{
int classif=kMeans.clusterInstance(newDataset.get(j));
// double []distr=kMeans.distributionForInstance(newDataset.firstInstance());
System.out.println(classif);
// System.out.println(distr[0]);
// System.out.println(distr[1]);
ArrayList<Double> temp5=flowFeatures.get((JFlowKey)data[0][j]);
if (classif==0)
{
// instances0.add(newDataset.get(j));
instance0FlowFeatures.put((JFlowKey)data[0][j], temp5);
}
else if(classif==1)
{
//instances1.add(newDataset.get(j));
instance1FlowFeatures.put((JFlowKey)data[0][j], temp5);
}
}
И исключение я вижу это:
java.lang.IllegalArgumentException: Attribute names are not unique! Causes: 'Attribute0' 'Attribute1' 'Attribute2' 'Attribute3' 'Attribute4' 'Attribute5' 'Attribute6' 'Attribute7' 'Attribute0' 'Attribute1' 'Attribute2' 'Attribute3' 'Attribute4' 'Attribute5' 'Attribute6' 'Attribute7'
Может кто-нибудь, пожалуйста, помогите мне, пожалуйста?
Где произносится 'atts'? Вы очищаете или создаете новый экземпляр каждый раз? Если вы этого не сделаете, у вас будут повторяющиеся атрибуты, добавленные в 'atts' каждый раз, когда вы пройдете этот первый цикл for-loop. –
Как я могу очистить atts? –