プログラムでliblinearを使用して、ソルバーでマルチクラス分類を実行しますL2R_L2LOSS_SVC_DUAL
。現在のテスト設定では、それぞれ 1000 の機能を持つ合計 9 つのクラスから 1600 のインスタンスがあります。
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
FAQ サイトでは、これについて考えられる 2 つの理由について言及しています。
- データはスケーリングされません。
- 大きな C パラメータが使用されています。
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;
私の質問は次のとおりです: FAQ に記載されていない他の理由により、このシナリオで liblinear の動作が遅くなる可能性があり、それに対して何ができるでしょうか?