Example usage for weka.core Instances remove

List of usage examples for weka.core Instances remove

Introduction

In this page you can find the example usage for weka.core Instances remove.

Prototype



@Override
public Instance remove(int index) 

Source Link

Document

Removes the instance at the given position.

Usage

From source file:cn.ict.zyq.bestConf.bestConf.BestConf.java

License:Open Source License

protected Instances runExp(Instances samplePoints, int round, String postfix, boolean resuming) {
    Instances retval = null;
    try {/*from   w  w w.j  a v  a 2 s .  com*/
        //DataIOFile.saveDataToArffFile("data/zyqTestRange.arff", samplePoints);

        if (resuming) {
            samplePoints = manager.collectPerfs(samplePoints, perfAttName);
        }

        retval = manager.runExp(samplePoints, perfAttName);
        //we output the result set for future debugging and testing purposes
        DataIOFile.saveDataToArffFile("data/trainingBestConf" + round + "_" + postfix + ".arff", samplePoints);

        //evict all bad configurations
        Attribute perfAtt = retval.attribute(perfAttName);
        Iterator<Instance> itr = retval.iterator();
        ArrayList<Integer> toRemove = new ArrayList<Integer>();
        Instance next;
        while (itr.hasNext()) {
            next = itr.next();
            if (next.value(perfAtt) == -1)
                toRemove.add(retval.indexOf(next));
        }
        while (!toRemove.isEmpty())
            retval.remove(toRemove.remove(0));
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (allInstances == null) {
        allInstances = new Instances(retval);
    } else {
        allInstances.addAll(retval);
    }

    return retval;
}

From source file:cn.ict.zyq.bestConf.bestConf.sampler.ConfigSampler.java

License:Open Source License

public Instances getMultiDimContinuous(ArrayList<Attribute> atts, int sampleSetSize, boolean useMid,
        BestConf bestconf) {/* www.java  2  s . co m*/
    Instances retval = sampleMultiDimContinuous(atts, sampleSetSize, useMid), temp;
    while (retval.size() < sampleSetSize) {
        temp = sampleMultiDimContinuous(atts, sampleSetSize, useMid);
        retval.addAll(temp);
    }

    //make sure the set size is equal to the setting
    while (retval.size() > sampleSetSize)
        retval.remove(retval.size() - 1);

    return retval;
}

From source file:cyber009.udal.functions.StatisticalAnalysis.java

/**
 * /*  w  ww  .j ava2  s.c om*/
 * @param classifier
 * @param trainingDataSet
 * @param unLabelDataSets
 * @param unLabelSet
 * @param classTarget
 * @return 
 */
public double conditionalEntropy(Classifier classifier, Instances trainingDataSet, Instances unLabelDataSets,
        Instance unLabelSet, double classTarget) {
    double cEnt = 0.0D;
    double entropy = 0.0D;
    unLabelSet.setClassValue(classTarget);
    trainingDataSet.add(trainingDataSet.numInstances(), unLabelSet);
    AttributeStats classStats = trainingDataSet.attributeStats(trainingDataSet.classIndex());
    for (Instance set : unLabelDataSets) {
        if (instanceCMPWithoutClass(set, unLabelSet) == true)
            continue;
        for (int i = 0; i < classStats.nominalCounts.length; i++) {
            double target = new Double(trainingDataSet.attribute(trainingDataSet.classIndex()).value(i));
            set.setClassValue(target);
            entropy = posteriorDistribution(classifier, trainingDataSet, set, classTarget);
            //System.out.println("entropy:"+entropy);
            cEnt += -(entropy) * Math.log10(entropy);
            set.setClassMissing();
        }
    }
    trainingDataSet.remove(trainingDataSet.numInstances() - 1);
    return cEnt;
}

From source file:de.ugoe.cs.cpdp.dataprocessing.Oversampling.java

License:Apache License

@Override
public void apply(Instances testdata, Instances traindata) {

    final int[] counts = traindata.attributeStats(traindata.classIndex()).nominalCounts;
    if (counts[1] < counts[0]) {
        Instances negatives = new Instances(traindata);
        Instances positives = new Instances(traindata);

        for (int i = traindata.size() - 1; i >= 0; i--) {
            if (Double.compare(1.0, negatives.get(i).classValue()) == 0) {
                negatives.remove(i);
            }/*from  w w w .j  av a2  s .  c o  m*/
            if (Double.compare(0.0, positives.get(i).classValue()) == 0) {
                positives.remove(i);
            }
        }

        Resample resample = new Resample();
        resample.setSampleSizePercent((100.0 * counts[0]) / counts[1]);
        try {
            resample.setInputFormat(traindata);
            positives = Filter.useFilter(positives, resample);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        traindata.clear();
        for (int i = 0; i < negatives.size(); i++) {
            traindata.add(negatives.get(i));
        }
        for (int i = 0; i < positives.size(); i++) {
            traindata.add(positives.get(i));
        }
    }
}

From source file:de.ugoe.cs.cpdp.dataselection.MahalanobisOutlierRemoval.java

License:Apache License

/**
 * <p>/*  ww  w  .  j  a v  a2s.  co  m*/
 * removes all instances, whose Mahalanobi distance to the mean of the data is greater than
 * epsilon.
 * </p>
 *
 * @param data
 *            data where the outliers are removed
 */
private void applyMahalanobisDistancesRemoval(Instances data) {
    RealMatrix values = new BlockRealMatrix(data.size(), data.numAttributes() - 1);
    for (int i = 0; i < data.size(); i++) {
        values.setRow(i, WekaUtils.instanceValues(data.get(i)));
    }
    RealMatrix inverseCovariance;
    try {
        inverseCovariance = new LUDecomposition(new Covariance(values).getCovarianceMatrix()).getSolver()
                .getInverse();
    } catch (SingularMatrixException e) {
        Console.traceln(Level.WARNING,
                "could not perform Mahalanobis outlier removal due to singular covariance matrix");
        return;
    }
    // create mean vector
    double[] meanValues = new double[data.numAttributes() - 1];
    int k = 0;
    for (int j = 0; j < data.numAttributes(); j++) {
        if (j != data.classIndex()) {
            meanValues[k] = data.attributeStats(j).numericStats.mean;
            k++;
        }
    }

    for (int i = data.size() - 1; i >= 0; i--) {
        double distance = mahalanobisDistance(inverseCovariance, WekaUtils.instanceValues(data.get(i)),
                meanValues);
        if (distance > epsilon) {
            data.remove(i);
        }
    }
}

From source file:development.SpectralTransformComparison.java

public void run() {
    //   Set up the       
    int nosCases = 400;
    int[] nosCasesPerClass = { nosCases / 2, nosCases / 2 };
    int runs = 50;
    int minParas = 2;
    int maxParas = 10;
    ArrayList<String> names = new ArrayList<>();
    Random rand = new Random();
    c = ACFDomainClassification.setSingleClassifiers(names);

    int length = m;
    try {//from  w ww .ja v  a  2 s. c o m
        int nosTrans = 3;
        Instances[] train = new Instances[nosTrans];
        Instances[] test = new Instances[nosTrans];
        double[][] sum = new double[train.length][c.length];
        double[][] sumSq = new double[train.length][c.length];
        PowerSpectrum ps = new PowerSpectrum();
        PowerCepstrum pc = new PowerCepstrum();
        pc.useFFT();
        FFT fft = new FFT();

        OutFile of = new OutFile(path + "mean_" + m + ".csv");
        OutFile of2 = new OutFile(path + "sd_" + m + ".csv");
        System.out.println(" Running length =" + m);
        of.writeLine("classifier,PS,PC,FFT");
        of2.writeLine("classifier,PS,PC,FFT");

        for (int i = 0; i < runs; i++) {
            //Generate data AND SET NOISE LEVEL
            c = ACFDomainClassification.setSingleClassifiers(names);
            if (i % 10 == 0)
                System.out.println(" m =" + m + " performing run =" + i);
            train = new Instances[nosTrans];
            test = new Instances[nosTrans];
            //Change to simulate sin waves.
            Instances rawTrain = SimulatePowerSpectrum.generateFFTDataSet(minParas, maxParas, length,
                    nosCasesPerClass, true);
            rawTrain.randomize(rand);
            Instances rawTest = new Instances(rawTrain, 0);
            for (int k = 0; k < nosCases / 2; k++) {
                Instance r = rawTrain.remove(0);
                rawTest.add(r);
            }
            //Generate transforms                        
            train[0] = ps.process(rawTrain);
            train[1] = pc.process(rawTrain);
            train[2] = fft.process(rawTrain);

            test[0] = ps.process(rawTest);
            test[1] = pc.process(rawTest);
            test[2] = fft.process(rawTest);
            //Measure classification accuracy
            for (int j = 0; j < test.length; j++) {
                for (int k = 0; k < c.length; k++) {
                    double a = ClassifierTools.singleTrainTestSplitAccuracy(c[k], train[j], test[j]);
                    sum[j][k] += a;
                    sumSq[j][k] += a * a;
                }
            }
        }
        DecimalFormat df = new DecimalFormat("###.###");
        System.out.print("\n m=" + length);
        for (int j = 0; j < c.length; j++) {
            of.writeString(names.get(j) + ",");
            of2.writeString(names.get(j) + ",");
            for (int i = 0; i < test.length; i++) {
                sum[i][j] /= runs;
                sumSq[i][j] = sumSq[i][j] / runs - sum[i][j] * sum[i][j];
                System.out.print("," + df.format(sum[i][j]) + " (" + df.format(sumSq[i][j]) + ")");
                of.writeString(df.format(sum[i][j]) + ",");
                of2.writeString(df.format(sumSq[i][j]) + ",");
            }
            of.writeString("\n");
            of2.writeString("\n");
        }
    } catch (Exception e) {
        System.out.println(" Error =" + e);
        e.printStackTrace();
        System.exit(0);
    }

}

From source file:lu.lippmann.cdb.datasetview.tabs.TableTabView.java

License:Open Source License

/**
 * Constructor.//from  w  w w  .j a va2 s . co  m
 */
public TableTabView(final EventPublisher eventPublisher) {
    super();

    this.instanceTable = new JXTable();

    this.instanceTable.setModel(new InstanceTableModel());

    this.instanceTable.setEditable(true);
    this.instanceTable.setShowHorizontalLines(false);
    this.instanceTable.setShowVerticalLines(false);
    this.instanceTable.setVisibleRowCount(5);
    this.instanceTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    //Render of numbers
    this.instanceTable.setDefaultRenderer(Number.class, new TableTabCellRenderer());

    this.instanceTable.addMouseListener(new MouseAdapter() {
        public void mouseReleased(final MouseEvent e) {
            if (e.isPopupTrigger()) {
                final InstanceTableModel instanceTableModel = (InstanceTableModel) instanceTable.getModel();
                final Instances dataSet = instanceTableModel.getDataSet();
                final int row = instanceTable.rowAtPoint(e.getPoint());
                final int column = instanceTable.columnAtPoint(e.getPoint());
                final int modelColumn = instanceTable.convertColumnIndexToModel(column);
                final int modelRow = instanceTable.convertRowIndexToModel(row);

                final JPopupMenu jPopupMenu = new JPopupMenu("feur");

                if (modelColumn > 0 && dataSet.classIndex() != modelColumn - 1) {
                    final JMenuItem removeColumnMenuItem = new JMenuItem(
                            "Remove this column ('" + instanceTableModel.getColumnName(modelColumn) + "')");
                    removeColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            final Instances newdataSet = new Instances(dataSet);
                            newdataSet.deleteAttributeAt(modelColumn - 1);
                            pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Deletion));
                        }
                    });
                    jPopupMenu.add(removeColumnMenuItem);
                }

                if (modelColumn > 0 && dataSet.attribute(modelColumn - 1).isNumeric()
                        && !dataSet.attribute(modelColumn - 1).isDate()) {
                    final JMenuItem discrColumnMenuItem = new JMenuItem(
                            "Discretize this column ('" + instanceTableModel.getColumnName(modelColumn) + "')");
                    discrColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildDiscretizedDataSetUnsupervisedForOne(dataSet, modelColumn - 1);
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during discretization of '"
                                        + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(discrColumnMenuItem);

                    for (final int c : new int[] { 5, 10, 20, 40, 80 }) {
                        final JMenuItem discrColumnMenuItemN = new JMenuItem("Discretize this column ('"
                                + instanceTableModel.getColumnName(modelColumn) + "') bins=" + c);
                        discrColumnMenuItemN.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(final ActionEvent e) {
                                try {
                                    final Instances newdataSet = WekaDataProcessingUtil
                                            .buildDiscretizedDataSetUnsupervised(dataSet, modelColumn - 1, c);
                                    pushDataChange(
                                            new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                                } catch (Exception e1) {
                                    eventPublisher
                                            .publish(new ErrorOccuredEvent("Error during discretization of '"
                                                    + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                                }
                            }
                        });
                        jPopupMenu.add(discrColumnMenuItemN);
                    }

                }

                if (column > 0 && dataSet.attribute(column - 1)
                        .isNumeric()/*WekaDataStatsUtil.isInteger(dataSet,column-1)*/) {
                    final JMenuItem nominalizeColumnMenuItem = new JMenuItem(
                            "Nominalize this column ('" + instanceTableModel.getColumnName(column) + "')");
                    nominalizeColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildNominalizedDataSet(dataSet, new int[] { modelColumn - 1 });
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during nominalization of '"
                                        + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(nominalizeColumnMenuItem);
                }

                if (column > 0 && (dataSet.attribute(column - 1).isNominal()
                        || dataSet.attribute(column - 1).isString())) {
                    final JMenuItem numColumnMenuItem = new JMenuItem(
                            "Numerize this column ('" + instanceTableModel.getColumnName(column) + "')");
                    numColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildDataSetWithNumerizedStringAttribute(dataSet, column - 1);
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during numerization of '"
                                        + instanceTableModel.getColumnName(column) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(numColumnMenuItem);
                }

                final JMenuItem removeRowMenuItem = new JMenuItem(
                        "Remove this row (id='" + instanceTableModel.getValueAt(row, 0) + "')");
                removeRowMenuItem.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        final Instances newdataSet = new Instances(dataSet);
                        newdataSet.remove(modelRow);
                        instanceTableModel.removeRow(modelRow);
                        pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Deletion));
                    }
                });
                jPopupMenu.add(removeRowMenuItem);

                final JMenuItem selectKNNMenuItem = new JMenuItem("Select nearest neighbours of this row (id='"
                        + instanceTableModel.getValueAt(modelRow, 0) + "')");
                selectKNNMenuItem.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        try {
                            final Instances knnResult = WekaMachineLearningUtil
                                    .computeNearestNeighbours(dataSet, instanceTableModel.getRow(modelRow), 10);
                            pushDataChange(new DataChange(knnResult, TabView.DataChangeTypeEnum.Selection));
                        } catch (Exception e1) {
                            eventPublisher.publish(new ErrorOccuredEvent(
                                    "Error when selecting nearest neighbours of this row!", e1));
                        }
                    }
                });
                jPopupMenu.add(selectKNNMenuItem);

                jPopupMenu.show(instanceTable, e.getX(), e.getY());
            }
        }
    });

    this.instanceTable.packAll();
    final int tableWidth = (int) this.instanceTable.getPreferredSize().getWidth() + 30;
    this.scrollPane = new JScrollPane(this.instanceTable);
    this.scrollPane.setPreferredSize(new Dimension(Math.min(tableWidth, 500), 500));
    this.scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}

