以下は、ガウスプロセス(GP)をトレーニングし、MNISTデータセットから画像を分類するために評価するコードです。遅い予測:Scikitガウスプロセス分類
import numpy as np
from sklearn.metrics.classification import accuracy_score, log_loss
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn import datasets
from sklearn.datasets import fetch_mldata
import random
SAMPLE_SIZE = 2000
def build_and_optimize(hp_space):
build_train()
return
def build_train(hp_space):
l_scale = hp_space['l_scale']
bias = hp_space['bias']
gp_fix = GaussianProcessClassifier(kernel=bias * RBF(length_scale=l_scale), optimizer=None, multi_class='one_vs_rest')
X_train, X_test, y_train, y_test = prepare_data()
gp_fix.fit(X_train, y_train)
print("Log Marginal Likelihood (initial): %.3f"
% gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
y_ = gp_fix.predict(X_test[0:500])
print(y_)
print(y_test[0:500])
print("Accuracy: %.3f (initial)"
% (accuracy_score(y_test[0:500], y_)))
return
def prepare_data():
mnist = fetch_mldata('MNIST original', data_home='./')
mnist.keys()
images = mnist.data
targets = mnist.target
X_data = images/255.0
Y = targets
shuf = random.sample(range(len(X_data)), SAMPLE_SIZE)
X_train = []
for x in shuf: X_train.append(X_data[x])
y_train = []
for x in shuf: y_train.append(Y[x])
c_shuf = set(range(len(X_data))) - set(shuf)
X_test = []
for x in c_shuf: X_test.append(X_data[x])
y_test = []
for x in c_shuf: y_test.append(Y[x])
return X_train, X_test, y_train, y_test
if __name__ == "__main__":
hp_space = {}
hp_space['l_scale'] = 1.0
hp_space['bias'] = 1.0
build_train(hp_space)
モデルのトレーニングはかなりの時間がかかるようです。しかし、予測には時間がかかります。理由は何であるかのような任意のポインタですか?
回答が不十分なパフォーマンスを解決したかどうか教えてください。 – sera
@seraそれはあまり改善されません(それでも数分かかる)。しかし、私はそれをプロファイルしませんでした。 –