00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #if !defined _CLUS_BINARYSPLITTER_H
00035 #define _CLUS_BINARY_SPLITTER_H
00036
00037 #include "vec.h"
00038 #include <iostream>
00039
00040 using namespace TNT;
00041
00042
00043
00044 namespace CLUS
00045 {
00046
00047
00048 class BinarySplitter
00049 {
00050 protected:
00051
00052 int dsplitDim;
00053
00054
00055 int csplitDim;
00056
00057
00058 int regDim;
00059
00060
00061 const Vector<int>& dDomainSize;
00062
00063
00064
00065 int SplitVariable;
00066
00067
00068
00069 Vector<double> SeparatingHyperplane;
00070
00071
00072
00073 Vector<double> splitSetProbability;
00074
00075 public:
00076 BinarySplitter():dDomainSize( *( new Vector<int>() ) ),SeparatingHyperplane(), splitSetProbability()
00077 {}
00078
00079 BinarySplitter(const Vector<int>& DDomainSize,int CsplitDim, int RegDim):
00080 dsplitDim(DDomainSize.dim()), csplitDim(CsplitDim), regDim(RegDim),
00081 dDomainSize(DDomainSize),SeparatingHyperplane(),
00082 splitSetProbability()
00083 { }
00084
00085 BinarySplitter(BinarySplitter& aux):
00086 dsplitDim(aux.dsplitDim), csplitDim(aux.csplitDim),
00087 dDomainSize(aux.dDomainSize),SeparatingHyperplane(),
00088 splitSetProbability()
00089 { }
00090
00091 int GetRegDim(void)
00092 {
00093 return regDim;
00094 }
00095 int GetCSplitDim(void)
00096 {
00097 return csplitDim;
00098 }
00099
00100 int GetDSplitDim(void)
00101 {
00102 return dsplitDim;
00103 }
00104
00105 const Vector<int>& GetDDomainSize(void)
00106 {
00107 return dDomainSize;
00108 }
00109
00110
00111 int ChooseBranch(const int* Dvars, const double* Cvars)
00112 {
00113 return 0;
00114 }
00115
00116 double ProbabilityFirstBranch(const int* Dvars, const double* Cvars)
00117 {
00118 if (ChooseBranch(Dvars,Cvars)==0)
00119 return 1.0;
00120 else
00121 return 0.0;
00122 }
00123
00124
00125 void InitializeSplitStatistics(void)
00126 { }
00127
00128
00129 void UpdateSplitStatistics(const int* Dvars, const double* Cvars,double p1,double p2)
00130 { }
00131
00132
00133
00134 int ComputeSplitVariable(int type)
00135 {
00136 return 0;
00137 }
00138
00139
00140 bool MoreSplits(int branch, int Min_no_datapoints)
00141 {
00142 return false;
00143 }
00144
00145
00146 void DeleteTemporaryStatistics(void)
00147 { }
00148
00149 void SaveToStream(ostream& out)
00150 {
00151 out << SplitVariable << " ( ";
00152 if (SplitVariable==-1)
00153 {
00154
00155 for (int i=0; i<SeparatingHyperplane.dim(); i++)
00156 out << SeparatingHyperplane[i] << " ";
00157 }
00158 else
00159 if (SplitVariable<=-2)
00160 {
00161
00162 out << SeparatingHyperplane[0] << " " << SeparatingHyperplane[-SplitVariable-1];
00163 }
00164 else
00165 {
00166
00167 for (int i=0; i<splitSetProbability.dim(); i++)
00168 if (splitSetProbability[i]>.5)
00169 out << i << " ";
00170 }
00171 out << " )";
00172 }
00173
00174
00175 ~BinarySplitter(void)
00176 {
00177
00178 }
00179
00180 };
00181
00182 }
00183
00184 #endif // _CLUS_BINARYSPLITTER_H