// Connect / configure the components
m_OutText.setEditable(false);
m_OutText.setFont(new Font("Monospaced", Font.PLAIN, 12));
m_OutText.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
m_OutText.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
!= InputEvent.BUTTON1_MASK) {
m_OutText.selectAll();
}
}
});
m_History.setBorder(BorderFactory.createTitledBorder("Result list (right-click for options)"));
m_ClassifierEditor.setClassType(Classifier.class);
m_ClassifierEditor.setValue(ExplorerDefaults.getClassifier());
m_ClassifierEditor.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
m_StartBut.setEnabled(true);
// Check capabilities
Capabilities currentFilter = m_ClassifierEditor.getCapabilitiesFilter();
Classifier classifier = (Classifier) m_ClassifierEditor.getValue();
Capabilities currentSchemeCapabilities = null;
if (classifier != null && currentFilter != null &&
(classifier instanceof CapabilitiesHandler)) {
currentSchemeCapabilities = ((CapabilitiesHandler)classifier).getCapabilities();
if (!currentSchemeCapabilities.supportsMaybe(currentFilter) &&
!currentSchemeCapabilities.supports(currentFilter)) {
m_StartBut.setEnabled(false);
}
}
repaint();
}
});
m_ClassCombo.setToolTipText("Select the attribute to use as the class");
m_TrainBut.setToolTipText("Test on the same set that the classifier"
+ " is trained on");
m_CVBut.setToolTipText("Perform a n-fold cross-validation");
m_PercentBut.setToolTipText("Train on a percentage of the data and"
+ " test on the remainder");
m_TestSplitBut.setToolTipText("Test on a user-specified dataset");
m_StartBut.setToolTipText("Starts the classification");
m_StopBut.setToolTipText("Stops a running classification");
m_StorePredictionsBut.
setToolTipText("Store predictions in the result list for later "
+"visualization");
m_OutputModelBut
.setToolTipText("Output the model obtained from the full training set");
m_OutputPerClassBut.setToolTipText("Output precision/recall & true/false"
+ " positives for each class");
m_OutputConfusionBut
.setToolTipText("Output the matrix displaying class confusions");
m_OutputEntropyBut
.setToolTipText("Output entropy-based evaluation measures");
m_EvalWRTCostsBut
.setToolTipText("Evaluate errors with respect to a cost matrix");
m_RandomLab.setToolTipText("The seed value for randomization");
m_RandomSeedText.setToolTipText(m_RandomLab.getToolTipText());
m_PreserveOrderBut.setToolTipText("Preserves the order in a percentage split");
m_OutputSourceCode.setToolTipText(
"Whether to output the built classifier as Java source code");
m_SourceCodeClass.setToolTipText("The classname of the built classifier");
m_FileChooser.addChoosableFileFilter(m_PMMLModelFilter);
m_FileChooser.setFileFilter(m_ModelFilter);
m_FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
m_ClassificationOutputEditor.setClassType(AbstractOutput.class);
m_ClassificationOutputEditor.setValue(new Null());
m_StorePredictionsBut.setSelected(ExplorerDefaults.getClassifierStorePredictionsForVis());
m_OutputModelBut.setSelected(ExplorerDefaults.getClassifierOutputModel());
m_OutputPerClassBut.setSelected(ExplorerDefaults.getClassifierOutputPerClassStats());
m_OutputConfusionBut.setSelected(ExplorerDefaults.getClassifierOutputConfusionMatrix());
m_EvalWRTCostsBut.setSelected(ExplorerDefaults.getClassifierCostSensitiveEval());
m_OutputEntropyBut.setSelected(ExplorerDefaults.getClassifierOutputEntropyEvalMeasures());
m_RandomSeedText.setText("" + ExplorerDefaults.getClassifierRandomSeed());
m_PreserveOrderBut.setSelected(ExplorerDefaults.getClassifierPreserveOrder());
m_OutputSourceCode.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_SourceCodeClass.setEnabled(m_OutputSourceCode.isSelected());
}
});
m_OutputSourceCode.setSelected(ExplorerDefaults.getClassifierOutputSourceCode());
m_SourceCodeClass.setText(ExplorerDefaults.getClassifierSourceCodeClass());
m_SourceCodeClass.setEnabled(m_OutputSourceCode.isSelected());
m_ClassCombo.setEnabled(false);
m_ClassCombo.setPreferredSize(COMBO_SIZE);
m_ClassCombo.setMaximumSize(COMBO_SIZE);
m_ClassCombo.setMinimumSize(COMBO_SIZE);
m_CVBut.setSelected(true);
// see "testMode" variable in startClassifier
m_CVBut.setSelected(ExplorerDefaults.getClassifierTestMode() == 1);
m_PercentBut.setSelected(ExplorerDefaults.getClassifierTestMode() == 2);
m_TrainBut.setSelected(ExplorerDefaults.getClassifierTestMode() == 3);
m_TestSplitBut.setSelected(ExplorerDefaults.getClassifierTestMode() == 4);
m_PercentText.setText("" + ExplorerDefaults.getClassifierPercentageSplit());
m_CVText.setText("" + ExplorerDefaults.getClassifierCrossvalidationFolds());
updateRadioLinks();
ButtonGroup bg = new ButtonGroup();
bg.add(m_TrainBut);
bg.add(m_CVBut);
bg.add(m_PercentBut);
bg.add(m_TestSplitBut);
m_TrainBut.addActionListener(m_RadioListener);
m_CVBut.addActionListener(m_RadioListener);
m_PercentBut.addActionListener(m_RadioListener);
m_TestSplitBut.addActionListener(m_RadioListener);
m_SetTestBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setTestSet();
}
});
m_EvalWRTCostsBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_SetCostsBut.setEnabled(m_EvalWRTCostsBut.isSelected());
if ((m_SetCostsFrame != null)
&& (!m_EvalWRTCostsBut.isSelected())) {
m_SetCostsFrame.setVisible(false);
}
}
});
m_CostMatrixEditor.setValue(new CostMatrix(1));
m_SetCostsBut.setEnabled(m_EvalWRTCostsBut.isSelected());
m_SetCostsBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_SetCostsBut.setEnabled(false);
if (m_SetCostsFrame == null) {
if (PropertyDialog.getParentDialog(ClassifierPanel.this) != null)
m_SetCostsFrame = new PropertyDialog(
PropertyDialog.getParentDialog(ClassifierPanel.this),
m_CostMatrixEditor, 100, 100);
else
m_SetCostsFrame = new PropertyDialog(
PropertyDialog.getParentFrame(ClassifierPanel.this),
m_CostMatrixEditor, 100, 100);
m_SetCostsFrame.setTitle("Cost Matrix Editor");
// pd.setSize(250,150);
m_SetCostsFrame.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent p) {
m_SetCostsBut.setEnabled(m_EvalWRTCostsBut.isSelected());
if ((m_SetCostsFrame != null)
&& (!m_EvalWRTCostsBut.isSelected())) {
m_SetCostsFrame.setVisible(false);
}
}
});
m_SetCostsFrame.setVisible(true);
}
// do we need to change the size of the matrix?
int classIndex = m_ClassCombo.getSelectedIndex();
int numClasses = m_Instances.attribute(classIndex).numValues();
if (numClasses != ((CostMatrix) m_CostMatrixEditor.getValue()).numColumns())
m_CostMatrixEditor.setValue(new CostMatrix(numClasses));
m_SetCostsFrame.setVisible(true);
}
});
m_StartBut.setEnabled(false);
m_StopBut.setEnabled(false);
m_StartBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startClassifier();
}
});
m_StopBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopClassifier();
}
});
m_ClassCombo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selected = m_ClassCombo.getSelectedIndex();
if (selected != -1) {
boolean isNominal = m_Instances.attribute(selected).isNominal();
m_OutputPerClassBut.setEnabled(isNominal);
m_OutputConfusionBut.setEnabled(isNominal);
}
updateCapabilitiesFilter(m_ClassifierEditor.getCapabilitiesFilter());
}
});
m_History.setHandleRightClicks(false);
// see if we can popup a menu for the selected result
m_History.getList().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (((e.getModifiers() & InputEvent.BUTTON1_MASK)
!= InputEvent.BUTTON1_MASK) || e.isAltDown()) {
int index = m_History.getList().locationToIndex(e.getPoint());
if (index != -1) {