📄 knngui.java
字号:
printStatus("KNN classification done."); if (resultsToFile) { FileWriter outputFile = new FileWriter("results.txt"); outputFile.write(resultsTextArea.getText()); outputFile.close(); printStatus("Results written to file."); } } else { KnnPartialDistance knnPD = new KnnPartialDistance(Integer.parseInt(kValueField.getText()), leaveOutAttribute); if (testSettingsSelect == 0) { output = evaluate(knnPD, trainingSet, testSet); } else output = evaluate(knnPD, trainingSet, trainingSet); resultsTextArea.append("Test [" + testNumber + "] results: knn with partial distance\n" + "-------------\n" + output); printStatus("KNN partial distance classification done."); if (resultsToFile) { FileWriter outputFile = new FileWriter("results.txt"); outputFile.write(resultsTextArea.getText()); outputFile.close(); printStatus("Results written to file."); } } startButton.setEnabled(true); } catch (Exception e) { printStatus("Error in execution: " + e.getMessage()); startButton.setEnabled(true); } } /** the evaluateModel in Weka crashes my damn program, so I have to write my own * function. Oh it is SO not going to be as good as the weka stuff. */ private String evaluate(Classifier knn, Instances trainingS, Instances testS) { String results = ""; try { // no threads or anything, because I don't have the time. double[] classification = new double[testS.numInstances()]; testS.setClassIndex(trainingSet.classIndex()); long startTime = System.currentTimeMillis(); int correctClassify = 0; knn.buildClassifier(trainingS); for (int i = 0; i < testS.numInstances(); i++) { classification[i] = knn.classifyInstance(testS.instance(i)); if (classification[i] == testS.instance(i).classValue()) { correctClassify++; } } long stopTime = System.currentTimeMillis(); long execTime = stopTime - startTime; results = "Attributes: " + trainingS.numAttributes() + "\n" + "Instances in training set: " + trainingS.numInstances() + "\n" + "Instances in test set: " + testS.numInstances() + "\n\n" + "Instances correctly classified:\n" + " " + correctClassify + " / " + testS.numInstances() + "\n\n" + "Execution time: " + (double)execTime/(double)1000 + " seconds\n\n" + "Average rate of classification:\n" + " " + (double)(testS.numInstances()) / ((double)execTime/(double)1000) + " samples/sec.\n\n"; } catch (Exception e) { printStatus("Error evaluating: " + e.getMessage()); } return results; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { tabbedPane = new javax.swing.JTabbedPane(); tabPanel1 = new javax.swing.JPanel(); fileChoosePanel = new javax.swing.JPanel(); trainingLoadButton = new javax.swing.JButton(); testLoadButton = new javax.swing.JButton(); trainingArffPanel = new javax.swing.JPanel(); trainingArffScrollPane = new javax.swing.JScrollPane(); testArffPanel = new javax.swing.JPanel(); testArffScrollPane = new javax.swing.JScrollPane(); tabPanel2 = new javax.swing.JPanel(); classifierPanel = new javax.swing.JPanel(); simpleKNNRadio = new javax.swing.JRadioButton(); partialDistanceRadio = new javax.swing.JRadioButton(); partialDistanceOptionsButton = new javax.swing.JButton(); settingsPanel = new javax.swing.JPanel(); useTestSetRadio = new javax.swing.JRadioButton(); useTrainingSetRadio = new javax.swing.JRadioButton(); kValueLabel = new javax.swing.JLabel(); kValueField = new javax.swing.JTextField(); writeResultsCheckBox = new javax.swing.JCheckBox(); startButton = new javax.swing.JButton(); resultsPanel = new javax.swing.JPanel(); resultsScrollPane = new javax.swing.JScrollPane(); resultsTextArea = new javax.swing.JTextArea(); statusPanel = new javax.swing.JPanel(); statusScrollPane = new javax.swing.JScrollPane(); statusTextArea = new javax.swing.JTextArea(); getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false); tabPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); fileChoosePanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); fileChoosePanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Load data sets")); fileChoosePanel.setMaximumSize(new java.awt.Dimension(460, 100)); fileChoosePanel.setMinimumSize(new java.awt.Dimension(460, 100)); trainingLoadButton.setText("Load Training Set"); fileChoosePanel.add(trainingLoadButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, 320, -1)); testLoadButton.setText("Load Test Set"); fileChoosePanel.add(testLoadButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(380, 20, 330, -1)); tabPanel1.add(fileChoosePanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 10, 730, 60)); trainingArffPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); trainingArffPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Training Set", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); trainingArffPanel.add(trainingArffScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, 340, 220)); tabPanel1.add(trainingArffPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 70, 360, 250)); testArffPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); testArffPanel.setBorder(new javax.swing.border.TitledBorder(null, "Test set", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP)); testArffPanel.add(testArffScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(12, 22, 350, 220)); tabPanel1.add(testArffPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 70, 370, 250)); tabbedPane.addTab("Data sets", tabPanel1); tabPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); classifierPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); classifierPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Classifier", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP)); classifierPanel.setMaximumSize(new java.awt.Dimension(320, 120)); classifierPanel.setMinimumSize(new java.awt.Dimension(320, 120)); simpleKNNRadio.setSelected(true); simpleKNNRadio.setText("Simple k-nearest-neighbor"); classifierPanel.add(simpleKNNRadio, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, -1, -1)); partialDistanceRadio.setText("knn with partial distance"); classifierPanel.add(partialDistanceRadio, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 50, -1, -1)); partialDistanceOptionsButton.setLabel("Options"); classifierPanel.add(partialDistanceOptionsButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(160, 50, -1, -1)); tabPanel2.add(classifierPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, 250, 120)); settingsPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); settingsPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Settings", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP)); settingsPanel.setMaximumSize(new java.awt.Dimension(320, 150)); settingsPanel.setMinimumSize(new java.awt.Dimension(320, 150)); useTestSetRadio.setText("Classify test set"); settingsPanel.add(useTestSetRadio, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 60, -1, -1)); useTrainingSetRadio.setText("Classify training set"); settingsPanel.add(useTrainingSetRadio, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 90, -1, -1)); kValueLabel.setText("Value of k"); settingsPanel.add(kValueLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 30, 60, -1)); kValueField.setText("10"); settingsPanel.add(kValueField, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 30, 90, -1)); writeResultsCheckBox.setText("Write results to a file"); settingsPanel.add(writeResultsCheckBox, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 120, -1, -1)); tabPanel2.add(settingsPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 130, 250, 150)); startButton.setText("Start"); startButton.setEnabled(false); tabPanel2.add(startButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 290, 130, -1)); resultsPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); resultsPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Test results")); resultsTextArea.setEditable(false); resultsTextArea.setLineWrap(true); resultsScrollPane.setViewportView(resultsTextArea); resultsPanel.add(resultsScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, 440, 280)); tabPanel2.add(resultsPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 10, 470, 310)); tabbedPane.addTab("Classify", tabPanel2); getContentPane().add(tabbedPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 740, 350)); statusPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); statusPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP)); statusTextArea.setEditable(false); statusTextArea.setLineWrap(true); statusScrollPane.setViewportView(statusTextArea); statusPanel.add(statusScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, 720, 110)); getContentPane().add(statusPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 350, 740, 140)); pack(); } // </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel classifierPanel; private javax.swing.JPanel fileChoosePanel; private javax.swing.JTextField kValueField; private javax.swing.JLabel kValueLabel; private javax.swing.JButton partialDistanceOptionsButton; private javax.swing.JRadioButton partialDistanceRadio; private javax.swing.JPanel resultsPanel; private javax.swing.JScrollPane resultsScrollPane; private javax.swing.JTextArea resultsTextArea; private javax.swing.JPanel settingsPanel; private javax.swing.JRadioButton simpleKNNRadio; private javax.swing.JButton startButton; private javax.swing.JPanel statusPanel; private javax.swing.JScrollPane statusScrollPane; private javax.swing.JTextArea statusTextArea; private javax.swing.JPanel tabPanel1; private javax.swing.JPanel tabPanel2; private javax.swing.JTabbedPane tabbedPane; private javax.swing.JPanel testArffPanel; private javax.swing.JScrollPane testArffScrollPane; private javax.swing.JButton testLoadButton; private javax.swing.JPanel trainingArffPanel; private javax.swing.JScrollPane trainingArffScrollPane; private javax.swing.JButton trainingLoadButton; private javax.swing.JRadioButton useTestSetRadio; private javax.swing.JRadioButton useTrainingSetRadio; private javax.swing.JCheckBox writeResultsCheckBox; // End of variables declaration//GEN-END:variables}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -