Bug fix for single output sympy kernel.

This commit is contained in:
Neil Lawrence 2013-11-19 06:50:25 +00:00
parent 2af48254ce
commit f46c72b79b
3 changed files with 25 additions and 7 deletions

View file

@ -14,7 +14,7 @@ import Matern32
import Matern52 import Matern52
import mlp import mlp
import ODE_1 import ODE_1
import ODE_UY #import ODE_UY
import periodic_exponential import periodic_exponential
import periodic_Matern32 import periodic_Matern32
import periodic_Matern52 import periodic_Matern52

View file

@ -177,7 +177,14 @@ class spkern(Kernpart):
# Code to compute argument string when only diagonal is required. # Code to compute argument string when only diagonal is required.
diag_arg_string = re.sub('int jj','//int jj',X_arg_string) diag_arg_string = re.sub('int jj','//int jj',X_arg_string)
diag_arg_string = re.sub('j','i',diag_arg_string) diag_arg_string = re.sub('j','i',diag_arg_string)
diag_precompute_string = precompute_list[0] if precompute_string == '':
# if it's not multioutput, the precompute strings are set to zero
diag_precompute_string = ''
diag_precompute_replace = ''
else:
# for multioutput we need to extract the index of the output form the input.
diag_precompute_string = precompute_list[0]
diag_precompute_replace = precompute_list[1]
# Here's the code to do the looping for K # Here's the code to do the looping for K
@ -215,13 +222,13 @@ class spkern(Kernpart):
TARGET2(i, i) += k(%s); TARGET2(i, i) += k(%s);
for (j=0;j<i;j++){ for (j=0;j<i;j++){
%s //int jj=(int)X2(j, 1); %s //int jj=(int)X2(j, 1);
double kval = k(%s); //double kval = k(X2(i, 0), X2(j, 0), shared_lengthscale, LENGTHSCALE1(ii), SCALE1(ii), LENGTHSCALE1(jj), SCALE1(jj)); double kval = k(%s); //double kval = k(X2(i, 0), shared_lengthscale, LENGTHSCALE1(ii), SCALE1(ii));
TARGET2(i, j) += kval; TARGET2(i, j) += kval;
TARGET2(j, i) += kval; TARGET2(j, i) += kval;
} }
} }
/*%s*/ /*%s*/
"""%(diag_precompute_string, diag_arg_string, re.sub('Z2', 'X2', precompute_list[1]), X_arg_string,str(self._sp_k)) #adding a string representation forces recompile when needed """%(diag_precompute_string, diag_arg_string, re.sub('Z2', 'X2', diag_precompute_replace), X_arg_string,str(self._sp_k)) #adding a string representation forces recompile when needed
# Code to do the looping for Kdiag # Code to do the looping for Kdiag
self._Kdiag_code =\ self._Kdiag_code =\

View file

@ -689,7 +689,7 @@ def olympic_marathon_men(data_set='olympic_marathon_men'):
Y = olympics[:, 1:2] Y = olympics[:, 1:2]
return data_details_return({'X': X, 'Y': Y}, data_set) return data_details_return({'X': X, 'Y': Y}, data_set)
def olympics(): def olympic_sprints(data_set='rogers_girolami_data'):
"""All olympics sprint winning times for multiple output prediction.""" """All olympics sprint winning times for multiple output prediction."""
X = np.zeros((0, 2)) X = np.zeros((0, 2))
Y = np.zeros((0, 1)) Y = np.zeros((0, 1))
@ -707,7 +707,18 @@ def olympics():
data['X'] = X data['X'] = X
data['Y'] = Y data['Y'] = Y
data['info'] = "Olympics sprint event winning for men and women to 2008. Data is from Rogers and Girolami's First Course in Machine Learning." data['info'] = "Olympics sprint event winning for men and women to 2008. Data is from Rogers and Girolami's First Course in Machine Learning."
return data return data_details_return({
'X': X,
'Y': Y,
'info': "Olympics sprint event winning for men and women to 2008. Data is from Rogers and Girolami's First Course in Machine Learning.",
'output_info': {
0:'100m Men',
1:'100m Women',
2:'200m Men',
3:'200m Women',
4:'400m Men',
5:'400m Women'}
}, data_set)
# def movielens_small(partNo=1,seed=default_seed): # def movielens_small(partNo=1,seed=default_seed):
# np.random.seed(seed=seed) # np.random.seed(seed=seed)