Vec2d predict2(InputArray _sample, OutputArray _probs) const { int ptype = CV_64F; Mat sample = _sample.getMat(); CV_Assert(isTrained()); CV_Assert(!sample.empty()); if(sample.type() != CV_64FC1) { Mat tmp; sample.convertTo(tmp, CV_64FC1); sample = tmp; } sample = sample.reshape(1, 1); Mat probs; if( _probs.needed() ) { if( _probs.fixedType() ) ptype = _probs.type(); _probs.create(1, nclusters, ptype); probs = _probs.getMat(); } return computeProbabilities(sample, !probs.empty() ? &probs : 0, ptype); }
float predict(InputArray _inputs, OutputArray _outputs, int) const { bool needprobs = _outputs.needed(); Mat samples = _inputs.getMat(), probs, probsrow; int ptype = CV_64F; float firstres = 0.f; int i, nsamples = samples.rows; if( needprobs ) { if( _outputs.fixedType() ) ptype = _outputs.type(); _outputs.create(samples.rows, nclusters, ptype); } else nsamples = std::min(nsamples, 1); for( i = 0; i < nsamples; i++ ) { if( needprobs ) probsrow = probs.row(i); Vec2d res = computeProbabilities(samples.row(i), needprobs ? &probsrow : 0, ptype); if( i == 0 ) firstres = (float)res[1]; } return firstres; }
bool KlustersView::qt_emit( int _id, QUObject* _o ) { switch ( _id - staticMetaObject()->signalOffset() ) { case 0: updatedDimensions((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 1: singleColorUpdated((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 2: clusterRemovedFromView((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 3: clusterAddedToView((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 4: newClusterAddedToView((QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+1)),(int)static_QUType_int.get(_o+2),(bool)static_QUType_bool.get(_o+3)); break; case 5: newClusterAddedToView((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 6: spikesRemovedFromClusters((QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+1)),(bool)static_QUType_bool.get(_o+2)); break; case 7: modeToSet((BaseFrame::Mode)(*((BaseFrame::Mode*)static_QUType_ptr.get(_o+1)))); break; case 8: spikesAddedToCluster((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 9: updateContents(); break; case 10: emptySelection(); break; case 11: modifiedClusters((QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+1)),(bool)static_QUType_bool.get(_o+2),(bool)static_QUType_bool.get(_o+3)); break; case 12: modifiedClustersUndo((QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+1)),(bool)static_QUType_bool.get(_o+2)); break; case 13: updatedTimeFrame((long)(*((long*)static_QUType_ptr.get(_o+1))),(long)(*((long*)static_QUType_ptr.get(_o+2)))); break; case 14: sampleMode(); break; case 15: timeFrameMode(); break; case 16: meanPresentation(); break; case 17: allWaveformsPresentation(); break; case 18: overLayPresentation(); break; case 19: sideBySidePresentation(); break; case 20: increaseAmplitude(); break; case 21: decreaseAmplitude(); break; case 22: updateDisplayNbSpikes((long)(*((long*)static_QUType_ptr.get(_o+1)))); break; case 23: increaseAmplitudeofCorrelograms(); break; case 24: decreaseAmplitudeofCorrelograms(); break; case 25: noScale(); break; case 26: maxScale(); break; case 27: shoulderScale(); break; case 28: updatedBinSizeAndTimeFrame((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 29: setShoulderLine((bool)static_QUType_bool.get(_o+1)); break; case 30: updateDrawing(); break; case 31: changeGain((int)static_QUType_int.get(_o+1)); break; case 32: changeTimeInterval((int)static_QUType_int.get(_o+1),(bool)static_QUType_bool.get(_o+2)); break; case 33: changeChannelPositions((QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+1))); break; case 34: computeProbabilities(); break; case 35: changeBackgroundColor((QColor)(*((QColor*)static_QUType_ptr.get(_o+1)))); break; case 36: clustersRenumbered((bool)static_QUType_bool.get(_o+1)); break; case 37: updateClusters((QString)static_QUType_QString.get(_o+1),(QValueList<int>&)*((QValueList<int>*)static_QUType_ptr.get(_o+2)),(ItemColors*)static_QUType_ptr.get(_o+3),(bool)static_QUType_bool.get(_o+4)); break; case 38: increaseAllAmplitude(); break; case 39: decreaseAllAmplitude(); break; case 40: showLabels((bool)static_QUType_bool.get(_o+1)); break; case 41: nextCluster(); break; case 42: previousCluster(); break; default: return KDockArea::qt_emit(_id,_o); } return TRUE; }
estimates_t EM(const estimates_t& initial, const dataPoints_t& X, unsigned int maxIterations, Progress *progress) { // This will be used for probabilites calculation at each step prob_matrix_t prob; // Number of classes const unsigned int classes = initial.size(); // Sum of probabilites of all classes std::vector<double> sums(classes, 0); for(unsigned int i = 0; i < classes + 1; ++i) { prob.push_back(std::vector<double>()); std::vector<double>& ps = prob.back(); ps.resize(X.size()); } // Estimates after each iteration estimates_t next = initial; for(unsigned int iteration = 1; iteration <= maxIterations; ++iteration) { if (progress != NULL) { progress->updateProgress("EM running on difference image", 100*iteration/maxIterations, NORMAL); } std::fill(sums.begin(), sums.end(), 0.0); computeProbabilities(prob, sums, X, next); estimates_t::iterator estimateItr = next.begin(); estimates_t::const_iterator prev_estimateItr = next.begin(); std::vector<double>::const_iterator sumItr = sums.begin(); prob_matrix_t::const_iterator probItr = prob.begin(); // M-step for(; estimateItr != next.end(); ++estimateItr, ++sumItr, ++probItr, ++prev_estimateItr) { updateStdDevs(*estimateItr, *sumItr, *probItr, X, *prev_estimateItr); updateMeans(*estimateItr, *sumItr, *probItr, X); updateWeights(*estimateItr, *sumItr, X.size()); } } estimates_t final = next; return final; }
void EM::eStep() { // Compute probs_ik from means_k, covs_k and weights_k. trainProbs.create(trainSamples.rows, nclusters, CV_64FC1); trainLabels.create(trainSamples.rows, 1, CV_32SC1); trainLogLikelihoods.create(trainSamples.rows, 1, CV_64FC1); computeLogWeightDivDet(); CV_DbgAssert(trainSamples.type() == CV_64FC1); CV_DbgAssert(means.type() == CV_64FC1); for(int sampleIndex = 0; sampleIndex < trainSamples.rows; sampleIndex++) { Mat sampleProbs = trainProbs.row(sampleIndex); Vec2d res = computeProbabilities(trainSamples.row(sampleIndex), &sampleProbs); trainLogLikelihoods.at<double>(sampleIndex) = res[0]; trainLabels.at<int>(sampleIndex) = static_cast<int>(res[1]); } }
main(){ int N , exp, i, j; double temp; scanf("%d", &N); exp = power(N); for(i = 0; i <= exp; i++) // Initialize array with team IDs. teamArray[i] = i; for (i=0; i < MAXTEAMS; i++) for (j=0; j < (MAXN +2); j++) cumulativeProbabilityArray[i][j] = -1; for(i = 1; i <= exp ; i++) for(j = 1 ; j <= exp ; j++){ // Read and store probability matrix. scanf("%lf", &temp); probabilityArray[i][j] = temp/100; } computeProbabilities(exp, N+1); sortAndPrint(N, exp); }