int main(int argc, char *argv[]) { // Force printf calls to stdout to be printed immediately. setbuf(stdout, NULL); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QFont font("Arial"); font.setWeight(QFont::Light); app.setFont(font); // Read configuration arguments from "config.txt" in the same directory as the exectuable. QString connectionString; QString devId; const QString configFilePath = app.applicationDirPath() + QStringLiteral("/config.txt"); QFile file(configFilePath); if (file.open(QIODevice::ReadOnly)) { QByteArray contents = file.readAll(); QList<QByteArray> configArgs = contents.split('\n'); bool configFormatError = false; if (configArgs.size() >= 2) { connectionString = configArgs.at(0); devId = configArgs.at(1); if (connectionString.isEmpty() || devId.isEmpty()) configFormatError = true; } else { configFormatError = true; } if (configFormatError) { qWarning() << "Expected <connectionString>\\n<devId> in config.txt, but found:" << contents << "\nRunning in offline mode"; } } else { qWarning().nospace() << "No config.txt found at " << configFilePath << "; running in offline mode"; } UserModel userModel(connectionString, devId); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("userModel", &userModel); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
void test_Fill_Predictor() { string train_data = "E:/data/resys/corpus/1/train/base"; string test_data = "E:/data/resys/corpus/1/test/u1.test"; FileDataReader train_reader = FileDataReader(train_data); FileDataReader test_reader = FileDataReader(test_data); int n_user, n_item, n_rating; n_user = 943; n_item = 1682; n_rating = 80000; UserModel userModel(n_user,n_item,n_rating); UserModel testModel(n_user,n_item,20000); UserModel resultModel(n_user,n_item,20000); ItemModel itemModel(n_user,n_item,n_rating); if(train_reader.readData(userModel) && train_reader.readData(itemModel) && test_reader.readData(testModel)) { int min_com = 0; double min_sim = 0.00001; int shrink_parameter = 25; Similarity_Shrinking shrinker(min_com,min_sim,shrink_parameter); Pearson_Similarity similarity(shrinker); UserBased_Predictor predictor = UserBased_Predictor(similarity,30,0); min_com = 30; min_sim = 0.3; shrink_parameter = 40; NeighborCollection *item_nbs = new NeighborCollection[n_item+1]; vector<FillObj> *u_fobjs = new vector<FillObj>[n_user+1]; Similarity_Shrinking shrinker2(min_com,min_sim,shrink_parameter); Pearson_Similarity similarity2(shrinker2); similarity2.similarity(itemModel,item_nbs,1); //similarity2.similarity(itemModel,item_nbs,1); Fill_Predictor fill_predictor; //int fill_count = fill_predictor.cal_fill_objs(userModel,item_nbs,u_fobjs,min_com); int fill_count = fill_predictor.cal_fill_objs(userModel,item_nbs,u_fobjs,min_sim); cout << fill_count << endl; fill_predictor.fill(predictor,userModel,u_fobjs); predictor.train(userModel); predictor.predictAll(userModel,testModel,resultModel); double rmse = evl_rmse(testModel, resultModel); cout << "RMSE: " << rmse << endl; double mae = evl_mae(testModel, resultModel); cout << "MAE: " << mae << endl; } }
void test_UserItemBased_Predictor() { clock_t begin,end; string train_data = "E:/data/resys/corpus/1/train/base"; string test_data = "E:/data/resys/corpus/1/test/u1.test"; FileDataReader train_reader = FileDataReader(train_data); FileDataReader test_reader = FileDataReader(test_data); int n_user, n_item, n_rating; n_user = 943; n_item = 1682; n_rating = 80000; UserModel userModel(n_user,n_item,n_rating); ItemModel itemModel(n_user,n_item,n_rating); UserModel testModel(n_user,n_item,20000); UserModel resultModel(n_user,n_item,20000); if(train_reader.readData(userModel) && train_reader.readData(itemModel) && test_reader.readData(testModel)) { int min_com = 0; double min_sim = 0.05; int shrink_parameter = 30; Similarity_Shrinking shrinker(min_com,min_sim,shrink_parameter); Pearson_Similarity similarity(shrinker); UserItemBased_Predictor predictor = UserItemBased_Predictor(similarity,15,0); begin = clock(); predictor.train(userModel,itemModel); end = clock(); cout << "Train time: " << (end - begin) * 1.0 / CLOCKS_PER_SEC << endl; begin = end; predictor.predictAll(userModel,itemModel,testModel,resultModel); end = clock(); cout << "Predict time: " << (end - begin) * 1.0 / CLOCKS_PER_SEC << endl; double rmse = evl_rmse(testModel, resultModel); cout << "RMSE: " << rmse << endl; double mae = evl_mae(testModel, resultModel); cout << "MAE: " << mae << endl; } }