📄 multimodel.java
字号:
/* * YALE - Yet Another Learning Environment * Copyright (C) 2002, 2003 * Simon Fischer, Ralf Klinkenberg, Ingo Mierswa, * Katharina Morik, Oliver Ritthoff * Artificial Intelligence Unit * Computer Science Department * University of Dortmund * 44221 Dortmund, Germany * email: yale@ls8.cs.uni-dortmund.de * web: http://yale.cs.uni-dortmund.de/ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */package edu.udo.cs.yale.operator.learner;import edu.udo.cs.yale.operator.OperatorChain;import edu.udo.cs.yale.operator.OperatorException;import edu.udo.cs.yale.operator.IOObject;import edu.udo.cs.yale.operator.IllegalInputException;import edu.udo.cs.yale.operator.IOContainer;import edu.udo.cs.yale.example.Attribute;import edu.udo.cs.yale.example.Example;import edu.udo.cs.yale.example.ExampleSet;import edu.udo.cs.yale.example.ExampleReader;import edu.udo.cs.yale.example.MemoryExampleTable;import edu.udo.cs.yale.tools.LogService;import edu.udo.cs.yale.tools.TempFileService;import java.io.*;/** MultiModels are used for multi class learning tasks. A MultiModel contains a set of Models that can * handle only two-class decisions. */public class MultiModel extends IOModel { public static final String ID = "YALE MultiModel"; private static final int FILE_MODEL = 1; private static final int IO_MODEL = 2; private Model[] models; public MultiModel(Model[] models) { this.models = models; } public int getNumberOfModels() { return models.length; } /** Returns a binary decision model for the given classification index. */ public Model getModel(int index) { return models[index]; } /** Iterates over all classes of the label and applies one model for each class. For each example * the predicted label is determined by choosing the model with the highest confidence. */ public void apply(ExampleSet exampleSet) throws OperatorException { ExampleSet[] eSet = new ExampleSet[getNumberOfModels()]; for (int i = 0; i < getNumberOfModels(); i++) { Model model = getModel(i); model.setPredictionType(PREDICT_CONFIDENCE); eSet[i] = (ExampleSet)exampleSet.clone(); eSet[i].createPredictedLabel(); model.apply(eSet[i]); } ExampleReader[] reader = new ExampleReader[eSet.length]; for (int r = 0; r < reader.length; r++) reader[r] = eSet[r].getExampleReader(); ExampleReader originalReader = exampleSet.getExampleReader(); while (originalReader.hasNext()) { double bestLabel = Double.NaN; double highestFunctionValue = Double.NEGATIVE_INFINITY; for (int k = 0; k < reader.length; k++) { double functionValue = reader[k].next().getPredictedLabel(); if (functionValue > highestFunctionValue) { highestFunctionValue = functionValue; bestLabel = k + Attribute.FIRST_CLASS_INDEX; } } originalReader.next().setPredictedLabel(bestLabel); } } /** Writes the models subsequently to the output stream. */ public void writeData(ObjectOutputStream out) throws IOException { out.writeInt(models.length); for (int i = 0; i < models.length; i++) { models[i].writeModel(out);// if (models[i] instanceof FileModel) {// out.writeByte(FILE_MODEL);// File modelfile = ((FileModel)models[i]).getModelFile();// int filesize = (int)modelfile.length();// out.writeInt(filesize);// byte buffer[] = new byte[filesize];// DataInputStream in = new DataInputStream(new FileInputStream(modelfile));// in.readFully(buffer);// in.close();// out.write(buffer);// } else if (models[i] instanceof SerializableModel) {// out.writeByte(IO_MODEL);// out.writeObject(models[i]);// } else {// LogService.logMessage("MultiModel.writeModel(File) cannot handle model of class '"+models[i].getClass()+"'", LogService.ERROR);// } } } /** Reads all models from the file. */ public void readData(ObjectInputStream in) throws IOException, OperatorException { this.models = new Model[in.readInt()]; for (int i = 0; i < models.length; i++) { models[i] = Model.readModel(in);// int type = in.readByte();// switch(type) {// case IO_MODEL:// models[i] = IOModel.readModel(in);// break;// case FILE_MODEL:// int filesize = in.readInt();// byte buffer[] = new byte[filesize];// in.readFully(buffer);// File modelFile = TempFileService.createTempFile("multimodel_"+i+".mod");// DataOutputStream out = new DataOutputStream(new FileOutputStream(modelFile));// out.write(buffer);// out.close();// models[i] = new FileModel(modelFile);// break;// default:// LogService.logMessage("MultiModel.readModel(): unknown model type: "+type, LogService.ERROR);// break;// } } } public String getIdentifier() { return ID; } public String toString() { String result = super.toString() + "\n"; for (int i = 0; i < models.length; i++) result += (i>0?"\n":"") + models[i].toString(); return result; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -