📄 kstar.java
字号:
* Gets the method to use for handling missing values. Will be one of * M_NORMAL, M_AVERAGE, M_MAXDIFF or M_DELETE. * * @return the method used for handling missing values. */ public SelectedTag getMissingMode() { return new SelectedTag(m_MissingMode, TAGS_MISSING); } /** * Sets the method to use for handling missing values. Values other than * M_NORMAL, M_AVERAGE, M_MAXDIFF and M_DELETE will be ignored. * * @param newMode the method to use for handling missing values. */ public void setMissingMode(SelectedTag newMode) { if (newMode.getTags() == TAGS_MISSING) { m_MissingMode = newMode.getSelectedTag().getID(); } } /** * Returns an enumeration describing the available options * * @return an enumeration of all the available options */ public Enumeration listOptions() { Vector optVector = new Vector( 3 ); optVector.addElement(new Option( "\tManual blend setting (default 20%)\n", "B", 1, "-B <num>")); optVector.addElement(new Option( "\tEnable entropic auto-blend setting (symbolic class only)\n", "E", 0, "-E")); optVector.addElement(new Option( "\tSpecify the missing value treatment mode (default a)\n" +"\tValid options are: a(verage), d(elete), m(axdiff), n(ormal)\n", "M", 1,"-M <char>")); return optVector.elements(); } /** * Set the global blend parameter * @param b the value for global blending */ public void setGlobalBlend(int b) { m_GlobalBlend = b; if ( m_GlobalBlend > 100 ) { m_GlobalBlend = 100; } if ( m_GlobalBlend < 0 ) { m_GlobalBlend = 0; } } /** * Get the value of the global blend parameter * @return the value of the global blend parameter */ public int getGlobalBlend() { return m_GlobalBlend; } /** * Set whether entropic blending is to be used. * @param e true if entropic blending is to be used */ public void setEntropicAutoBlend(boolean e) { if (e) { m_BlendMethod = B_ENTROPY; } else { m_BlendMethod = B_SPHERE; } } /** * Get whether entropic blending being used * @return true if entropic blending is used */ public boolean getEntropicAutoBlend() { if (m_BlendMethod == B_ENTROPY) { return true; } return false; } /** * Parses a given list of options. Valid options are: * ... * * @param options the list of options as an array of strings * @exception Exception if an option is not supported */ public void setOptions(String[] options) throws Exception { String debug = "(KStar.setOptions)"; String blendStr = Utils.getOption('B', options); if (blendStr.length() != 0) { setGlobalBlend(Integer.parseInt(blendStr)); } setEntropicAutoBlend(Utils.getFlag('E', options)); String missingModeStr = Utils.getOption('M', options); if (missingModeStr.length() != 0) { switch ( missingModeStr.charAt(0) ) { case 'a': setMissingMode(new SelectedTag(M_AVERAGE, TAGS_MISSING)); break; case 'd': setMissingMode(new SelectedTag(M_DELETE, TAGS_MISSING)); break; case 'm': setMissingMode(new SelectedTag(M_MAXDIFF, TAGS_MISSING)); break; case 'n': setMissingMode(new SelectedTag(M_NORMAL, TAGS_MISSING)); break; default: setMissingMode(new SelectedTag(M_AVERAGE, TAGS_MISSING)); } } Utils.checkForRemainingOptions(options); } /** * Gets the current settings of K*. * * @return an array of strings suitable for passing to setOptions() */ public String [] getOptions() { // -B <num> -E -M <char> String [] options = new String [ 5 ]; int itr = 0; options[itr++] = "-B"; options[itr++] = "" + m_GlobalBlend; if (getEntropicAutoBlend()) { options[itr++] = "-E"; } options[itr++] = "-M"; if (m_MissingMode == M_AVERAGE) { options[itr++] = "" + "a"; } else if (m_MissingMode == M_DELETE) { options[itr++] = "" + "d"; } else if (m_MissingMode == M_MAXDIFF) { options[itr++] = "" + "m"; } else if (m_MissingMode == M_NORMAL) { options[itr++] = "" + "n"; } while (itr < options.length) { options[itr++] = ""; } return options; } /** * Returns a description of this classifier. * * @return a description of this classifier as a string. */ public String toString() { StringBuffer st = new StringBuffer(); st.append("KStar Beta Verion (0.1b).\n" +"Copyright (c) 1995-97 by Len Trigg (trigg@cs.waikato.ac.nz).\n" +"Java port to Weka by Abdelaziz Mahoui " +"(am14@cs.waikato.ac.nz).\n\nKStar options : "); String [] ops = getOptions(); for (int i=0;i<ops.length;i++) { st.append(ops[i]+' '); } return st.toString(); } /** * Main method for testing this class. * * @param argv should contain command line options (see setOptions) */ public static void main(String [] argv) { try { System.out.println(Evaluation.evaluateModel(new KStar(), argv)); } catch (Exception e) { // System.err.println(e.getMessage()); e.printStackTrace(); } } /** * Initializes the m_Attributes of the class. */ private void init_m_Attributes() { try { m_NumInstances = m_Train.numInstances(); m_NumClasses = m_Train.numClasses(); m_NumAttributes = m_Train.numAttributes(); m_ClassType = m_Train.classAttribute().type(); } catch(Exception e) { e.printStackTrace(); } } /** * Updates the m_attributes of the class. */ private void update_m_Attributes() { m_NumInstances = m_Train.numInstances(); m_InitFlag = ON; } /** * Note: for Nominal Class Only! * Generates a set of random versions of the class colomn. */ private void generateRandomClassColomns() { String debug = "(KStar.generateRandomClassColomns)"; Random generator = new Random(42); // Random generator = new Random(); m_RandClassCols = new int [NUM_RAND_COLS+1][]; int [] classvals = classValues(); for (int i=0; i < NUM_RAND_COLS; i++) { // generate a randomized version of the class colomn m_RandClassCols[i] = randomize(classvals, generator); } // original colomn is preserved in colomn NUM_RAND_COLS m_RandClassCols[NUM_RAND_COLS] = classvals; } /** * Note: for Nominal Class Only! * Returns an array of the class values * * @return an array of class values */ private int [] classValues() { String debug = "(KStar.classValues)"; int [] classval = new int[m_NumInstances]; for (int i=0; i < m_NumInstances; i++) { try { classval[i] = (int)m_Train.instance(i).classValue(); } catch (Exception ex) { ex.printStackTrace(); } } return classval; } /** * Returns a copy of the array with its elements randomly redistributed. * * @param array the array to randomize. * @return a copy of the array with its elements randomly redistributed. */ private int [] randomize(int [] array, Random generator) { String debug = "(KStar.randomize)"; int index; int temp; int [] newArray = new int[array.length]; System.arraycopy(array, 0, newArray, 0, array.length); for (int j = newArray.length - 1; j > 0; j--) { index = (int) ( generator.nextDouble() * (double)j ); temp = newArray[j]; newArray[j] = newArray[index]; newArray[index] = temp; } return newArray; }} // class end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -