⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrixpanel.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	}      });    optionsPanel = new JPanel( new GridBagLayout() ); //all the rest of the panels are in here.    final JPanel p2 = new JPanel( new BorderLayout() );  //this has class colour panel    final JPanel p3 = new JPanel( new GridBagLayout() ); //this has update and select buttons    final JPanel p4 = new JPanel( new GridBagLayout() ); //this has the slider bars and combobox    GridBagConstraints gbc = new GridBagConstraints();         m_plotLBSizeD = m_plotSizeLb.getPreferredSize();    m_pointLBSizeD = m_pointSizeLb.getPreferredSize();    m_pointSizeLb.setText("PointSize: [1]");    m_pointSizeLb.setPreferredSize( m_pointLBSizeD );    m_resampleBt.setPreferredSize( m_selAttrib.getPreferredSize() );    gbc.fill = GridBagConstraints.HORIZONTAL;    gbc.anchor = GridBagConstraints.NORTHWEST;    gbc.insets = new Insets(2,2,2,2);    p4.add(m_plotSizeLb, gbc);    gbc.weightx=1; gbc.gridwidth = GridBagConstraints.REMAINDER;    p4.add(m_plotSize, gbc);    gbc.weightx=0; gbc.gridwidth = GridBagConstraints.RELATIVE;    p4.add(m_pointSizeLb, gbc);    gbc.weightx=1; gbc.gridwidth = GridBagConstraints.REMAINDER;    p4.add(m_pointSize, gbc);    gbc.weightx=0; gbc.gridwidth = GridBagConstraints.RELATIVE;    p4.add( new JLabel("Jitter: "), gbc);    gbc.weightx=1; gbc.gridwidth = GridBagConstraints.REMAINDER;    p4.add(m_jitter, gbc);    p4.add(m_classAttrib, gbc);          gbc.gridwidth = GridBagConstraints.REMAINDER;    gbc.weightx=1;    gbc.fill = GridBagConstraints.NONE;    p3.add(m_updateBt, gbc);    p3.add(m_selAttrib, gbc);    gbc.gridwidth = GridBagConstraints.RELATIVE;    gbc.weightx = 0;    gbc.fill = GridBagConstraints.VERTICAL;    gbc.anchor = GridBagConstraints.WEST;    p3.add(m_resampleBt, gbc);    gbc.gridwidth = GridBagConstraints.REMAINDER;    p3.add(m_resamplePercent, gbc);        p2.setBorder(BorderFactory.createTitledBorder("Class Colour"));    p2.add(m_cp, BorderLayout.SOUTH);    gbc.insets = new Insets(8,5,2,5);    gbc.anchor = GridBagConstraints.SOUTHWEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx=1;    gbc.gridwidth = GridBagConstraints.RELATIVE;    optionsPanel.add(p4, gbc);    gbc.gridwidth = GridBagConstraints.REMAINDER;    optionsPanel.add(p3, gbc);    optionsPanel.add(p2, gbc);    this.addComponentListener( new ComponentAdapter() {	public void componentResized(ComponentEvent cv) {	  m_js.setMinimumSize( new Dimension(MatrixPanel.this.getWidth(),					     MatrixPanel.this.getHeight()					     -optionsPanel.getPreferredSize().height-10));	  jp.setDividerLocation( MatrixPanel.this.getHeight()-optionsPanel.getPreferredSize().height-10 );	}      });    optionsPanel.setMinimumSize( new Dimension(0,0) );    jp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, m_js, optionsPanel);    jp.setOneTouchExpandable(true);    jp.setResizeWeight(1);    this.setLayout( new BorderLayout() );    this.add(jp, BorderLayout.CENTER);    /** Setting up the initial color list **/    for(int i=0; i<m_defaultColors.length-1; i++)      m_colorList.addElement(m_defaultColors[i]);          /** Initializing internal fields and components **/    m_selectedAttribs = m_attribList.getSelectedIndices();    m_plotsPanel = new Plot();    m_plotsPanel.setLayout(null);    m_js.getHorizontalScrollBar().setUnitIncrement( 10 );    m_js.getVerticalScrollBar().setUnitIncrement( 10 );     m_js.setViewportView( m_plotsPanel );    m_js.setColumnHeaderView( m_plotsPanel.getColHeader() );    m_js.setRowHeaderView( m_plotsPanel.getRowHeader() );    final JLabel lb = new JLabel(" Plot Matrix");    lb.setFont(f); lb.setForeground(fontColor);    lb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);    m_js.setCorner(JScrollPane.UPPER_LEFT_CORNER, lb);    m_cp.setInstances(m_data);    m_cp.setBorder(BorderFactory.createEmptyBorder(15,10,10,10));    m_cp.addRepaintNotify(m_plotsPanel);    //m_updateBt.doClick(); //not until setting up the instances  }  /** Initializes internal data fields, i.e. data values, type, missing and color cache arrays    */  public void initInternalFields() {    Instances inst = m_data;    m_classIndex = m_classAttrib.getSelectedIndex();    m_selectedAttribs = m_attribList.getSelectedIndices();    double minC=0, maxC=0;    /** Resampling  **/    if(Double.parseDouble(m_resamplePercent.getText())<100) {        inst = new Instances(m_data, 0, m_data.numInstances());        inst.randomize( new Random(Integer.parseInt(m_rseed.getText())) );                //System.err.println("gettingPercent: " +        //                   Math.round(        //                     Double.parseDouble(m_resamplePercent.getText())        //                     / 100D * m_data.numInstances()        //                             )        //                  );                inst = new Instances(inst,                  0,                 (int)Math.round(Double.parseDouble(m_resamplePercent.getText())                 / 100D*inst.numInstances())                            );    }        m_points = new int[inst.numInstances()][m_selectedAttribs.length]; //changed    m_pointColors = new int[inst.numInstances()];    m_missing = new boolean[inst.numInstances()][m_selectedAttribs.length+1]; //changed    m_type = new int[2]; //[m_selectedAttribs.length]; //changed    jitterVals = new int[inst.numInstances()][2];          /** Setting up the color list for non-numeric attribute as well as jittervals**/    if(!(inst.attribute(m_classIndex).isNumeric())) {	        for(int i=m_colorList.size(); i<inst.attribute(m_classIndex).numValues()+1; i++) {	Color pc = m_defaultColors[i % 10];	int ija =  i / 10;	ija *= 2; 	for (int j=0;j<ija;j++) {	    pc = pc.darker();	}	m_colorList.addElement(pc);      }	        for(int i=0; i<inst.numInstances(); i++) {	//set to black for missing class value which is last colour is default list	if(inst.instance(i).isMissing(m_classIndex))	  m_pointColors[i] =  m_defaultColors.length-1;	else	  m_pointColors[i] = (int) inst.instance(i).value(m_classIndex);	jitterVals[i][0] = rnd.nextInt(m_jitter.getValue()+1)	  - m_jitter.getValue()/2;	jitterVals[i][1] = rnd.nextInt(m_jitter.getValue()+1)	  - m_jitter.getValue()/2;	            }    }    /** Setting up color variations for numeric attribute as well as jittervals **/    else {      for(int i=0; i<inst.numInstances(); i++) {	if(!(inst.instance(i).isMissing(m_classIndex))) {	  minC = maxC = inst.instance(i).value(m_classIndex);	  break;	}      }	        for(int i=1; i<inst.numInstances(); i++) {	if(!(inst.instance(i).isMissing(m_classIndex))) {	  if(minC > inst.instance(i).value(m_classIndex))	    minC = inst.instance(i).value(m_classIndex);	  if(maxC < inst.instance(i).value(m_classIndex))	    maxC = inst.instance(i).value(m_classIndex);	}      }	        for(int i=0; i<inst.numInstances(); i++) {	double r = (inst.instance(i).value(m_classIndex) - minC) / (maxC - minC);	r = (r * 240) + 15;	m_pointColors[i] = (int)r;	jitterVals[i][0] = rnd.nextInt(m_jitter.getValue()+1)	  - m_jitter.getValue()/2;	jitterVals[i][1] = rnd.nextInt(m_jitter.getValue()+1)	  - m_jitter.getValue()/2;      }    }    /** Creating local cache of the data values **/    double min[]=new double[m_selectedAttribs.length], max=0;  //changed    double ratio[] = new double[m_selectedAttribs.length];     //changed    double cellSize = m_plotSize.getValue(), temp1=0, temp2=0;    for(int j=0; j<m_selectedAttribs.length; j++) {      int i;      for(i=0; i<inst.numInstances(); i++) {	min[j] = max = 0;	if(!(inst.instance(i).isMissing(m_selectedAttribs[j]))) {	  min[j] = max = inst.instance(i).value(m_selectedAttribs[j]);	  break;	}      }      for( i=i; i<inst.numInstances(); i++ ) {	if(!(inst.instance(i).isMissing(m_selectedAttribs[j]))) {	  if(inst.instance(i).value(m_selectedAttribs[j]) < min[j])	    min[j] = inst.instance(i).value(m_selectedAttribs[j]);	  if(inst.instance(i).value(m_selectedAttribs[j]) > max)	    max = inst.instance(i).value(m_selectedAttribs[j]);	}      }      ratio[j] =  cellSize / (max - min[j]);    }    boolean classIndexProcessed=false;    for(int j=0; j<m_selectedAttribs.length; j++) {      if(inst.attribute(m_selectedAttribs[j]).isNominal() || inst.attribute(m_selectedAttribs[j]).isString()) {	  //m_type[0][j] = 1;  m_type[1][j] = inst.attribute(m_selectedAttribs[j]).numValues();	temp1 = cellSize/(double)inst.attribute(m_selectedAttribs[j]).numValues(); //m_type[1][j];	temp2 = temp1/2;	for(int i=0; i<inst.numInstances(); i++) {	  m_points[i][j] = (int) Math.round(temp2+temp1*inst.instance(i).value(m_selectedAttribs[j]));	  if(inst.instance(i).isMissing(m_selectedAttribs[j])) {	    m_missing[i][j] = true;    //represents missing value	    if(m_selectedAttribs[j]==m_classIndex) {		m_missing[i][m_missing[0].length-1] = true;		classIndexProcessed = true;	    }	  }	}      }      else {	  //m_type[0][j] = m_type[1][j] = 0;	for(int i=0; i<inst.numInstances(); i++) {	  m_points[i][j] = (int) Math.round((inst.instance(i).value(m_selectedAttribs[j])					     -min[j])*ratio[j]);		  if(inst.instance(i).isMissing(m_selectedAttribs[j])) {	    m_missing[i][j] = true;    //represents missing value	    if(m_selectedAttribs[j]==m_classIndex) {		m_missing[i][m_missing[0].length-1] = true;		classIndexProcessed = true;	    }	  }	}      }    }    if(inst.attribute(m_classIndex).isNominal() || inst.attribute(m_classIndex).isString()) {	m_type[0] = 1; m_type[1] = inst.attribute(m_classIndex).numValues();    }    else	m_type[0] = m_type[1] = 0;    if(classIndexProcessed==false) {  //class Index has not been processed as class index is not among the selected attribs	for(int i=0; i<inst.numInstances(); i++) {	    if(inst.instance(i).isMissing(m_classIndex))		m_missing[i][m_missing[0].length-1] = true;	}    }    m_cp.setColours(m_colorList);  }  /** Sets up the UI's attributes lists    */    public void setupAttribLists() {    String [] tempAttribNames = new String[m_data.numAttributes()];    String type;    m_classAttrib.removeAllItems();    for(int i=0; i<tempAttribNames.length; i++) {      switch (m_data.attribute(i).type()) {      case Attribute.NOMINAL:	type = " (Nom)";	break;      case Attribute.NUMERIC:	type = " (Num)";	break;      case Attribute.STRING:	type = " (Str)";	break;      case Attribute.DATE:	type = " (Dat)";	break;      case Attribute.RELATIONAL:	type = " (Rel)";	break;      default:	type = " (???)";      }      tempAttribNames[i] = new String("Colour: "+m_data.attribute(i).name()+" "+type);      m_classAttrib.addItem(tempAttribNames[i]);    }    if (m_data.classIndex() == -1)      m_classAttrib.setSelectedIndex(tempAttribNames.length - 1);    else      m_classAttrib.setSelectedIndex(m_data.classIndex());    m_attribList.setListData(tempAttribNames);    m_attribList.setSelectionInterval(0, tempAttribNames.length-1);  }  /** Calculates the percentage to resample    */  public void setPercent() {    if(m_data.numInstances() > 700) {      double percnt = 500D/m_data.numInstances()*100;           percnt *= 100;      percnt = Math.round(percnt);      percnt /= 100;      m_resamplePercent.setText(""+percnt);    }    else      m_resamplePercent.setText("100");  }  /** This method changes the Instances object of this class to a new one. It also does all the necessary      initializations for displaying the panel. This must be called before trying to display the panel.      @param newInst The new set of Instances  */  public void setInstances(Instances newInst) {    m_data = newInst;    setPercent();    setupAttribLists();    m_rseed.setText("1");    initInternalFields();    m_cp.setInstances(m_data);    m_cp.setCindex(m_classIndex);    m_updateBt.doClick();  }  /**     Main method for testing this class  */  public static void main(String [] args)  {    final JFrame jf = new JFrame("Weka Explorer: MatrixPanel");    final JButton setBt = new JButton("Set Instances");    Instances data = null;    try {      if(args.length==1)	data = new Instances( new BufferedReader( new FileReader(args[0])) );       else {	System.out.println("Usage: MatrixPanel <arff file>"); 	System.exit(-1);      }    } catch(IOException ex) { ex.printStackTrace(); System.exit(-1); }         final MatrixPanel mp = new MatrixPanel();    mp.setInstances(data);    setBt.addActionListener( new ActionListener() {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -