Click here to Skip to main content
15,896,606 members
Articles / Programming Languages / C#
Article

ID3 Decision Tree Algorithm in C#

Rate me:
Please Sign up or sign in to vote.
3.05/5 (44 votes)
21 Oct 20031 min read 308.5K   20.2K   58   56
Sample of ID3 Decision Tree Algorithm in C#

Image 1

Introduction

The algorithm ID3 (Quinlan) uses the method top-down induction of decision trees. Given a set of classified examples a decision tree is induced, biased by the information gain measure, which heuristically leads to small trees. The examples are given in attribute-value representation. The set of possible classes is finite. Only tests, that split the set of instances of the underlying example languages depending on the value of a single attribute are supported.

Details

Depending on whether the attributes are nominal or numerical, the tests either

  • have a successor for each possible attribute value, or
  • split according to a comparison of an attribute value to a constant, or depending on if an attribute value belongs to a certain interval or not.

The algorithm starts with the complete set of examples, a set of possible tests and the root node as the actual node. As long as the examples propagated to a node do not all belong to the same class and there are tests left,

  • a test with highest information gain is chosen,
  • the corresponding set of successors is created for the actual node,
  • each example is propagated to the successor given by the chosen test,
  • ID3 is called recursively for all successors.

How it works

The core of sample is builded with 3 classes (Attribute, TreeNode and DecisionTreeID3).

  • TreeNode - are the nodes of the decision tree;
  • Attribute - is the class with have a name e any possible values;
  • DecisionTreeID3 - is the class what get a data samples and generate a decision tree.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer iddi
Brazil Brazil
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralAn error report [modified] Pin
pol_chu9-Sep-10 22:44
pol_chu9-Sep-10 22:44 
Generalerror Pin
lqht25-Apr-10 8:05
lqht25-Apr-10 8:05 
GeneralError Pin
strepto125-Apr-10 6:21
strepto125-Apr-10 6:21 
Generalhi Pin
rodalyn15-Mar-10 18:15
rodalyn15-Mar-10 18:15 
Generalhelp:id3 decision tree Pin
std_112-Mar-10 1:34
std_112-Mar-10 1:34 
GeneralRe: help:id3 decision tree Pin
Sama Ramba15-Oct-10 22:36
Sama Ramba15-Oct-10 22:36 
GeneralRe: help:id3 decision tree Pin
leavetrace24-Oct-10 23:08
leavetrace24-Oct-10 23:08 
GeneralRe: help:id3 decision tree Pin
leavetrace24-Oct-10 23:13
leavetrace24-Oct-10 23:13 
class DataInstance

package guiID3;<br />
<br />
public class DataInstance implements Cloneable {	<br />
	private int [] valuesArray;<br />
	<br />
	<br />
	public DataInstance(int [] valueArray){<br />
		this.valuesArray = valueArray;<br />
	}<br />
	<br />
	public int[] getValues(){<br />
		return valuesArray;<br />
	}<br />
	public void setValues(int [] p){<br />
		valuesArray = p;<br />
	}<br />
	<br />
<br />
	public int getClassValue(){<br />
		return valuesArray[valuesArray.length-1];<br />
	}<br />
	<br />
    public Object clone() throws CloneNotSupportedException{<br />
        DataInstance myClone = (DataInstance) super.clone();    // shallow copy of object fields<br />
        return myClone;<br />
    }<br />
}<br />

---------------------- class GUIID3JFrame

