static double Predict(MultiVariateSet *variateSet, float x) { double slope = 0.f, intercept = 0.f; double sdx = 0.f, sdy = 0.f, cor; double y_ = 0.f, x_ = 0.f, totalx = 0.f, totaly = 0.f; EType *bgn1 = variateSet->elem[0], *end1 = variateSet->elem[0]+variateSet->cols, *bgn2 = variateSet->elem[1], *end2 = variateSet->elem[1] + variateSet->cols; cor = (double)ComputeCorrelation(variateSet); for (; bgn1 != end1; bgn1++) totalx += *bgn1; for (; bgn2 != end2; bgn2++) totaly += *bgn2; x_ = totalx / (double)variateSet->cols; y_ = totaly / (double)variateSet->cols; totalx = 0.f; totaly = 0.f; bgn1 = variateSet->elem[0]; end1 = variateSet->elem[0] + variateSet->cols; bgn2 = variateSet->elem[1]; end2 = variateSet->elem[1] + variateSet->cols; for (; bgn1 != end1; bgn1++) totalx += Square(*bgn1 - x_); for (; bgn2 != end2; bgn2++) totaly += Square(*bgn2 - y_); sdx = sqrt((totalx / (double)variateSet->cols)); sdy = sqrt((totaly / (double)variateSet->cols)); slope = cor * sdy / sdx; intercept = y_ - (slope*x_); return intercept + slope*x; }
int main(int argc, char *argv[]) { MultiVariateSet *setVariate = NULL; int i; float* x; setVariate = CreateMultiVariateSet("data.dat"); PrintMultiVariateSet(setVariate); printf("\n"); printf("Covariance = %6.3f\n", ComputeCovariance(setVariate)); printf("Correlation = %6.3f\n", ComputeCorrelation(setVariate)); x = setVariate->elem[0]; for (i = 0; i < setVariate->cols; i++,x++) { printf("Predict value : %6.3f", Predict(setVariate, *x)); printf(" ei = %6.3f\n", *(setVariate->elem[1] + i) - Predict(setVariate, *x)); } DestoryMultiVariateSet(setVariate); return 0; }
void NetworkTemporal3BCPNN::TrainLayer(const vector<vector<float> >& trainingData, PopulationColumns* inputLayer, StructureMIMDSVQ* structure, int iterationsCorrs, int iterationsMDS, int iterationsVQ, int iterationsFeatures) { // Training phase int nrTrainImages = trainingData.size(); structure->MDSHypercolumns()->SwitchOnOff(false); structure->MDS()->SwitchOnOff(false); structure->VQ()->SwitchOnOff(false); structure->CSLLearn()->SwitchOnOff(false); structure->GetLayer(1)->SwitchOnOff(false); structure->SetRecording(false); // Semi-sequential version // 1. Training phase // 1A. Patches creation structure->CSLLearn()->SetMaxPatterns(nrTrainImages); structure->CSLLearn()->SetEta(0.001); // turn of response in 2nd layer during initial training phase for speed structure->GetLayer(1)->SwitchOnOff(false); int j=0; while(j<iterationsCorrs) { //if(j==(int)iterationsPatches*0.8) // break; //for(int i=0;i<trainingData.size();i++) { ComputeCorrelation(trainingData,inputLayer,structure,j); j++; } j=0; while(j<iterationsMDS) { //if(j==(int)iterationsPatches*0.9) // break; //for(int i=0;i<trainingData.size();i++) { if(!ComputeMDS(trainingData,inputLayer,structure,j)) break; j++; } structure->GetLayer(1)->SwitchOnOff(true); j=0; while(j<iterationsVQ) { //for(int i=0;i<trainingData.size();i++) { if(m_verbose && this->MPIGetNodeId() == 0) cout << "DataPoint (patches): " << j <<endl; ComputeVQ(trainingData,inputLayer,structure,j); j++; } structure->CSLLearn()->SetMaxPatterns(nrTrainImages); j=0; while(j<iterationsFeatures) { //for(int i=0;i<trainingData.size();i++) { if(m_verbose && this->MPIGetNodeId() == 0) cout << "DataPoint (features): " << j <<endl; if(!ExtractFeatures(trainingData,inputLayer,structure)) break; //} j++; } this->RecordAll(); }