// self-adaptive-regularization 的训练 virtual void learn(Data& train, Data& test) { fm_learn_sgd::learn(train, test);// 输出一些训练信息,继承自fm_learn_sgd类中的方法 std::cout << "Training using self-adaptive-regularization SGD."<< std::endl << "DON'T FORGET TO SHUFFLE THE ROWS IN TRAINING AND VALIDATION DATA TO GET THE BEST RESULTS." << std::endl; // make sure that fm-parameters are initialized correctly (no other side effects) // 确保初始化的过程 fm->w.init(0); fm->reg0 = 0; fm->regw = 0; fm->regv = 0; // start with no regularization // 正则化参数的初始化,全部初始化为0 reg_w.init(0.0); reg_v.init(0.0); // 打印输出信息,包括训练样本点的条数和验证样本的条数 std::cout << "Using " << train.data->getNumRows() << " rows for training model parameters and " << validation->data->getNumRows() << " for training shrinkage." << std::endl; // 基于梯度的训练过程 for (int i = 0; i < num_iter; i++) {// 开始每一轮的迭代 double iteration_time = getusertime(); // SGD-based learning: b