package guiID3;<br />
<br />
<br />
import java.awt.BorderLayout;<br />
import java.awt.Canvas;<br />
import java.awt.Cursor;<br />
import java.awt.Event;<br />
import java.awt.GridBagConstraints;<br />
import java.awt.GridBagLayout;<br />
import java.awt.Insets;<br />
import java.awt.event.ActionEvent;<br />
import java.awt.event.ActionListener;<br />
import java.awt.event.KeyEvent;<br />
import java.awt.event.MouseAdapter;<br />
import java.awt.event.MouseEvent;<br />
import java.io.File;<br />
import java.text.DecimalFormat;<br />
<br />
import javax.swing.BorderFactory;<br />
import javax.swing.BoxLayout;<br />
import javax.swing.JButton;<br />
import javax.swing.JCheckBox;<br />
import javax.swing.JDialog;<br />
import javax.swing.JFileChooser;<br />
import javax.swing.JLabel;<br />
import javax.swing.JMenu;<br />
import javax.swing.JMenuBar;<br />
import javax.swing.JMenuItem;<br />
import javax.swing.JPanel;<br />
import javax.swing.JProgressBar;<br />
import javax.swing.JScrollPane;<br />
import javax.swing.JSeparator;<br />
import javax.swing.JTabbedPane;<br />
import javax.swing.JTable;<br />
import javax.swing.JTextArea;<br />
import javax.swing.JTextField;<br />
import javax.swing.KeyStroke;<br />
import javax.swing.ListSelectionModel;<br />
import javax.swing.SwingConstants;<br />
import javax.swing.WindowConstants;<br />
import javax.swing.border.BevelBorder;<br />
import javax.swing.event.ListSelectionEvent;<br />
import javax.swing.event.ListSelectionListener;<br />
import javax.swing.table.DefaultTableModel;<br />
import javax.swing.table.TableModel;<br />
<br />
public class GUIID3JFrame extends javax.swing.JFrame {<br />
    <br />
    private static final long serialVersionUID = 1L;<br />
    <br />
    {<br />
        //Set Look & Feel<br />
        try {<br />
            javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");<br />
        } catch(Exception e) {<br />
            e.printStackTrace();<br />
        }<br />
    }<br />
    <br />
    <br />
    private JMenuBar jMenuBar1;<br />
    private JMenu jMenu1;<br />
    private JMenuItem jMenuItem1;<br />
    private JLabel jLabelNumberOfInstances;<br />
    private JTable jTable1;<br />
    private JTable jTable2;<br />
    private TableModel jTable1Model;<br />
    private TableModel jTable2Model;<br />
    private JLabel jLabel8;<br />
    private JLabel jLabel4;<br />
    private JLabel jLabel14;<br />
    private JLabel jLabel12;<br />
    private JLabel jLabel6;<br />
    private JTextField jTextField5;<br />
    private JTextField jTextField4;<br />
    private JTextField jTextField3;<br />
    private JTextField jTextField2;<br />
    private JPanel jPanel9;<br />
    private JTextField jTextField1;<br />
    private JLabel jLabel13;<br />
    private JPanel jPanel7;<br />
    private JButton jButton1;<br />
    private JLabel jLabelDistinct;<br />
    private JLabel jLabel11;<br />
    private JPanel jPanel4;<br />
    private JLabel jLabel7;<br />
    private JLabel jLabel10;<br />
    private JLabel jLabel9;<br />
    private JScrollPane jScrollPane3;<br />
    private JPanel jPanel6;<br />
    private JPanel jPanel5;<br />
    private JPanel jPanel3;<br />
    private JTabbedPane jTabbedPane1;<br />
    private JScrollPane jScrollPane1;<br />
    private JLabel jLabelNumberOfAttributes;<br />
    private JLabel jLabel5;<br />
    private JLabel jLabel3;<br />
    private JLabel jLabel2;<br />
    private JLabel jLabel1;<br />
    private JPanel jPanel1;<br />
    private JPanel jPanel2;<br />
    private JMenuItem jMenuItem3;<br />
    private JMenu jMenu2;<br />
    private JMenuItem jMenuItem2;<br />
    private JSeparator jSeparator1;<br />
    private MyFileReader myFileReader;<br />
    private Canvas canvas1;<br />
    private JTextField jTextField6;<br />
    private JLabel jLabel17;<br />
    private JButton jButton2;<br />
    private JProgressBar jProgressBar1;<br />
    private JPanel jPanel8;<br />
    private JCheckBox jCheckBox3;<br />
    private JCheckBox jCheckBox2;<br />
    private JLabel jLabel15;<br />
    private JCheckBox jCheckBox1;<br />
    private JTextArea jTextArea1;<br />
    private JScrollPane jScrollPane2;<br />
    private boolean isClassifying;<br />
    private ID3 cv;<br />
    private Attribute [] attributesArray;<br />
    private DataInstance [] dataInstancesArray;<br />
    <br />
    /**<br />
     * Auto-generated main method to display this JFrame<br />
     */<br />
    public static void main(String[] args) {<br />
        GUIID3JFrame inst = new GUIID3JFrame();<br />
        inst.setVisible(true);<br />
        <br />
    }<br />
    <br />
    public GUIID3JFrame() {<br />
        super();<br />
        try{<br />
            javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");<br />
            javax.swing.SwingUtilities.updateComponentTreeUI(this);<br />
        }catch(Exception e){}<br />
        initGUI();<br />
    }<br />
    <br />
   private void initGUI() {<br />
        try {<br />
            {<br />
                jMenuBar1 = new JMenuBar();<br />
                setJMenuBar(jMenuBar1);<br />
                jMenuBar1.setPreferredSize(new java.awt.Dimension(392, 26));<br />
                {<br />
                    jMenu1 = new JMenu();<br />
                    jMenuBar1.add(jMenu1);<br />
                    jMenu1.setText("File");<br />
                    jMenu1.setDisplayedMnemonicIndex(0);<br />
                    jMenu1.setMnemonic(java.awt.event.KeyEvent.VK_F);<br />
                    {<br />
                        jMenuItem1 = new JMenuItem();<br />
                        jMenu1.add(jMenuItem1);<br />
                        jMenuItem1.setText("Open...");<br />
                        jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK));<br />
                        jMenuItem1.setDisplayedMnemonicIndex(0);<br />
                        jMenuItem1.setMnemonic(java.awt.event.KeyEvent.VK_O);<br />
                        jMenuItem1.addActionListener(new ActionListener() {<br />
                            public void actionPerformed(ActionEvent evt) {<br />
                                final JFileChooser fc = new JFileChooser();<br />
                                fc.setCurrentDirectory(new File(System.getProperty("user.dir")));<br />
                                fc.addChoosableFileFilter(new ArffFilter());<br />
                                int returnVal = fc.showOpenDialog(GUIID3JFrame.this);<br />
                                if(returnVal == 0){<br />
                                    myFileReader = new MyFileReader(fc.getSelectedFile());<br />
                                    if(myFileReader.fileIsOk()){<br />
                                        attributesArray = myFileReader.getAttributesArray();<br />
                                        dataInstancesArray = myFileReader.getDataInstancesArray();<br />
                                       setLabel2(myFileReader.getRelation());<br />
                                        jLabelNumberOfAttributes.setText(String.valueOf(myFileReader.getAttributesNo()));<br />
                                        jLabelNumberOfInstances.setText(String.valueOf(myFileReader.getInstancesNo()));<br />
                                        setTableAtt1(myFileReader.getAttributesArray());<br />
                                        jTabbedPane1.setEnabledAt(1,true);<br />
                                    }<br />
                                }<br />
                            }<br />
                        });<br />
                    }<br />
                    {<br />
                        jSeparator1 = new JSeparator();<br />
                        jMenu1.add(jSeparator1);<br />
                    }<br />
                    {<br />
                        jMenuItem2 = new JMenuItem();<br />
                        jMenu1.add(jMenuItem2);<br />
                        jMenuItem2.setText("Exit");<br />
                        jMenuItem2.setDisplayedMnemonicIndex(1);<br />
                        jMenuItem2.setMnemonic(java.awt.event.KeyEvent.VK_X);<br />
                        jMenuItem2.addActionListener(new ActionListener() {<br />
                            public void actionPerformed(ActionEvent evt) {<br />
                                System.exit(0);<br />
                            }<br />
                        });<br />
                    }<br />
                }<br />
                {<br />
                    jMenu2 = new JMenu();<br />
                    jMenuBar1.add(jMenu2);<br />
                    jMenu2.setText("Help");<br />
                    jMenu2.setDisplayedMnemonicIndex(0);<br />
                    jMenu2.setMnemonic(java.awt.event.KeyEvent.VK_H);<br />
                    {<br />
                        jMenuItem3 = new JMenuItem();<br />
                        jMenu2.add(jMenuItem3);<br />
                        jMenuItem3.setText("About GUI Ant-Miner");<br />
                        jMenuItem3.setDisplayedMnemonicIndex(0);<br />
                        jMenuItem3.setMnemonic(java.awt.event.KeyEvent.VK_A);<br />
                        jMenuItem3.addActionListener(new ActionListener() {<br />
                            public void actionPerformed(ActionEvent evt) {<br />
                                JDialog dialog = new JDialog(GUIID3JFrame.this, true);<br />
                                AboutGUIId3 inst = new AboutGUIId3(dialog, GUIID3JFrame.this);<br />
                                inst.setVisible(true);<br />
                            }<br />
                        });<br />
                    }<br />
                }<br />
            }<br />
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);<br />
            BorderLayout thisLayout = new BorderLayout();<br />
            this.getContentPane().setLayout(thisLayout);<br />
            this.setTitle("GUI ID3");<br />
            {<br />
                jTabbedPane1 = new JTabbedPane();<br />
                this.getContentPane().add(jTabbedPane1, BorderLayout.CENTER);<br />
                jTabbedPane1.setPreferredSize(new java.awt.Dimension(792, 542));<br />
                {<br />
                    jPanel2 = new JPanel();<br />
                    GridBagLayout jPanel2Layout = new GridBagLayout();<br />
                    jPanel2Layout.columnWeights = new double[] {1.0,1.0};<br />
                    jPanel2Layout.columnWidths = new int[] {400,420};<br />
                    jPanel2Layout.rowWeights = new double[] {1.0};<br />
                    jPanel2Layout.rowHeights = new int[] {};<br />
                    jTabbedPane1.addTab("Preprocess", null, jPanel2, null);<br />
                    //jPanel2.setLayout(jPanel2Layout);<br />
                    jPanel2.setPreferredSize(new java.awt.Dimension(787, 514));<br />
                    jPanel2.setLayout(jPanel2Layout);<br />
                    jPanel2.setMinimumSize(new java.awt.Dimension(400, 400));<br />
                    {<br />
                        jScrollPane1 = new JScrollPane();<br />
                        jPanel2.add(jScrollPane1, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                1.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTH,<br />
                                GridBagConstraints.HORIZONTAL,<br />
                                new Insets(72, 5, 5, 2),<br />
                                0,<br />
                                0));<br />
                        jScrollPane1.setBounds(7, 80, 385, 200);<br />
                        jScrollPane1.setBorder(BorderFactory.createTitledBorder("Attributes"));<br />
                        jScrollPane1.setSize(364, 200);<br />
                        jScrollPane1.setMinimumSize(new java.awt.Dimension(23, 240));<br />
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(385, 250));<br />
                        <br />
                    }<br />
                    {<br />
                        jPanel1 = new JPanel();<br />
                        jPanel2.add(jPanel1, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                1.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTH,<br />
                                GridBagConstraints.HORIZONTAL,<br />
                                new Insets(5, 5, 5, 2),<br />
                                0,<br />
                                0));<br />
                        GridBagLayout jPanel1Layout = new GridBagLayout();<br />
                        jPanel1Layout.columnWeights = new double[] { 0.1, 0.1,<br />
                        0.1, 0.1, 0.1, 0.1 };<br />
                        jPanel1Layout.columnWidths = new int[] {30,66,120,63,100,20};<br />
                        jPanel1Layout.rowHeights = new int[] {18,18};<br />
                        jPanel1Layout.rowWeights = new double[] {0.1,0.1};<br />
                        jPanel1.setLayout(jPanel1Layout);<br />
                        <br />
                        jPanel1.setBounds(7, 8, 385, 72);<br />
                        jPanel1.setBorder(BorderFactory.createTitledBorder("Relation"));<br />
                        jPanel1.setSize(320, 59);<br />
                        {<br />
                            jLabel1 = new JLabel();<br />
                            jPanel1.add(jLabel1, new GridBagConstraints(<br />
                                    1,<br />
                                    0,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabel1.setText("Relation: ");<br />
                            jLabel1<br />
                                    .setHorizontalTextPosition(SwingConstants.RIGHT);<br />
                            jLabel1<br />
                                    .setHorizontalAlignment(SwingConstants.RIGHT);<br />
                            jLabel1.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                        }<br />
                        {<br />
                            jLabel2 = new JLabel();<br />
                            jPanel1.add(jLabel2, new GridBagConstraints(<br />
                                    2,<br />
                                    0,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabel2.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                            jLabel2.setName("                   ");<br />
                            jLabel2.setText("                ");<br />
                        }<br />
                        {<br />
                            jLabel3 = new JLabel();<br />
                            jPanel1.add(jLabel3, new GridBagConstraints(<br />
                                    1,<br />
                                    1,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabel3.setText("Instances: ");<br />
                            jLabel3.setLayout(null);<br />
                            jLabel3.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                        }<br />
                        {<br />
                            jLabelNumberOfInstances = new JLabel();<br />
                            jPanel1.add(<br />
                                    jLabelNumberOfInstances,<br />
                                    new GridBagConstraints(<br />
                                    2,<br />
                                    1,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabelNumberOfInstances.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                            jLabelNumberOfInstances.setText(" ");<br />
                        }<br />
                        {<br />
                            jLabel5 = new JLabel();<br />
                            jPanel1.add(jLabel5, new GridBagConstraints(<br />
                                    3,<br />
                                    1,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabel5.setText("Attributes: ");<br />
                            jLabel5.setBounds(0, 0, 41, 16);<br />
                            jLabel5.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                        }<br />
                        {<br />
                            jLabelNumberOfAttributes = new JLabel();<br />
                            jPanel1.add(<br />
                                    jLabelNumberOfAttributes,<br />
                                    new GridBagConstraints(<br />
                                    4,<br />
                                    1,<br />
                                    1,<br />
                                    1,<br />
                                    0.0,<br />
                                    0.0,<br />
                                    GridBagConstraints.WEST,<br />
                                    GridBagConstraints.NONE,<br />
                                    new Insets(0, 0, 0, 0),<br />
                                    0,<br />
                                    0));<br />
                            jLabelNumberOfAttributes.setBounds(0, 0, 41, 16);<br />
                            jLabelNumberOfAttributes.setFont(new java.awt.Font("Dialog", 0, 12));<br />
                            jLabelNumberOfAttributes.setText("  ");<br />
                        }<br />
                        <br />
                    }<br />
                    {<br />
                        jPanel5 = new JPanel();<br />
                        BoxLayout jPanel5Layout = new BoxLayout(jPanel5, javax.swing.BoxLayout.Y_AXIS);<br />
                        jPanel2.add(jPanel5, new GridBagConstraints(<br />
                                1,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                1.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTH,<br />
                                GridBagConstraints.HORIZONTAL,<br />
                                new Insets(5, 2, 0, 5),<br />
                                0,<br />
                                0));<br />
                        jPanel5.setBounds(396, 8, 385, 250);<br />
                        jPanel5.setLayout(jPanel5Layout);<br />
                        jPanel5.setBorder(BorderFactory.createTitledBorder("Selected Attribute"));<br />
                        jPanel5.setMinimumSize(new java.awt.Dimension(300, 250));<br />
                        jPanel5.setSize(318, 250);<br />
                        {<br />
                            jPanel6 = new JPanel();<br />
                            GridBagLayout jPanel6Layout = new GridBagLayout();<br />
                            jPanel6Layout.columnWeights = new double[] {0.1,0.1,0.1,0.1,0.1,0.1};<br />
                            jPanel6Layout.columnWidths = new int[] {30,52,120,92,58,25};<br />
                            jPanel6Layout.rowWeights = new double[] {1.0,1.0,0.1};<br />
                            jPanel6Layout.rowHeights = new int[] {18,22,4};<br />
                            jPanel5.add(jPanel6);<br />
                            jPanel6.setLayout(jPanel6Layout);<br />
                            jPanel6.setBounds(6, 19, 369, 41);<br />
                            jPanel6.setPreferredSize(new java.awt.Dimension(376, 35));<br />
                            jPanel6.setMinimumSize(new java.awt.Dimension(10, 35));<br />
                            {<br />
                                jLabel8 = new JLabel();<br />
                                jPanel6.add(jLabel8, new GridBagConstraints(<br />
                                        2,<br />
                                        0,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabel8.setFont(new java.awt.Font("Dialog",0,12));<br />
                                jLabel8.setText(" ");<br />
                            }<br />
                            {<br />
                                jLabel9 = new JLabel();<br />
                                jPanel6.add(jLabel9, new GridBagConstraints(<br />
                                        1,<br />
                                        1,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabel9.setText("Missing: ");<br />
                                jLabel9.setFont(new java.awt.Font("Dialog",0,12));<br />
                                jLabel9.setHorizontalAlignment(SwingConstants.RIGHT);<br />
                                jLabel9.setHorizontalTextPosition(SwingConstants.RIGHT);<br />
                            }<br />
                            {<br />
                                jLabel10 = new JLabel();<br />
                                jPanel6.add(jLabel10, new GridBagConstraints(<br />
                                        2,<br />
                                        1,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabel10.setFont(new java.awt.Font("Dialog",0,12));<br />
                                jLabel10.setText(" ");<br />
                            }<br />
                            {<br />
                                jLabel11 = new JLabel();<br />
                                jPanel6.add(jLabel11, new GridBagConstraints(<br />
                                        3,<br />
                                        1,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabel11.setText("Distinct Values: ");<br />
                                jLabel11.setFont(new java.awt.Font("Dialog",0,12));<br />
                            }<br />
                            {<br />
                                jLabelDistinct = new JLabel();<br />
                                jPanel6.add(<br />
                                        jLabelDistinct,<br />
                                        new GridBagConstraints(<br />
                                        4,<br />
                                        1,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabelDistinct.setFont(new java.awt.Font("Dialog",0,12));<br />
                                jLabelDistinct.setText(" ");<br />
                            }<br />
                            {<br />
                                jLabel7 = new JLabel();<br />
                                jPanel6.add(jLabel7, new GridBagConstraints(<br />
                                        1,<br />
                                        0,<br />
                                        1,<br />
                                        1,<br />
                                        0.0,<br />
                                        0.0,<br />
                                        GridBagConstraints.WEST,<br />
                                        GridBagConstraints.NONE,<br />
                                        new Insets(0, 0, 0, 0),<br />
                                        0,<br />
                                        0));<br />
                                jLabel7.setText("Name: ");<br />
                                jLabel7.setFont(new java.awt.Font(<br />
                                        "Dialog",<br />
                                        0,<br />
                                        12));<br />
                                jLabel7.setBounds(0, 0, 45, 16);<br />
                            }<br />
                        }<br />
                        {<br />
                            jScrollPane3 = new JScrollPane();<br />
                            jPanel5.add(jScrollPane3);<br />
                            jScrollPane3.setBounds(5, 63, 374, 181);<br />
                            jScrollPane3.setPreferredSize(new java.awt.Dimension(368, 181));<br />
                        }<br />
                    }<br />
                    {<br />
                        jPanel4 = new JPanel();<br />
                        BorderLayout jPanel4Layout = new BorderLayout();<br />
                        jPanel4.setLayout(jPanel4Layout);<br />
                        jPanel2.add(jPanel4, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(263, 4, 5, 7), 0, 0));<br />
                        jPanel4.setBounds(398, 264, 381, 225);<br />
                        jPanel4.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));<br />
                        jPanel4.setMinimumSize(new java.awt.Dimension(10, 210));<br />
                        jPanel4.setSize(337, 200);<br />
                        jPanel4.setPreferredSize(new java.awt.Dimension(381, 210));<br />
                    }<br />
                }<br />
                {<br />
                    jPanel3 = new JPanel();<br />
                    jTabbedPane1.addTab("Classify", null, jPanel3, null);<br />
                    GridBagLayout jPanel3Layout = new GridBagLayout();<br />
                    jPanel3Layout.columnWeights = new double[] {0.0,1.0};<br />
                    jPanel3Layout.columnWidths = new int[] {150,500};<br />
                    jPanel3Layout.rowWeights = new double[] {1.0};<br />
                    jPanel3Layout.rowHeights = new int[] {7};<br />
                    jPanel3.setLayout(jPanel3Layout);<br />
                    {<br />
                        jButton1 = new JButton();<br />
                        jPanel3.add(jButton1, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                0.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTHWEST,<br />
                                GridBagConstraints.NONE,<br />
                                new Insets(292, 10, 0, 0),<br />
                                0,<br />
                                0));<br />
                        jButton1.setText("Start");<br />
                        jButton1.setBounds(19, 234, 99, 24);<br />
                        jButton1.setToolTipText("Start classification. This operation may take a few minutes.");<br />
                        jButton1.setSize(75, 23);<br />
                        jButton1.setMinimumSize(new java.awt.Dimension(75, 23));<br />
                        jButton1.setMaximumSize(new java.awt.Dimension(75, 23));<br />
                        jButton1.setPreferredSize(new java.awt.Dimension(75, 23));<br />
                        jButton1.addActionListener(new ActionListener() {<br />
                            public void actionPerformed(ActionEvent evt) {<br />
                                setIsClassifying(true);<br />
                                <br />
                                cv = new ID3(GUIID3JFrame.this);<br />
                                <br />
                                cv.setAttributesArray(attributesArray);<br />
                                cv.setDataInstancesArray(dataInstancesArray);<br />
                                cv.start();<br />
                            }<br />
                        });<br />
                    }<br />
                   <br />
                        <br />
  <br />
                    {<br />
                        jScrollPane2 = new JScrollPane();<br />
                        jPanel3.add(jScrollPane2, new GridBagConstraints(<br />
                                1,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                1.0,<br />
                                1.0,<br />
                                GridBagConstraints.CENTER,<br />
                                GridBagConstraints.BOTH,<br />
                                new Insets(5, 2, 0, 3),<br />
                                0,<br />
                                0));<br />
                        jScrollPane2.setBounds(271, 8, 509, 501);<br />
                        jScrollPane2.setBorder(BorderFactory.createTitledBorder("Output"));<br />
                        {<br />
                            jTextArea1 = new JTextArea();<br />
                            jScrollPane2.setViewportView(jTextArea1);<br />
                            jTextArea1.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));<br />
                            jTextArea1.setEditable(false);<br />
                        }<br />
                    }<br />
                    {<br />
                        jCheckBox1 = new JCheckBox();<br />
                        jPanel3.add(jCheckBox1, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                0.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTHWEST,<br />
                                GridBagConstraints.NONE,<br />
                                new Insets(212, 10, 0, 0),<br />
                                0,<br />
                                0));<br />
                        jCheckBox1.setText("Clear output screen");<br />
                        jCheckBox1.setBounds(17, 201, 133, 30);<br />
                        jCheckBox1.setFont(new java.awt.Font("Dialog",0,12));<br />
                        jCheckBox1.setSelected(true);<br />
                        jCheckBox1.setToolTipText("Clear the output screen the next time a classification task is run.");<br />
                    }<br />
                    {<br />
                        jCheckBox2 = new JCheckBox();<br />
                        jPanel3.add(jCheckBox2, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                0.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTHWEST,<br />
                                GridBagConstraints.NONE,<br />
                                new Insets(235, 10, 0, 0),<br />
                                0,<br />
                                0));<br />
                        jCheckBox2.setText("Print test set");<br />
                        jCheckBox2.setFont(new java.awt.Font("Dialog",0,12));<br />
                    }<br />
                    {<br />
                        jCheckBox3 = new JCheckBox();<br />
                        jPanel3.add(jCheckBox3, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                0.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTHWEST,<br />
                                GridBagConstraints.NONE,<br />
                                new Insets(258, 10, 0, 0),<br />
                                0,<br />
                                0));<br />
                        jCheckBox3.setText("Print training set");<br />
                        jCheckBox3.setFont(new java.awt.Font("Dialog",0,12));<br />
                    }<br />
                    {<br />
                        jButton2 = new JButton();<br />
                        jPanel3.add(jButton2, new GridBagConstraints(<br />
                                0,<br />
                                0,<br />
                                1,<br />
                                1,<br />
                                0.0,<br />
                                0.0,<br />
                                GridBagConstraints.NORTHWEST,<br />
                                GridBagConstraints.NONE,<br />
                                new Insets(292, 95, 0, 0),<br />
                                0,<br />
                                0));<br />
                        jButton2.setText("Cancel");<br />
                        jButton2.setToolTipText("Cancel task.");<br />
                        jButton2.setPreferredSize(new java.awt.Dimension(75, 23));<br />
                        jButton2.setMaximumSize(new java.awt.Dimension(75, 23));<br />
                        jButton2.setMinimumSize(new java.awt.Dimension(75, 23));<br />
                        jButton2.setEnabled(false);<br />
                        jButton2.addActionListener(new ActionListener() {<br />
                            public void actionPerformed(ActionEvent evt) {<br />
                                cv.stop();<br />
                            }<br />
                        });<br />
                        jButton2.addMouseListener(new MouseAdapter() {<br />
                            public void mouseExited(MouseEvent evt) {<br />
                                if (isClassifying)<br />
                                    jTabbedPane1<br />
                                        .setCursor(Cursor<br />
                                            .getPredefinedCursor(Cursor.WAIT_CURSOR));<br />
                            }<br />
                            public void mouseEntered(MouseEvent evt) {<br />
                                jTabbedPane1<br />
                                        .setCursor(Cursor<br />
                                        .getPredefinedCursor(Cursor.DEFAULT_CURSOR));<br />
                            }<br />
                        });<br />
                    }<br />
                }<br />
            }<br />
        } catch (Exception e) {<br />
            e.printStackTrace();<br />
        }<br />
        <br />
        pack();<br />
        this.setSize(800, 600);<br />
        setGraph();<br />
        <br />
        jTabbedPane1.setEnabledAt(1,false);<br />
        jTabbedPane1.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));<br />
        {<br />
            jPanel8 = new JPanel();<br />
            GridBagLayout jPanel8Layout = new GridBagLayout();<br />
            jPanel8Layout.columnWeights = new double[] {0.1,0.1};<br />
            jPanel8Layout.columnWidths = new int[] {7,7};<br />
            jPanel8Layout.rowWeights = new double[] {0.1};<br />
            jPanel8Layout.rowHeights = new int[] {7};<br />
            jPanel8.setLayout(jPanel8Layout);<br />
            this.getContentPane().add(jPanel8, BorderLayout.SOUTH);<br />
            jPanel8.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));<br />
            {<br />
                jProgressBar1 = new JProgressBar();<br />
                jPanel8.add(jProgressBar1, new GridBagConstraints(<br />
                        1,<br />
                        0,<br />
                        1,<br />
                        1,<br />
                        0.0,<br />
                        0.0,<br />
                        GridBagConstraints.EAST,<br />
                        GridBagConstraints.NONE,<br />
                        new Insets(0, 0, 0, 0),<br />
                        0,<br />
                        0));<br />
                jProgressBar1.setPreferredSize(new java.awt.Dimension(140, 18));<br />
            }<br />
            {<br />
                jLabel17 = new JLabel();<br />
                jPanel8.add(jLabel17, new GridBagConstraints(<br />
                        0,<br />
                        0,<br />
                        1,<br />
                        1,<br />
                        0.0,<br />
                        0.0,<br />
                        GridBagConstraints.WEST,<br />
                        GridBagConstraints.NONE,<br />
                        new Insets(0, 0, 0, 0),<br />
                        0,<br />
                        0));<br />
                jLabel17.setText("Idle");<br />
            }<br />
        }<br />
        <br />
    }<br />
    public void setLabel2(String label){<br />
        jLabel2.setText(label);<br />
    }<br />
    <br />
    public JLabel getJLabel2(){<br />
        return jLabel2;<br />
    }<br />
    public boolean getJCheckBox1IsSelected(){<br />
        return jCheckBox1.isSelected();<br />
    }<br />
    public boolean getJCheckBox2IsSelected(){<br />
        return jCheckBox2.isSelected();<br />
    }<br />
    public boolean getJCheckBox3IsSelected(){<br />
        return jCheckBox3.isSelected();<br />
    }<br />
    public String getjTextField2Value(){<br />
        return jTextField2.getText();<br />
    }<br />
    public JTextField getJTextField1(){<br />
        return jTextField1;<br />
    }<br />
    public JTextField getJTextField3(){<br />
        return jTextField3;<br />
    }<br />
    public JTextField getJTextField4(){<br />
        return jTextField4;<br />
    }<br />
    public JTextField getJTextField5(){<br />
        return jTextField5;<br />
    }<br />
    public JTextField getJTextField6(){<br />
        return jTextField6;<br />
    }<br />
    public JTextArea getJTextArea1(){<br />
        return jTextArea1;<br />
    }<br />
    public JProgressBar getJProgressBar1(){<br />
        return jProgressBar1;<br />
    }<br />
    public void setTableAtt1(Attribute [] attributesArray){<br />
        String numberAndName[][] = new String[attributesArray.length][2];<br />
        for(int n=0; n < attributesArray.length; n++){<br />
            numberAndName[n][0] = new Integer(n + 1).toString();<br />
            numberAndName[n][1] = attributesArray[n].getAttributeName();<br />
        }<br />
        <br />
        jTable1Model = new MyTableModel(<br />
                numberAndName,<br />
                new String[] { "#", "Name" });<br />
        jTable1 = new JTable();<br />
        jScrollPane1.setViewportView(jTable1);<br />
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);<br />
        jTable1.setModel(jTable1Model);<br />
        <br />
        ListSelectionModel rowSM = jTable1.getSelectionModel();<br />
        rowSM.addListSelectionListener(new ListSelectionListener() {<br />
            public void valueChanged(ListSelectionEvent e) {<br />
                //Ignore extra messages.<br />
                if (e.getValueIsAdjusting()) return;<br />
                ListSelectionModel lsm = (ListSelectionModel)e.getSource();<br />
                if (lsm.isSelectionEmpty()) {<br />
                    //no rows are selected<br />
                } else {<br />
                    int selectedRow = lsm.getMinSelectionIndex();<br />
                    setTableAtt2(selectedRow, myFileReader.generateStats(selectedRow));<br />
                    jLabel8.setText(myFileReader.getAttributesArray()[selectedRow].getAttributeName());<br />
                    <br />
                    DecimalFormat myFormatter = new DecimalFormat("###.#");<br />
                    jLabel10.setText(String.valueOf(myFileReader.calculateMissing(selectedRow))+ " ("+myFormatter.format(((float) myFileReader.calculateMissing(selectedRow)/myFileReader.getDataInstancesArray().length)*100)+"%)");<br />
                    <br />
                    jLabelDistinct.setText(String.valueOf(jTable2.getModel().getRowCount()));<br />
                }<br />
            }<br />
        });<br />
    }<br />
    public void setTableAtt2(int attributeIndex, int [] typesOccurences){<br />
        String labelAndCount[][] = new String[typesOccurences.length][2];<br />
        for(int n=0; n < typesOccurences.length; n++){<br />
            labelAndCount[n][0] = myFileReader.getAttributesArray()[attributeIndex].getTypes()[n];<br />
            labelAndCount[n][1] = new Integer(typesOccurences[n]).toString();<br />
        }<br />
        jTable2Model = new MyTableModel(<br />
                labelAndCount,<br />
                new String[] { "Attribute Value", "Quantity of Instances" });<br />
        jTable2 = new JTable();<br />
        jScrollPane3.setViewportView(jTable2);<br />
        jTable2.setModel(jTable2Model);<br />
    }<br />
    <br />
    public void setGraph(){<br />
        canvas1 = new AttGraph();<br />
        jPanel4.add(canvas1, BorderLayout.CENTER);<br />
        <br />
        //canvas1.setSize(347, 220);<br />
        canvas1.setBounds(2, 2, 377, 221);<br />
    }<br />
    <br />
    public void setInitialState(){<br />
        jTabbedPane1.setEnabledAt(1,false);<br />
        jTabbedPane1.setSelectedIndex(0);<br />
        if(jTable1 != null){<br />
            jTable1.removeAll();<br />
            jTable1.setVisible(false);<br />
            jTable1Model = null;<br />
        }<br />
        if(jTable2 != null){<br />
            jTable2.removeAll();<br />
            jTable2.setVisible(false);<br />
            jTable2Model = null;<br />
        }<br />
        jLabel2.setText("");<br />
        jLabelNumberOfInstances.setText("");<br />
        jLabelNumberOfAttributes.setText("");<br />
        jLabel8.setText("");<br />
        jLabel10.setText("");<br />
        jLabelDistinct.setText("");<br />
    }<br />
    <br />
    public void setIsClassifying(boolean b){<br />
        if(b){<br />
            jLabel17.setText("Classifying " + jLabel2.getText() + "...");<br />
            isClassifying = true;<br />
            jMenuItem1.setEnabled(false);<br />
            jButton1.setEnabled(false);<br />
            jButton2.setEnabled(true);<br />
            jTabbedPane1.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));<br />
        }else{<br />
            jLabel17.setText("Idle");<br />
            isClassifying = false;<br />
            jMenuItem1.setEnabled(true);<br />
            jButton1.setEnabled(true);<br />
            jButton2.setEnabled(false);<br />
            jTabbedPane1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));<br />
        }<br />
    }<br />
    <br />
    public MyFileReader getMyFileReader(){<br />
        return myFileReader;<br />
    }<br />
    <br />
    /**<br />
     * Auto-generated method for setting the popup menu for a component<br />
     */<br />
    private void setComponentPopupMenu(final java.awt.Component parent, final javax.swing.JPopupMenu menu) {<br />
        parent.addMouseListener(new java.awt.event.MouseAdapter() {<br />
            public void mousePressed(java.awt.event.MouseEvent e) {<br />
                if(e.isPopupTrigger())<br />
                    menu.show(parent, e.getX(), e.getY());<br />
            }<br />
            public void mouseReleased(java.awt.event.MouseEvent e) {<br />
                if(e.isPopupTrigger())<br />
                    menu.show(parent, e.getX(), e.getY());<br />
            }<br />
        });<br />
    }<br />
    <br />
    public JLabel getJLabel17() {<br />
        return jLabel17;<br />
    }<br />
    <br />
    class MyTableModel extends DefaultTableModel{<br />
        /**<br />
         *<br />
         */<br />
        private static final long serialVersionUID = 1L;<br />
        public MyTableModel(Object[][] data, Object[] columnNames) {<br />
            setDataVector(data, columnNames);<br />
        }<br />
        public boolean isCellEditable(int row, int column) {<br />
            return false;<br />
        }<br />
    }<br />
    <br />