From source file:lu.lippmann.cdb.ext.hydviga.ui.SimilarCasesFrame.java

License:Open Source License

/**
 * Constructor./*from w  w  w.j  av a  2 s.  c  o m*/
 */
SimilarCasesFrame(final Instances ds, final int dateIdx, final StationsDataProvider gcp, String attrname,
        final int gapsize, final int position, final double x, final double y, final int year,
        final String season, final boolean isDuringRising) throws Exception {
    LogoHelper.setLogo(this);
    this.setTitle("KnowledgeDB: Suggested configurations / similar cases");

    this.inputCaseTablePanel = new JXPanel();
    this.inputCaseTablePanel.setBorder(new TitledBorder("Present case"));
    this.inputCaseChartPanel = new JXPanel();
    this.inputCaseChartPanel.setBorder(new TitledBorder("Profile of the present case"));
    this.outputCasesTablePanel = new JXPanel();
    this.outputCasesTablePanel.setBorder(new TitledBorder("Suggested cases"));
    this.outputCasesChartPanel = new JXPanel();
    this.outputCasesChartPanel.setBorder(new TitledBorder("Profile of the selected suggested case"));

    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    getContentPane().add(inputCaseTablePanel);
    getContentPane().add(inputCaseChartPanel);
    getContentPane().add(outputCasesTablePanel);
    getContentPane().add(outputCasesChartPanel);

    final Instances res = GapFillingKnowledgeDB.findSimilarCases(attrname, x, y, year, season, gapsize,
            position, isDuringRising, gcp.findDownstreamStation(attrname) != null,
            gcp.findUpstreamStation(attrname) != null,
            GapsUtil.measureHighMiddleLowInterval(ds, ds.attribute(attrname).index(), position - 1));

    final Instances inputCase = new Instances(res);
    while (inputCase.numInstances() > 1)
        inputCase.remove(1);
    final JXTable inputCaseTable = buidJXTable(inputCase);
    final JScrollPane inputScrollPane = new JScrollPane(inputCaseTable);
    //System.out.println(inputScrollPane.getPreferredSize());
    inputScrollPane.setPreferredSize(
            new Dimension(COMPONENT_WIDTH, (int) (50 + inputScrollPane.getPreferredSize().getHeight())));
    this.inputCaseTablePanel.add(inputScrollPane);

    final ChartPanel inputcp = GapsUIUtil.buildGapChartPanel(ds, dateIdx, ds.attribute(attrname), gapsize,
            position);
    inputcp.getChart().removeLegend();
    inputcp.setPreferredSize(CHART_DIMENSION);
    this.inputCaseChartPanel.add(inputcp);

    final Instances outputCases = new Instances(res);
    outputCases.remove(0);
    final JXTable outputCasesTable = buidJXTable(outputCases);
    final JScrollPane outputScrollPane = new JScrollPane(outputCasesTable);
    outputScrollPane.setPreferredSize(
            new Dimension(COMPONENT_WIDTH, (int) (50 + outputScrollPane.getPreferredSize().getHeight())));
    this.outputCasesTablePanel.add(outputScrollPane);

    outputCasesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    outputCasesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                final int modelRow = outputCasesTable.getSelectedRow();

                final String attrname = outputCasesTable.getModel().getValueAt(modelRow, 1).toString();
                final int gapsize = (int) Double
                        .valueOf(outputCasesTable.getModel().getValueAt(modelRow, 4).toString()).doubleValue();
                final int position = (int) Double
                        .valueOf(outputCasesTable.getModel().getValueAt(modelRow, 5).toString()).doubleValue();

                try {
                    final ChartPanel cp = GapsUIUtil.buildGapChartPanel(ds, dateIdx, ds.attribute(attrname),
                            gapsize, position);
                    cp.getChart().removeLegend();
                    cp.setPreferredSize(CHART_DIMENSION);
                    outputCasesChartPanel.removeAll();
                    outputCasesChartPanel.add(cp);
                    getContentPane().repaint();
                    pack();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    });

    outputCasesTable.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(final MouseEvent e) {
            final InstanceTableModel instanceTableModel = (InstanceTableModel) outputCasesTable.getModel();
            final int row = outputCasesTable.rowAtPoint(e.getPoint());
            final int modelRow = outputCasesTable.convertRowIndexToModel(row);

            final String attrname = instanceTableModel.getValueAt(modelRow, 1).toString();
            final int gapsize = (int) Double.valueOf(instanceTableModel.getValueAt(modelRow, 4).toString())
                    .doubleValue();
            final int position = (int) Double.valueOf(instanceTableModel.getValueAt(modelRow, 5).toString())
                    .doubleValue();

            if (e.isPopupTrigger()) {
                final JPopupMenu jPopupMenu = new JPopupMenu("feur");

                final JMenuItem mi = new JMenuItem("Use this configuration");
                mi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        System.out.println("not implemented!");
                    }
                });
                jPopupMenu.add(mi);
                jPopupMenu.show(outputCasesTable, e.getX(), e.getY());
            } else {
                // nothing?
            }
        }
    });

    setPreferredSize(new Dimension(FRAME_WIDTH, 900));

    pack();
    setVisible(true);

    /* select the first row */
    outputCasesTable.setRowSelectionInterval(0, 0);
}

