コード例 #1
0
void predictAll(bool train){
     loadData(data,train);
     loadUserItemData(users, items, data);
     for(int i = 0; i < data.size(); ++i){
          int user = data[i].user;
          int item = data[i].item;
          ui[user].push_back(item);
          nu[user]++;
          ni[item]++;
     }
     
     int u;
     loadSim(train);
     map<int,int> test;
     if(train) getTestSet2(test);
     else getTestSet(test);
     string file = "../ret2/results-knni-all.txt";
     if(train) file += ".0";
     ofstream out(file.c_str());
     for(map<int,int>::iterator k = test.begin(); k != test.end(); ++k){
          int u = k->first;
          vector< pair<int,float> > ret;
          predict2(u, ret);
          
          out << u << "\t";
          for(int i = 0; i < ret.size() && i < 500; ++i)
               out << ret[i].first << "\t" << ret[i].second / ret[0].second << "\t";
          out << endl;
     }
     out.close();
}
コード例 #2
0
int main(int argc, char ** argv){
     loadData(data,true);
     loadTestData();
     loadUserItemData(users, items, data);
     for(int i = 0; i < data.size(); ++i) nu[data[i].user]++;
#define K 7
     vector< vector< map<int,float> > > tests(K);
     vector< float > weight(K);
     int k = 0;
     loadResults("../ret2/results-knni-iuf.txt.0", tests[k]); weight[k] = 1; ++k;
     loadResults("../ret2/results-knnu-iif.txt.0", tests[k]); weight[k] = 1; ++k;
     loadResults("../ret2/results-knnui.txt.0", tests[k]); weight[k] = 1; ++k;
     loadResults("../ret2/results-language.txt.0", tests[k]); weight[k] = 0.4; ++k;
     loadResults("../ret2/results-repos.txt.0", tests[k]); weight[k] = 0.4; ++k;
     loadResults("../ret2/results-reponame.txt.0", tests[k]); weight[k] = 0.2; ++k;
     loadResults("../ret2/results-pop-nic.txt.0", tests[k]); weight[k] = 0.01; ++k;
     srand(time(0));
     int j = 0;
     for(int step = 0; step < 20; ++step){
          int i = j % K;
          ++j;
          float w0 = weight[i];
          int r0 = bag(tests, weight);
          weight[i] *= (1 + 0.5 * (rand01() - 0.5));
          int r1 = bag(tests, weight);
          if(r1 <= r0)
               weight[i] = w0;
          cout << step << "\t" << r0 << "\t" << r1 << endl;
     }

     for(int i = 0; i < weight.size(); ++i) cout << i << "\t" << weight[i] << endl;
     return 0;
}