Шалом, православные! Есть тонкий момент в LibLinear. При создании обучающей задачи можно использовать пополненное пространство, установив параметр bias, при котором то ли LibLinear будет считать, что я дописал в каждый фич-вектор по одной дополнительной фиче с одним и тем же весом, то ли мне надо самому дописать в каждый фич-вектор по одной такой фиче, чтобы всё работало корректно.
В манах говорят примерно так, но смутные сомнения мучают всё равно.
struct problem describes the problem:
struct problem
{
int l, n;
int *y;
struct feature_node **x;
double bias;
};
where `l' is the number of training data. [b]If bias >= 0, we assume
that one additional feature is added to the end of each data
instance.[/b] `n' is the number of feature (including the bias feature
if bias >= 0). `y' is an array containing the target values. And
`x' is an array of pointers,
each of which points to a sparse representation (array of feature_node) of one
training vector.
For example, if we have the following training data:
LABEL ATTR1 ATTR2 ATTR3 ATTR4 ATTR5
----- ----- ----- ----- ----- -----
1 0 0.1 0.2 0 0
2 0 0.1 0.3 -1.2 0
1 0.4 0 0 0 0
2 0 0.1 0 1.4 0.5
3 -0.1 -0.2 0.1 1.1 0.1
and bias = 1, then the components of problem are:
l = 5
n = 6
y -> 1 2 1 2 3
x -> [ ] -> (2,0.1) (3,0.2) (6,1) (-1,?)
[ ] -> (2,0.1) (3,0.3) (4,-1.2) (6,1) (-1,?)
[ ] -> (1,0.4) (6,1) (-1,?)
[ ] -> (2,0.1) (4,1.4) (5,0.5) (6,1) (-1,?)
[ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (6,1) (-1,?)[/i]
Таки как же всё-таки делать правильно?