GeneralRe: help:id3 decision tree Pin
leavetrace24-Oct-10 23:16
leavetrace24-Oct-10 23:16 
GeneralRe: help:id3 decision tree Pin
leavetrace24-Oct-10 23:18
leavetrace24-Oct-10 23:18 
GeneralMy vote of 1 Pin
Code Deamon20-Apr-09 4:27
Code Deamon20-Apr-09 4:27 
Questioncan not work with more than two class Pin
leavetrace1-Jan-09 18:50
leavetrace1-Jan-09 18:50 
GeneralI think there's a mistake, correct me if i'm wrong Pin
rock_me1-Jul-08 6:56
rock_me1-Jul-08 6:56 
QuestionDo u interested in association rule? Pin
alice_nhan27-Nov-07 4:39
alice_nhan27-Nov-07 4:39 
Answerfind duplicate item in childsample [modified] Pin
alice_nhan27-Nov-07 4:34
alice_nhan27-Nov-07 4:34 
GeneralRe: find duplicate item in childsample Pin
leavetrace12-Jan-09 11:36
leavetrace12-Jan-09 11:36 
GeneralTranslated Version (English) of this Algorithm Pin
kirankonathala20-Apr-07 10:16
kirankonathala20-Apr-07 10:16 
GeneralRe: Translated Version (English) of this Algorithm Pin
kroket30-Dec-07 0:40
kroket30-Dec-07 0:40 
GeneralRe: Translated Version (English) of this Algorithm Pin
jingweidu25-Mar-08 0:58
jingweidu25-Mar-08 0:58 
GeneralRe: Translated Version (English) of this Algorithm Pin
Vaasugi16-Aug-08 21:16
Vaasugi16-Aug-08 21:16 
GeneralRe: Translated Version (English) of this Algorithm Pin
wesemy19-Aug-08 3:51
wesemy19-Aug-08 3:51 
GeneralRe: Translated Version (English) of this Algorithm Pin
mikaal10018-Mar-09 6:49
mikaal10018-Mar-09 6:49 
GeneralRe: Translated Version (English) of this Algorithm Pin
u06050943-Apr-09 16:47
u06050943-Apr-09 16:47 
GeneralRe: Translated Version (English) of this Algorithm Pin
Code Deamon20-Apr-09 4:16
Code Deamon20-Apr-09 4:16 
GeneralComments in Portugese Pin
kirankonathala19-Apr-07 12:59
kirankonathala19-Apr-07 12:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.