00001 #ifndef clsfy_builder_base_h_ 00002 #define clsfy_builder_base_h_ 00003 00004 // Copyright: (C) 2000 British Telecommunications plc 00005 00006 00007 //: 00008 // \file 00009 // \brief Describe an abstract classifier 00010 // \author Ian Scott 00011 // \date 2000/05/10 00012 // \verbatim 00013 // Modifications 00014 // 2 May 2001 IMS Converted to VXL 00015 // \endverbatim 00016 00017 00018 #include <vsl/vsl_binary_io.h> 00019 #include <vcl_vector.h> 00020 #include <vcl_string.h> 00021 #include <mbl/mbl_data_wrapper.h> 00022 #include <vnl/vnl_vector.h> 00023 00024 00025 class clsfy_classifier_base; 00026 00027 00028 //: Base for classes to build clsfy_classifier_base objects 00029 class clsfy_builder_base { 00030 00031 public: 00032 00033 // Dflt ctor 00034 clsfy_builder_base(); 00035 00036 // Destructor 00037 virtual ~clsfy_builder_base(); 00038 00039 //: Create empty model 00040 virtual clsfy_classifier_base* new_classifier() const = 0; 00041 00042 //: Build model from data 00043 // Return the mean error over the training set. 00044 // For many classifiers, you may use nClasses==1 to 00045 // indicate a binary classifier 00046 virtual double build(clsfy_classifier_base& model, 00047 mbl_data_wrapper<vnl_vector<double> >& inputs, 00048 unsigned nClasses, 00049 const vcl_vector<unsigned> &outputs) const = 0; 00050 00051 //: Name of the class 00052 virtual vcl_string is_a() const; 00053 00054 //: Name of the class 00055 virtual bool is_class(vcl_string const& s) const; 00056 00057 //: Create a copy on the heap and return base class pointer 00058 virtual clsfy_builder_base* clone() const = 0; 00059 00060 //: Print class to os 00061 virtual void print_summary(vcl_ostream& os) const = 0; 00062 00063 //: Save class to binary file stream 00064 virtual void b_write(vsl_b_ostream& bfs) const = 0; 00065 00066 //: Load class from binary file stream 00067 virtual void b_read(vsl_b_istream& bfs) = 0; 00068 }; 00069 00070 //: Allows derived class to be loaded by base-class pointer 00071 void vsl_add_to_binary_loader(const clsfy_builder_base& b); 00072 00073 //: Binary file stream output operator for class reference 00074 void vsl_b_write(vsl_b_ostream& bfs, const clsfy_builder_base& b); 00075 00076 //: Binary file stream input operator for class reference 00077 void vsl_b_read(vsl_b_istream& bfs, clsfy_builder_base& b); 00078 00079 //: Stream output operator for class reference 00080 void vsl_print_summary(vcl_ostream& os,const clsfy_builder_base& b); 00081 00082 //: Stream output operator for class pointer 00083 void vsl_print_summary(vcl_ostream& os,const clsfy_builder_base* b); 00084 00085 //: Stream output operator for class reference 00086 vcl_ostream& operator<<(vcl_ostream& os,const clsfy_builder_base& b); 00087 00088 //: Stream output operator for class pointer 00089 vcl_ostream& operator<<(vcl_ostream& os,const clsfy_builder_base* b); 00090 00091 #endif // clsfy_builder_base_h_
1.5.1