ほとんどの機械学習分類器は、以前に見られた特徴を持たないインスタンスに遭遇した場合、トレーニング データで最も頻繁に見られたクラスで例を分類します。
これはliblinear-javaには当てはまらないようで、なぜそうなのか疑問に思っています。2 つの機能があり、トレーニング データにラベルの 4 倍の0
ラベルがあるサンプル問題を作成するサンプル コードを次に示します1
。
Problem problem = new Problem();
problem.l = 5;
problem.n = 2;
problem.x = new FeatureNode[][] {
new FeatureNode[] { new FeatureNode(1, 1) },
new FeatureNode[] { new FeatureNode(1, 1) },
new FeatureNode[] { new FeatureNode(1, 1) },
new FeatureNode[] { new FeatureNode(1, 1) },
new FeatureNode[] { new FeatureNode(2, 1) },
};
problem.y = new int[] {0, 0, 0, 0, 1};
Parameter parameter = new Parameter(SolverType.L2R_L2LOSS_SVC, 1.0, 0.01);
Model model = Linear.train(problem, parameter);
3
では、トレーニング データに含まれていない新しい機能 でこれをテストしてみましょう。訓練されたモデルは feature について何も知らないので3
、予測されたクラス0
は訓練データで最も一般的なクラスであると予想していました。
FeatureNode[] instance = new FeatureNode[] { new FeatureNode(3, 1) };
int prediction = Linear.predict(model, instance);
System.err.println(prediction);
1
ただし、最後の行は出力されます。何故ですか?