我想实现一个使用高斯过程的二进制分类模型。根据official documentation,我有如下代码。
X有2048个特征,Y要么是0,要么是1。在优化模型后,我试图评估其性能。
然而,predict_y方法产生了一个奇怪的结果;预期的pred应该具有类似于(n_test_samples,2)的形状,它表示类0和1的概率。但我得到的结果是(n_test_samples,n_training_samples)。
哪里出了问题?
def model(X,Y):
'''
X: (n_training_samples, n_features) , my example is (n, 2048)
Y: (n_training_samples,) , binary classification
'''
m = gpflow.models.VGP(
(X, Y), likelihood=gpflow.likelihoods.Bernoulli(), kernel=gpflow.kernels.SquaredExponential()
)
opt = gpflow.optimizers.Scipy()
opt.minimize(m.training_loss, variables=m.trainable_variables)
return m
def evaluate(model,X,Y,accuracy, MCC, Kappa):
'''
X: (n_test_samples, n_features) , my example is (n, 2048)
Y: (n_test_samples,) , binary classification
'''
pred,_ = model.predict_y(X)
print('pred.shape is {}'.format(pred)) # I got wired result (num of test samples <X.shape[0]>, num of training samples)
accuracy += [accuracy_score(Y, pred)]
MCC += [matthews_corrcoef(Y, pred)]
Kappa += [cohen_kappa_score(Y, pred)]
return accuracy, MCC, Kappa发布于 2021-07-20 18:02:56
我终于想通了。原因是VGP模型的Y应该具有类似(n_training_samples,1)的形状,而不是(n_training_samples,)。
https://stackoverflow.com/questions/68419128
复制相似问题