📄 instances.java
字号:
for (int i = position; i < m_Attributes.size(); i++) { Attribute current = (Attribute)m_Attributes.elementAt(i); current.setIndex(current.index() - 1); } for (int i = 0; i < numInstances(); i++) { instance(i).forceDeleteAttributeAt(position); } } //=============================BEGIN EDIT sugato========================== /** * Deletes attribute at position classIndex * * @author Sugato Basu */ public void deleteClassAttribute() { freshAttributeInfo(); m_Attributes.removeElementAt(m_ClassIndex); for (int i = m_ClassIndex; i < m_Attributes.size(); i++) { Attribute current = (Attribute)m_Attributes.elementAt(i); current.setIndex(current.index() - 1); } for (int i = 0; i < numInstances(); i++) { instance(i).forceDeleteAttributeAt(m_ClassIndex); } m_ClassIndex = -1; }//=============================END EDIT sugato========================== /** * Deletes all string attributes in the dataset. A deep copy of the attribute * information is performed before an attribute is deleted. * * @exception IllegalArgumentException if string attribute couldn't be * successfully deleted (probably because it is the class attribute). */ public void deleteStringAttributes() { int i = 0; while (i < m_Attributes.size()) { if (attribute(i).isString()) { deleteAttributeAt(i); } else { i++; } } } /** * Removes all instances with missing values for a particular * attribute from the dataset. * * @param attIndex the attribute's index */ public final void deleteWithMissing(int attIndex) { FastVector newInstances = new FastVector(numInstances()); for (int i = 0; i < numInstances(); i++) { if (!instance(i).isMissing(attIndex)) { newInstances.addElement(instance(i)); } } m_Instances = newInstances; } /** * Removes all instances with missing values for a particular * attribute from the dataset. * * @param att the attribute */ public final void deleteWithMissing(Attribute att) { deleteWithMissing(att.index()); } /** * Removes all instances with a missing class value * from the dataset. * * @exception UnassignedClassException if class is not set */ public final void deleteWithMissingClass() { if (m_ClassIndex < 0) { throw new UnassignedClassException("Class index is negative (not set)!"); } deleteWithMissing(m_ClassIndex); } /** * Returns an enumeration of all the attributes. * * @return enumeration of all the attributes. */ public Enumeration enumerateAttributes() { return m_Attributes.elements(m_ClassIndex); } /** * Returns an enumeration of all instances in the dataset. * * @return enumeration of all instances in the dataset */ public final Enumeration enumerateInstances() { return m_Instances.elements(); } /** * Checks if two headers are equivalent. * * @param dataset another dataset * @return true if the header of the given dataset is equivalent * to this header */ public final boolean equalHeaders(Instances dataset){ // Check class and all attributes if (m_ClassIndex != dataset.m_ClassIndex) { return false; } if (m_Attributes.size() != dataset.m_Attributes.size()) { return false; } for (int i = 0; i < m_Attributes.size(); i++) { if (!(attribute(i).equals(dataset.attribute(i)))) { return false; } } return true; } /** * Returns the first instance in the set. * * @return the first instance in the set */ public final Instance firstInstance() { return (Instance)m_Instances.firstElement(); } /** * Inserts an attribute at the given position (0 to * numAttributes()) and sets all values to be missing. * Shallow copies the attribute before it is inserted, and performs * a deep copy of the existing attribute information. * * @param att the attribute to be inserted * @param pos the attribute's position * @exception IllegalArgumentException if the given index is out of range */ public void insertAttributeAt(Attribute att, int position) { if ((position < 0) || (position > m_Attributes.size())) { throw new IllegalArgumentException("Index out of range"); } att = (Attribute)att.copy(); freshAttributeInfo(); att.setIndex(position); m_Attributes.insertElementAt(att, position); for (int i = position + 1; i < m_Attributes.size(); i++) { Attribute current = (Attribute)m_Attributes.elementAt(i); current.setIndex(current.index() + 1); } for (int i = 0; i < numInstances(); i++) { instance(i).forceInsertAttributeAt(position); } if (m_ClassIndex >= position) { m_ClassIndex++; } } /** * Returns the instance at the given position. * * @param index the instance's index * @return the instance at the given position */ public final Instance instance(int index) { return (Instance)m_Instances.elementAt(index); } /** * Returns the last instance in the set. * * @return the last instance in the set */ public final Instance lastInstance() { return (Instance)m_Instances.lastElement(); } /** * Returns the mean (mode) for a numeric (nominal) attribute as * a floating-point value. Returns 0 if the attribute is neither nominal nor * numeric. If all values are missing it returns zero. * * @param attIndex the attribute's index * @return the mean or the mode */ public final double meanOrMode(int attIndex) { double result, found; int [] counts; if (attribute(attIndex).isNumeric()) { result = found = 0; for (int j = 0; j < numInstances(); j++) { if (!instance(j).isMissing(attIndex)) { found += instance(j).weight(); result += instance(j).weight()*instance(j).value(attIndex); } } if (Utils.eq(found, 0)) { return 0; } else { return result / found; } } else if (attribute(attIndex).isNominal()) { counts = new int[attribute(attIndex).numValues()]; for (int j = 0; j < numInstances(); j++) { if (!instance(j).isMissing(attIndex)) { counts[(int) instance(j).value(attIndex)] += instance(j).weight(); } } return (double)Utils.maxIndex(counts); } else { return 0; } } /** * Returns the mean (mode) for a numeric (nominal) attribute as a * floating-point value. Returns 0 if the attribute is neither * nominal nor numeric. If all values are missing it returns zero. * * @param att the attribute * @return the mean or the mode */ public final double meanOrMode(Attribute att) { return meanOrMode(att.index()); } /** * Returns the number of attributes. * * @return the number of attributes as an integer */ public final int numAttributes() { return m_Attributes.size(); } /** * Returns the number of class labels. * * @return the number of class labels as an integer if the class * attribute is nominal, 1 otherwise. * @exception UnassignedClassException if the class is not set */ public final int numClasses() { if (m_ClassIndex < 0) { throw new UnassignedClassException("Class index is negative (not set)!"); } if (!classAttribute().isNominal()) { return 1; } else { return classAttribute().numValues(); } } /** * Returns the number of distinct values of a given attribute. * Returns the number of instances if the attribute is a * string attribute. The value 'missing' is not counted. * * @param attIndex the attribute * @return the number of distinct values of a given attribute */ public final int numDistinctValues(int attIndex) { if (attribute(attIndex).isNumeric()) { double [] attVals = attributeToDoubleArray(attIndex); int [] sorted = Utils.sort(attVals); double prev = 0; int counter = 0; for (int i = 0; i < sorted.length; i++) { Instance current = instance(sorted[i]); if (current.isMissing(attIndex)) { break; } if ((i == 0) || Utils.gr(current.value(attIndex), prev)) { prev = current.value(attIndex); counter++; } } return counter; } else { return attribute(attIndex).numValues(); } } /** * Returns the number of distinct values of a given attribute. * Returns the number of instances if the attribute is a * string attribute. The value 'missing' is not counted. * * @param att the attribute * @return the number of distinct values of a given attribute */ public final int numDistinctValues(Attribute att) { return numDistinctValues(att.index()); } /** * Returns the number of instances in the dataset. * * @return the number of instances in the dataset as an integer */ public final int numInstances() { return m_Instances.size(); } /** * Shuffles the instances in the set so that they are ordered * randomly. * * @param random a random number generator */ public final void randomize(Random random) { for (int j = numInstances() - 1; j > 0; j--) swap(j, random.nextInt(j+1)); } /** * Reads a single instance from the reader and appends it * to the dataset. Automatically expands the dataset if it * is not large enough to hold the instance. This method does * not check for carriage return at the end of the line. * * @param reader the reader * @return false if end of file has been reached * @exception IOException if the information is not read * successfully */ public final boolean readInstance(Reader reader) throws IOException { StreamTokenizer tokenizer = new StreamTokenizer(reader); initTokenizer(tokenizer); return getInstance(tokenizer, false); } /** * Returns the relation's name. * * @return the relation's name as a string */ public final String relationName() { return m_RelationName; } /** * Renames an attribute. This change only affects this * dataset. * * @param att the attribute's index * @param name the new name */ public final void renameAttribute(int att, String name) { Attribute newAtt = attribute(att).copy(name); FastVector newVec = new FastVector(numAttributes()); for (int i = 0; i < numAttributes(); i++) { if (i == att) { newVec.addElement(newAtt); } else { newVec.addElement(attribute(i)); } } m_Attributes = newVec; } /** * Renames an attribute. This change only affects this * dataset. * * @param att the attribute * @param name the new name */ public final void renameAttribute(Attribute att, String name) { renameAttribute(att.index(), name); } /** * Renames the value of a nominal (or string) attribute value. This * change only affects this dataset. * * @param att the attribute's index * @param val the value's index * @param name the new name */ public final void renameAttributeValue(int att, int val, String name) { Attribute newAtt = (Attribute)attribute(att).copy(); FastVector newVec = new FastVector(numAttributes()); newAtt.setValue(val, name); for (int i = 0; i < numAttributes(); i++) { if (i == att) { newVec.addElement(newAtt); } else { newVec.addElement(attribute(i)); } } m_Attributes = newVec; } /** * Renames the value of a nominal (or string) attribute value. This * change only affects this dataset. * * @param att the attribute * @param val the value * @param name the new name */ public final void renameAttributeValue(Attribute att, String val, String name) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -