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_DISTRIBUTION_H_
00035 #define _CLUS_DISTRIBUTION_H_
00036
00037 #include <string>
00038 #include <iostream>
00039 #include <math.h>
00040
00041
00042 #define MAX_IN_DIM 1000
00043
00044 class Regressor;
00045
00046 namespace CLUS
00047 {
00048
00049
00050
00051 class Distribution
00052 {
00053 protected:
00054
00055 int inDim;
00056
00057
00058
00059 const double* dataCache;
00060
00061
00062 double probabilityInfer, probabilityLearn;
00063
00064
00065 double weight;
00066
00067 public:
00068 Distribution(int InDim=0):
00069 inDim(InDim), dataCache(NULL), probabilityInfer(0.0),
00070 probabilityLearn(0.0), weight(1.0)
00071 {}
00072
00073
00074 Regressor* CreateRegressor(void)
00075 {
00076 return 0;
00077 }
00078
00079
00080 bool HasZeroWeight(void)
00081 {
00082 return (weight==0.0);
00083 }
00084
00085
00086 void RandomCluster(void)
00087 {}
00088
00089
00090 void NormalizeData(const double* DataCache, double* X)
00091 {
00092
00093 for (int i=0; i<inDim; i++)
00094 X[i]=DataCache[i];
00095 }
00096
00097
00098 void DenormalizeParameters(Distribution* pD)
00099 {
00100 }
00101
00102
00103 double InferProbability(const double* DataCache)
00104 {
00105 return 0.0;
00106 }
00107
00108
00109 double LearnProbability(const double* DataCache)
00110 {
00111 return 0.0;
00112 }
00113
00114
00115 double Probability(const double* DataCache)
00116 {
00117 return LearnProbability(DataCache);
00118 }
00119
00120
00121 double LastInferProbability(void)
00122 {
00123 return probabilityInfer;
00124 }
00125
00126
00127 double LastLearnProbability(void)
00128 {
00129 return probabilityLearn;
00130 }
00131
00132 double LastProbability(void)
00133 {
00134 return probabilityLearn;
00135 }
00136
00137
00138
00139 double NormalizeInferProbability(double Coef, int nrClus=1)
00140 {
00141 if (Coef==0.0)
00142 return 1.0/nrClus;
00143 probabilityInfer/=Coef;
00144 return probabilityInfer;
00145 }
00146
00147
00148
00149 double NormalizeLearnProbability(double Coef, int nrClus=1)
00150 {
00151 if (Coef==0.0)
00152 return probabilityLearn = 1.0/nrClus;
00153 if (isinf(Coef))
00154 return probabilityLearn = 0.0;
00155 probabilityLearn/=Coef;
00156 return probabilityLearn;
00157 }
00158
00159
00160 double NormalizeProbability(double Coef, int nrClus=1)
00161 {
00162 return NormalizeLearnProbability(Coef,nrClus);
00163 }
00164
00165
00166 void InitializeStatistics(void)
00167 { }
00168
00169
00170 void UpdateStatistics(double prob)
00171 { }
00172
00173
00174 double UpdateParameters(void)
00175 {
00176 return 0.0;
00177 }
00178
00179 static string TypeName(void)
00180 {
00181 return string("Distribution");
00182 }
00183
00184 bool SetOptionDbl(char* optName,double value)
00185 {
00186 if ( strcmp(optName,"weight") )
00187 {
00188 weight=value;
00189 return true;
00190 }
00191 return false;
00192 }
00193
00194
00195 void AdjustYwithYoverD(double& y)
00196 {}
00197
00198
00199 void RandomDistribution(int NrClusters)
00200 {}
00201
00202
00203 void SaveToStream(ostream& out)
00204 {}
00205
00206
00207 void LoadFromStream(istream& in)
00208 {}
00209
00210 #ifdef CLUS_USE_XML
00211
00212 void PrintToXmlStream(ostream& output)
00213 {
00214 output << "<Distribution";
00215 PrintAttribute(output, "weight", weight);
00216 output << "/>" << endl;
00217 }
00218 #endif
00219
00220 };
00221 }
00222
00223
00224
00225 #endif // _CLUS_DISTRIBUTION_H