| |
Structure Output Learning using Joint Kernel Method
|
A=reg_jkm(H) returns a reg_jkm object initialized with hyperparameters H.
Requires input of the form (x_i,z_i) -> y_i where y_i is a scalar
and one is interested in learning the map y=f(x,z) in order to find
pre-images z*=g(x)=argmax_z* f(x,z*).
Expects the data object to be of the form
d.X{1}=x_: d.X{2}=z_: d.Y=y_:
and x_ and z_ should be normalized so ||x_i||=||z_i||=1
Hyperparameters, and their defaults
ridge=1e-5 -- regularization on input kernel
child=kernel -- the kernel for inputs stored as member "child"
ok=kernel -- the kernel for outputs
output_preimage=0 -- output index from training sample of preimage
instead of actual label
=1 -- output f(x,y), i.e. the score assigned to these
examples
training_method =0 (default) --Perform ridge regression to learn the
mapping
=1 -- Perform kernel matching pursuit
to learn the mapping
max_Xsv = 100 -- maximal number of Support Vectors. This
parameter is only taken into account
when training_method is set to 1
optimizer = 'full_inversion' -- Optimization method for
kernel matching pursuit
Model
alpha -- the weights
Xsv -- the Support Vectors
Methods:
train, test
Example:
a=reg_jkm;
a.child = joint_kernel;
m=100;n=2; example of identity map in 2 dimensions, 10 examples
I=randn(m,n);
X=[I; randn(m,n)];
Z=[I; I];
Y=[ones(m,1) ; zeros(m,1)];
data gives 20 examples of correct map (top) and 10 false maps (bottom)
now.. normalize data to have length 1 (required)
for i=1:length(X)
X(i,:)=X(i,:)/norm(X(i,:));
Z(i,:)=Z(i,:)/norm(Z(i,:));
end
setup data
d=data(X); d2 = data(Z);
dj = joint_data({d,d2},Y);
[r a]=train(a,dj);