From source file:lu.lippmann.cdb.lab.beta.util.WekaUtil2.java

License:Open Source License

/**
 * /*w w  w. j a  va 2s.c o m*/
 * @param instances
 * @param instance
 */
public static void removeFromInstances(Instances instances, Instance instance) {
    InstanceComparator cp = new InstanceComparator();
    for (int i = 0; i < instances.numInstances(); i++) {
        Instance cinstance = instances.instance(i);
        if (cp.compare(cinstance, instance) == 0) {
            instances.remove(cinstance);
            break;
        }
    }
}

From source file:machinelearning_cw.KNN.java

/**
 * /*w  ww .ja va 2 s. co  m*/
 * A slower method for estimating the accuracy of using a value as k by
 * applying Leave-One-Out-Cross-Validation(LOOCV).
 * 
 * @param k value of k to be tested.
 * @param trainingData The data against which the classifier is to be
 * tested.
 * 
 * @return Accuracy of the calling classifier using the given value of k.
 * @throws Exception 
 */
private double estimateAccuracyByLOOCV(int k, Instances trainingData) throws Exception {
    ArrayList<Double> accuracies = new ArrayList<Double>();

    /* In a training set of n, train the model on n-1 and test on 1 */
    int n = trainingData.size();
    for (int i = 0; i < n; i++) {
        Instances trainingSet = new Instances(trainingData);
        Instance testInstance = trainingSet.remove(i);

        BasicKNN classifier = new BasicKNN();
        classifier.setK(k);
        classifier.buildClassifier(trainingSet);

        /* Test classifer on test instance and measure accuracy */
        double accuracy = Helpers.findClassifierAccuracy(classifier, testInstance);
        accuracies.add(accuracy);
    }

    /* find average accuracy */
    double count = accuracies.size();
    double sum = 0;
    for (Double eachAccuracy : accuracies) {
        sum += eachAccuracy;
    }
    double averageAccuracy = sum / count;
    return averageAccuracy;
}