什么可能导致 liblinear 达到最大迭代次数?

Cal*_*ior 5 c classification machine-learning liblinear

我将liblinear与我的程序一起使用,以通过L2R_L2LOSS_SVC_DUAL求解器执行多类分类。在当前的测试设置中,我有来自总共 9 个类的 1600 个实例,每个类有 1000 个特征。

我正在尝试通过 5 倍交叉验证确定用于训练的最佳 C 参数,但即使使用 1.0 liblinear 的小 C 也能达到最大迭代次数:

................................................................................
....................
optimization finished, #iter = 1000

WARNING: reaching max number of iterations
Using -s 2 may be faster (also see FAQ)

Objective value = -637.100923
nSV = 783
Run Code Online (Sandbox Code Playgroud)

FAQ网站提到了这两个可能的原因:

  1. 数据未缩放。
  2. 使用了一个大的 C 参数。
  3. 使用了大量具有少量特征的实例,因此求解器L2R_L2LOSS_SVC可能会更快。

没有一个适用于我的情况。因为我的特征向量是某种直方图,所以有一个自然最大值,我用它来将特征缩放到 [0,1]。

我为 liblinear 设置了参数,如下所示:

struct parameter svmParams;
svmParams.solver_type = L2R_L2LOSS_SVC_DUAL;
svmParams.eps = 0.1;
svmParams.nr_weight = 0;
svmParams.weight_label = NULL;
svmParams.weight = NULL;
svmParams.p = 0.1;
svmParams.C = 1.0;
Run Code Online (Sandbox Code Playgroud)

我的问题是:FAQ 中未提及的其他哪些原因可能会导致 liblinear 在这种情况下运行缓慢,我该怎么做?