int main(int argc, char* argv[]) { corpus* corpus; long t1; (void) time(&t1); seedMT(t1); // seedMT(4357U); if (argc > 1) { if (strcmp(argv[1], "est")==0) { INITIAL_ALPHA = atof(argv[2]); NTOPICS = atoi(argv[3]); read_settings(argv[4]); corpus = read_data(argv[5]); make_directory(argv[7]); run_em(argv[6], argv[7], corpus); } if (strcmp(argv[1], "inf")==0) { read_settings(argv[2]); corpus = read_data(argv[4]); infer(argv[3], argv[5], corpus); } } else { printf("usage : lda est [initial alpha] [k] [settings] [data] [random/seeded/*] [directory]\n"); printf(" lda inf [settings] [model] [data] [name]\n"); } return(0); }
int pc_prism_em_6(void) { struct EM_Engine em_eng; RET_ON_ERR(check_smooth(&em_eng.smooth)); RET_ON_ERR(run_em(&em_eng)); release_num_sw_vals(); return bpx_unify(bpx_get_call_arg(1,6), bpx_build_integer(em_eng.iterate )) && bpx_unify(bpx_get_call_arg(2,6), bpx_build_float (em_eng.lambda )) && bpx_unify(bpx_get_call_arg(3,6), bpx_build_float (em_eng.likelihood)) && bpx_unify(bpx_get_call_arg(4,6), bpx_build_float (em_eng.bic )) && bpx_unify(bpx_get_call_arg(5,6), bpx_build_float (em_eng.cs )) && bpx_unify(bpx_get_call_arg(6,6), bpx_build_integer(em_eng.smooth )) ; }
bool CvEM::train( const CvMat* _samples, const CvMat* _sample_idx, CvEMParams _params, CvMat* labels ) { bool result = false; CvVectors train_data; CvMat* sample_idx = 0; train_data.data.fl = 0; train_data.count = 0; CV_FUNCNAME("cvEM"); __BEGIN__; int i, nsamples, nclusters, dims; clear(); CV_CALL( cvPrepareTrainData( "cvEM", _samples, CV_ROW_SAMPLE, 0, CV_VAR_CATEGORICAL, 0, _sample_idx, false, (const float***)&train_data.data.fl, &train_data.count, &train_data.dims, &train_data.dims, 0, 0, 0, &sample_idx )); CV_CALL( set_params( _params, train_data )); nsamples = train_data.count; nclusters = params.nclusters; dims = train_data.dims; if( labels && (!CV_IS_MAT(labels) || CV_MAT_TYPE(labels->type) != CV_32SC1 || (labels->cols != 1 && labels->rows != 1) || labels->cols + labels->rows - 1 != nsamples )) CV_ERROR( CV_StsBadArg, "labels array (when passed) must be a valid 1d integer vector of <sample_count> elements" ); if( nsamples <= nclusters ) CV_ERROR( CV_StsOutOfRange, "The number of samples should be greater than the number of clusters" ); CV_CALL( log_weight_div_det = cvCreateMat( 1, nclusters, CV_64FC1 )); CV_CALL( probs = cvCreateMat( nsamples, nclusters, CV_64FC1 )); CV_CALL( means = cvCreateMat( nclusters, dims, CV_64FC1 )); CV_CALL( weights = cvCreateMat( 1, nclusters, CV_64FC1 )); CV_CALL( inv_eigen_values = cvCreateMat( nclusters, params.cov_mat_type == COV_MAT_SPHERICAL ? 1 : dims, CV_64FC1 )); CV_CALL( covs = (CvMat**)cvAlloc( nclusters * sizeof(*covs) )); CV_CALL( cov_rotate_mats = (CvMat**)cvAlloc( nclusters * sizeof(cov_rotate_mats[0]) )); for( i = 0; i < nclusters; i++ ) { CV_CALL( covs[i] = cvCreateMat( dims, dims, CV_64FC1 )); CV_CALL( cov_rotate_mats[i] = cvCreateMat( dims, dims, CV_64FC1 )); cvZero( cov_rotate_mats[i] ); } init_em( train_data ); log_likelihood = run_em( train_data ); if( log_likelihood <= -DBL_MAX/10000. ) EXIT; if( labels ) { if( nclusters == 1 ) cvZero( labels ); else { CvMat sample = cvMat( 1, dims, CV_32F ); CvMat prob = cvMat( 1, nclusters, CV_64F ); int lstep = CV_IS_MAT_CONT(labels->type) ? 1 : labels->step/sizeof(int); for( i = 0; i < nsamples; i++ ) { int idx = sample_idx ? sample_idx->data.i[i] : i; sample.data.ptr = _samples->data.ptr + _samples->step*idx; prob.data.ptr = probs->data.ptr + probs->step*i; labels->data.i[i*lstep] = cvRound(predict(&sample, &prob)); } } } result = true; __END__; if( sample_idx != _sample_idx ) cvReleaseMat( &sample_idx ); cvFree( &train_data.data.ptr ); return result; }