Пример #1
0
void LinRegSubsolver::writeModel(char* fname, double* model){	
	
	ofstream model_out(fname);
	model_out << D << endl;
	for(int i=0;i<D;i++){
		model_out << model[i] << endl;
	}
	model_out.close();
}
Пример #2
0
int L1rlrOwlqnAlgorithm::save_model(std::string filename)
{
    std::ofstream model_out(filename.c_str());
    if (!model_out.is_open())
    {
        std::cout << "Open model file [" << filename << "] failed!" << std::endl;
    }
    model_out << _data->feature_num() << " "  << _l1weight << std::endl;
    std::cout << "saveing model! " << _data->feature_num() << std::endl;
    for (uint32_t i = 0; i < _data->feature_num(); ++i )
    {
        model_out << " " << _x_k[i]; 
    }
    model_out.close();
    return 0;
}
Пример #3
0
vector<double> linearModel(const vector<double>& t, const vector<double>& params)
{
    int n = t.size();

    vector<double> model_out(n);

    double m = params[0];
    double c = params[1];

    //cout << "M = " << m << ", C = " << c << endl;

    for (int i=0; i<n; i++) {
        model_out[i] = m * t[i] + c;
    }

    return model_out;
}
Пример #4
0
vector<double> logisticModel(const vector<double>& t, const vector<double>& params) {

    // cout << "Running logisticModel" << endl;
    // cout << "P: " << params[0] << endl;

    int n = t.size();

    vector<double> model_out(n);

    double par1 = params[0];
    double par2 = params[1];
    double par3 = params[2];

    for (int i=0; i<n; i++) {
        model_out[i] = par1 + (par3 * t[i] - log(1 + (exp(par3 * t[i]) - 1)/exp(par2 - par1)));
    }

    return model_out;
}
Пример #5
0
vector<double> Bar4Par(const vector<double>& t, const vector<double>& params) {
    double par1 = params[0];
    double par2 = params[1];
    double par3 = params[2];
    double par4 = params[3];

    int n = t.size();

    vector<double> model_out(n);

    double a1 = 1;
    double a2 = 1;
    double a3 = 1;

    double A;
    for (int i=0; i<n; i++) {
        A = a2 * (t[i] - par4/par3 +
            log(1 - a2 * (exp(-par3 * t[i]) + a3 * exp(-(par3 * t[i] - par4))))/par3);

    }

    return model_out;
}
int main (int argc, char ** argv) {
    if (argc < 5) {
        cerr << "Usage: " << endl;
        cerr << "\tHDP_MEDOIDS [dataFile] [nRuns] [lambda_global] [lambda_local]" << endl;
        exit(-1);
    }

    // PARSE arguments
    char* dataFile = argv[1];
    int nRuns = atoi(argv[2]);
    vector<double> LAMBDAs (2, 0.0);
    LAMBDAs[0] = atof(argv[3]); // lambda_global
    LAMBDAs[1] = atof(argv[4]); // lambda_local

    objmin_trace << "time objective" << endl;

    // read in data
    int FIX_DIM;
    Parser parser;
    vector<Instance*>* pdata;
    vector<Instance*> data;
    pdata = parser.parseSVM(dataFile, FIX_DIM);
    data = *pdata;

    // init lookup_tables
    vector< pair<int,int> > doc_lookup;
    get_doc_lookup (data, doc_lookup);
    Lookups lookup_tables;
    lookup_tables.doc_lookup = &doc_lookup;
    lookup_tables.nWords = data.size();
    lookup_tables.nDocs = lookup_tables.doc_lookup->size();
    
    int seed = time(NULL);
    srand (seed);
    cerr << "###########################################" << endl;
    cerr << "nDocs = " << lookup_tables.nDocs << endl; // # documents
    cerr << "nWords = " << lookup_tables.nWords << endl; // # words
    cerr << "lambda_global = " << LAMBDAs[0] << endl;
    cerr << "lambda_local = " << LAMBDAs[1] << endl;
    cerr << "TRIM_THRESHOLD = " << TRIM_THRESHOLD << endl;
    cerr << "seed = " << seed << endl;
    cerr << "###########################################" << endl;

    // Run sparse convex clustering
    int N = lookup_tables.nWords;
    int D = lookup_tables.nDocs;
    double** W = mat_init (N, N);
    // dist_mat computation and output
    dist_func df = L2norm;
    double** dist_mat = mat_init (N, N);
    compute_dist_mat (data, dist_mat, N, FIX_DIM, df, true);

    start_time = omp_get_wtime();
    double min_obj = INF;
    vector< vector<double> > min_means;
    for (int j = 0; j < nRuns; j ++) {
        vector< vector<double> > means;
        // inner-doc shuffle
        for (int d = 0; d < D; d++) {
            int begin_i = doc_lookup[d].first;
            int end_i = doc_lookup[d].second;
            random_shuffle(data.begin()+begin_i, data.begin()+end_i);
        }
        // between-doc shuffle
        vector<pair<int,int> > s_doc_lookup (doc_lookup);
        random_shuffle(s_doc_lookup.begin(), s_doc_lookup.end());
        vector<Instance*> s_data (N, NULL);
        int p = 0;
        for (int d = 0; d < D; d ++) {
            for (int i = s_doc_lookup[d].first; i < s_doc_lookup[d].second; i ++) {
                s_data[p] = data[i];
                p ++;
            }
        }
        lookup_tables.doc_lookup = &s_doc_lookup;
        double obj = HDP_MEDOIDS (s_data, means, &lookup_tables, LAMBDAs, df, FIX_DIM);
        lookup_tables.doc_lookup = &doc_lookup;
        cerr << "###################################################" << endl;
        if (obj < min_obj) {
            min_obj = obj;
            min_means = means;
        }
    }
     
    /* Output objective */ 
    output_objective (min_obj);
    ofstream model_out ("opt_model");
    for (int i = 0; i < min_means.size(); i ++) {
        model_out << "mean[" << i << "] "; 
        for (int j = 0; j < min_means[i].size(); j ++) {
            model_out << min_means[i][j] << " " ;
        }
        model_out << endl;
    }
    model_out.close();
    /* Output cluster centroids */
    // output_model (W, &lookup_tables);
    /* Output assignment */
    // output_assignment (W, &lookup_tables);

    /* reallocation */
    mat_free (W, N, N);
    mat_free (dist_mat, N, N);
    objmin_trace.close();
}