From ed422d7e57cdbab0c246e3660de01034bbbaad4d Mon Sep 17 00:00:00 2001 From: Li Hengyu <66453357+HengyuLi-Ozaki-lab@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:27:57 +0900 Subject: [PATCH 1/5] Add GP_sfs class for satisfying scikit-learn --- physbo/gp/core/model.py | 76 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/physbo/gp/core/model.py b/physbo/gp/core/model.py index 0bdd51a7..64b692ef 100644 --- a/physbo/gp/core/model.py +++ b/physbo/gp/core/model.py @@ -4,10 +4,10 @@ from physbo.gp import inf from physbo.gp.core import learning from physbo.gp.core.prior import prior - +from physbo.misc import set_config class model: - def __init__(self, lik, mean, cov, inf="exact"): + def __init__(self, lik, mean, cov, xtrain=None, ytrain=None, inf="exact"): """ Parameters @@ -20,6 +20,8 @@ def __init__(self, lik, mean, cov, inf="exact"): self.lik = lik self.prior = prior(mean=mean, cov=cov) self.inf = inf + self.xtrain = xtrain + self.ytrain = ytrain self.num_params = self.lik.num_params + self.prior.num_params self.params = self.cat_params(self.lik.params, self.prior.params) self.stats = () @@ -301,7 +303,7 @@ def post_sampling(self, X, Z, params=None, N=1, alpha=1): fmean = self.get_post_fmean(X, Z, params=None) fcov = self.get_post_fcov(X, Z, params=None, diag=False) - return np.random.multivariate_normal(fmean, fcov * alpha**2, N) + return np.random.multivariate_normal(fmean, fcov * alpha ** 2, N) def predict_sampling(self, X, Z, params=None, N=1): """ @@ -411,3 +413,71 @@ def fit(self, X, t, config): params = bfgs.run(X, t) self.set_params(params) + +class GP_sfs(model): + + def __init__(self, lik, mean, cov, xtrain=None, ytrain=None, inf="exact",config=None): + super().__init__(lik, mean, cov, xtrain, ytrain, inf) + + self.config = config + + def fit(self, X, t): + """ + Fitting function (update parameters) + + Parameters + ---------- + X: numpy.ndarray + N x d dimensional matrix. Each row of X denotes the d-dimensional feature vector of search candidate. + + t: numpy.ndarray + N dimensional array. + The negative energy of each search candidate (value of the objective function to be optimized). + config: physbo.misc.set_config object + + """ + #config = set_config() + method = self.config.learning.method + + if method == "adam": + adam = learning.adam(self, self.config) + params = adam.run(X, t) + + if method in ("bfgs", "batch"): + bfgs = learning.batch(self, self.config) + params = bfgs.run(X, t) + + self.set_params(params) + + self.prepare(X, t, params=None) + + def prepare(self, X, t, params=None): + return super().prepare(X, t, params) + + def get_post_fmean(self, X, Z, params=None): + return super().get_post_fmean(X, Z, params) + + def predict(self, Z, params=None): + """ + Calculating posterior mean of model (function) + + Parameters + ========== + X: numpy.ndarray + inputs + Z: numpy.ndarray + feature maps + params: numpy.ndarray + Parameters + See also + ======== + physbo.gp.inf.exact.get_post_fmean + """ + + if params is None: + params = np.copy(self.params) + + if self.inf == "exact": + post_fmu = inf.exact.get_post_fmean(self, Z, Z, params) + + return post_fmu \ No newline at end of file From 56c581ee9207fe31099263a133d2de60f2e1b796 Mon Sep 17 00:00:00 2001 From: Li Hengyu <66453357+HengyuLi-Ozaki-lab@users.noreply.github.com> Date: Mon, 9 Oct 2023 22:22:26 +0900 Subject: [PATCH 2/5] Add new function for cross validation get_params is created for clone when using cross validation. --- physbo/gp/core/model.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/physbo/gp/core/model.py b/physbo/gp/core/model.py index 64b692ef..8de2a255 100644 --- a/physbo/gp/core/model.py +++ b/physbo/gp/core/model.py @@ -5,9 +5,10 @@ from physbo.gp.core import learning from physbo.gp.core.prior import prior from physbo.misc import set_config +from mlxtend.feature_selection import SequentialFeatureSelector as SFS class model: - def __init__(self, lik, mean, cov, xtrain=None, ytrain=None, inf="exact"): + def __init__(self, lik, mean, cov, inf="exact"): """ Parameters @@ -20,8 +21,6 @@ def __init__(self, lik, mean, cov, xtrain=None, ytrain=None, inf="exact"): self.lik = lik self.prior = prior(mean=mean, cov=cov) self.inf = inf - self.xtrain = xtrain - self.ytrain = ytrain self.num_params = self.lik.num_params + self.prior.num_params self.params = self.cat_params(self.lik.params, self.prior.params) self.stats = () @@ -414,13 +413,16 @@ def fit(self, X, t, config): self.set_params(params) -class GP_sfs(model): +class sfs(model): - def __init__(self, lik, mean, cov, xtrain=None, ytrain=None, inf="exact",config=None): - super().__init__(lik, mean, cov, xtrain, ytrain, inf) + def __init__(self, lik, mean, cov, inf="exact",config=None): + super().__init__(lik, mean, cov, inf) self.config = config + def prepare(self, X, t, params=None): + return super().prepare(X, t, params) + def fit(self, X, t): """ Fitting function (update parameters) @@ -451,8 +453,7 @@ def fit(self, X, t): self.prepare(X, t, params=None) - def prepare(self, X, t, params=None): - return super().prepare(X, t, params) + self.xtrain = X def get_post_fmean(self, X, Z, params=None): return super().get_post_fmean(X, Z, params) @@ -478,6 +479,14 @@ def predict(self, Z, params=None): params = np.copy(self.params) if self.inf == "exact": - post_fmu = inf.exact.get_post_fmean(self, Z, Z, params) + post_fmu = inf.exact.get_post_fmean(self, self.xtrain, Z, params) + + return post_fmu + + def get_params(self,deep=True): + + mean = self.prior.mean + cov = self.prior.cov + config = self.config - return post_fmu \ No newline at end of file + return {"lik":self.lik,"mean":mean,"cov":cov,"config":config} \ No newline at end of file From e0b9042ad326ebcf06d3cd1c643b4b05e27c18c3 Mon Sep 17 00:00:00 2001 From: Li Hengyu <66453357+HengyuLi-Ozaki-lab@users.noreply.github.com> Date: Mon, 9 Oct 2023 22:28:45 +0900 Subject: [PATCH 3/5] Update __init__.py --- physbo/gp/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/physbo/gp/__init__.py b/physbo/gp/__init__.py index ee1bd702..50ca44f1 100644 --- a/physbo/gp/__init__.py +++ b/physbo/gp/__init__.py @@ -4,5 +4,6 @@ from .core import prior from .core import model +from .core import sfs from .core import learning from .predictor import predictor From 144a26635b39437917c31e4eb232ea114553fc28 Mon Sep 17 00:00:00 2001 From: Li Hengyu <66453357+HengyuLi-Ozaki-lab@users.noreply.github.com> Date: Mon, 9 Oct 2023 22:29:44 +0900 Subject: [PATCH 4/5] Update __init__.py --- physbo/gp/core/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/physbo/gp/core/__init__.py b/physbo/gp/core/__init__.py index d2e597be..a00001bc 100644 --- a/physbo/gp/core/__init__.py +++ b/physbo/gp/core/__init__.py @@ -1,4 +1,5 @@ from .prior import prior from .model import model +from .model import sfs # from predictor import predictor From 8dbf2b41ec0d77b5485721bc0077d6b8d9a11ca8 Mon Sep 17 00:00:00 2001 From: Li Hengyu <66453357+HengyuLi-Ozaki-lab@users.noreply.github.com> Date: Mon, 9 Oct 2023 22:33:16 +0900 Subject: [PATCH 5/5] Test code for SFFS Sequential forward floating selection combined with PHYSBO, here is a test code. The input parameter for SequentialFeatureSelector in mlxtend library can be find in: https://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/ --- examples/SFFS.ipynb | 1010 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1010 insertions(+) create mode 100644 examples/SFFS.ipynb diff --git a/examples/SFFS.ipynb b/examples/SFFS.ipynb new file mode 100644 index 00000000..d225c81a --- /dev/null +++ b/examples/SFFS.ipynb @@ -0,0 +1,1010 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import physbo\n", + "\n", + "import numpy as np\n", + "\n", + "from mlxtend.feature_selection import SequentialFeatureSelector as SFS\n", + "\n", + "# define target function\n", + "\n", + "def target(x1,x2,x3,x4,x5):\n", + "\n", + " y = (100-x5)**2 + (2-x3)**2 + (10-x1)**2 + (1-x2)**2 + x4 + (1000-x1*x2) + np.random.normal(0,1)\n", + "\n", + " return y\n", + "\n", + "para_num=2000\n", + "\n", + "coefficient1 = np.random.uniform(-10,10,para_num)\n", + "coefficient2 = np.random.uniform(-10,10,para_num)\n", + "coefficient3 = np.random.uniform(-10,10,para_num)\n", + "coefficient4 = np.random.uniform(-10,10,para_num)\n", + "coefficient5 = np.random.uniform(-10,10,para_num)\n", + "coefficient = np.array([coefficient1,coefficient2,coefficient3,coefficient4,coefficient5]).T # coefficient = features X = [[coefficient1,coefficient3],[coefficient3,coefficient1]]\n", + "\n", + "y = np.array([target(coefficient[i][0],coefficient[i][1],coefficient[i][2],coefficient[i][3],coefficient[i][4]) for i in range(para_num)])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "cov = physbo.gp.cov.gauss(coefficient.shape[1],ard = False)\n", + "\n", + "mean = physbo.gp.mean.const()\n", + "\n", + "lik = physbo.gp.lik.gauss()\n", + "\n", + "config = physbo.misc.set_config()\n", + "\n", + "gp = physbo.gp.sfs(lik=lik,mean=mean,cov=cov,config=config)\n", + "\n", + "test = physbo.gp.model(lik=lik,mean=mean,cov=cov)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "sfs = SFS(estimator=gp,\n", + " k_features=3,\n", + " forward=True,\n", + " floating=True,\n", + " verbose=2,\n", + " scoring='r2', \n", + " cv=3,clone_estimator=False,n_jobs=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8394.692107640107\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 24961.10534143752\n", + "0 -th epoch marginal likelihood 25027.237945442175\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 24988.522313673915\n", + "0 -th epoch marginal likelihood 25058.811482450634\n", + "50 -th epoch marginal likelihood 8393.252454868598\n", + "50 -th epoch marginal likelihood 13615.070944271509\n", + "50 -th epoch marginal likelihood 13656.90991534373\n", + "50 -th epoch marginal likelihood 13641.503186631024\n", + "50 -th epoch marginal likelihood 13645.13132110246\n", + "100 -th epoch marginal likelihood 8392.291570455853\n", + "100 -th epoch marginal likelihood 11882.21265905766\n", + "100 -th epoch marginal likelihood 11891.191805530565\n", + "100 -th epoch marginal likelihood 11888.694027883696\n", + "100 -th epoch marginal likelihood 11889.644276096426\n", + "150 -th epoch marginal likelihood 8391.943793337241\n", + "150 -th epoch marginal likelihood 11438.129253146151\n", + "150 -th epoch marginal likelihood 11439.647584499286\n", + "150 -th epoch marginal likelihood 11440.231933927062\n", + "200 -th epoch marginal likelihood 8391.794064563468\n", + "150 -th epoch marginal likelihood 11440.112038417898\n", + "200 -th epoch marginal likelihood 11322.76624936791\n", + "200 -th epoch marginal likelihood 11325.29445371271\n", + "200 -th epoch marginal likelihood 11325.79022517724\n", + "250 -th epoch marginal likelihood 8391.771224361262\n", + "200 -th epoch marginal likelihood 11324.66858603153\n", + "250 -th epoch marginal likelihood 11300.884864349422\n", + "250 -th epoch marginal likelihood 11303.242319680172\n", + "250 -th epoch marginal likelihood 11303.847726637523\n", + "300 -th epoch marginal likelihood 8391.800527908683\n", + "250 -th epoch marginal likelihood 11302.101996308704\n", + "300 -th epoch marginal likelihood 11298.224933373665\n", + "300 -th epoch marginal likelihood 11300.401889133342\n", + "300 -th epoch marginal likelihood 11300.978415220317\n", + "350 -th epoch marginal likelihood 8391.772475113994\n", + "350 -th epoch marginal likelihood 11297.66712142268\n", + "300 -th epoch marginal likelihood 11299.22497720701\n", + "350 -th epoch marginal likelihood 11299.829019368835\n", + "350 -th epoch marginal likelihood 11300.27247702757\n", + "400 -th epoch marginal likelihood 8391.766783284382\n", + "400 -th epoch marginal likelihood 11297.43713817204\n", + "400 -th epoch marginal likelihood 11299.466772435286\n", + "350 -th epoch marginal likelihood 11298.646190715814\n", + "400 -th epoch marginal likelihood 11299.91841895285\n", + "450 -th epoch marginal likelihood 8391.779322204538\n", + "450 -th epoch marginal likelihood 11297.261613554807\n", + "450 -th epoch marginal likelihood 11299.133411050621\n", + "450 -th epoch marginal likelihood 11299.576252279945\n", + "400 -th epoch marginal likelihood 11298.368044657163\n", + "500 -th epoch marginal likelihood 8391.785505818381\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 11297.144247816968\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 11298.976585080529\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 11299.322207608308\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "450 -th epoch marginal likelihood 11298.1220460415\n", + "500 -th epoch marginal likelihood 11298.005702755341\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8437.131715888852\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25016.540404537067\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 24943.318098573644\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25073.018163957233\n", + "50 -th epoch marginal likelihood 8435.917491503891\n", + "50 -th epoch marginal likelihood 13630.446673030194\n", + "50 -th epoch marginal likelihood 13619.672955292608\n", + "50 -th epoch marginal likelihood 13638.295199293187\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25005.045588399225\n", + "100 -th epoch marginal likelihood 8435.118531586477\n", + "100 -th epoch marginal likelihood 11864.177128193796\n", + "100 -th epoch marginal likelihood 11861.671812960989\n", + "100 -th epoch marginal likelihood 11871.692812143678\n", + "50 -th epoch marginal likelihood 13613.372996947257\n", + "150 -th epoch marginal likelihood 8434.828055010901\n", + "150 -th epoch marginal likelihood 11410.586333116902\n", + "150 -th epoch marginal likelihood 11408.408663689872\n", + "150 -th epoch marginal likelihood 11413.273303823658\n", + "100 -th epoch marginal likelihood 11857.854507662345\n", + "200 -th epoch marginal likelihood 8434.69433935276\n", + "200 -th epoch marginal likelihood 11293.553614191824\n", + "200 -th epoch marginal likelihood 11292.307068175578\n", + "200 -th epoch marginal likelihood 11294.863949801447\n", + "150 -th epoch marginal likelihood 11405.124432818162\n", + "250 -th epoch marginal likelihood 8434.660576522681\n", + "250 -th epoch marginal likelihood 11270.965787251664\n", + "250 -th epoch marginal likelihood 11269.841529089403\n", + "250 -th epoch marginal likelihood 11271.544954824321\n", + "200 -th epoch marginal likelihood 11290.434923495066\n", + "300 -th epoch marginal likelihood 8434.660217124616\n", + "300 -th epoch marginal likelihood 11267.92454008275\n", + "300 -th epoch marginal likelihood 11266.916839272215\n", + "300 -th epoch marginal likelihood 11268.414177626493\n", + "250 -th epoch marginal likelihood 11268.679021146498\n", + "350 -th epoch marginal likelihood 11267.23699453149\n", + "350 -th epoch marginal likelihood 8434.673495603723\n", + "350 -th epoch marginal likelihood 11266.341709641243\n", + "350 -th epoch marginal likelihood 11267.656361725609\n", + "300 -th epoch marginal likelihood 11265.9453044816\n", + "400 -th epoch marginal likelihood 8434.627581516836\n", + "400 -th epoch marginal likelihood 11266.833038624958\n", + "400 -th epoch marginal likelihood 11265.93125294241\n", + "400 -th epoch marginal likelihood 11267.168699955106\n", + "350 -th epoch marginal likelihood 11265.476711890784\n", + "450 -th epoch marginal likelihood 8434.648234149154\n", + "450 -th epoch marginal likelihood 11266.520644059787\n", + "450 -th epoch marginal likelihood 11265.710905854541\n", + "450 -th epoch marginal likelihood 11266.778574564125\n", + "400 -th epoch marginal likelihood 11265.169921183297\n", + "500 -th epoch marginal likelihood 8434.666100385348\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 11266.331639298953\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 11265.583531605695\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 11266.50722506471\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "450 -th epoch marginal likelihood 11264.989918808309\n", + "500 -th epoch marginal likelihood 11264.890974271668\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8426.917442722235\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25055.030913118226\n", + "0 -th epoch marginal likelihood 24945.672301020117\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25069.40362965293\n", + "50 -th epoch marginal likelihood 8425.546079727721\n", + "50 -th epoch marginal likelihood 13657.424110022224\n", + "50 -th epoch marginal likelihood 13626.032879292772\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25049.77648975408\n", + "50 -th epoch marginal likelihood 13664.89911623701\n", + "100 -th epoch marginal likelihood 8424.880338206025\n", + "100 -th epoch marginal likelihood 11902.62730404944\n", + "100 -th epoch marginal likelihood 11895.750624808115\n", + "100 -th epoch marginal likelihood 11905.516755759549\n", + "50 -th epoch marginal likelihood 13657.382221036096\n", + "150 -th epoch marginal likelihood 8424.583063882486\n", + "150 -th epoch marginal likelihood 11452.52209895657\n", + "150 -th epoch marginal likelihood 11448.45254163338\n", + "150 -th epoch marginal likelihood 11454.336366838746\n", + "100 -th epoch marginal likelihood 11903.247090762821\n", + "200 -th epoch marginal likelihood 11337.984767393193\n", + "200 -th epoch marginal likelihood 8424.464509187645\n", + "200 -th epoch marginal likelihood 11333.275511860928\n", + "200 -th epoch marginal likelihood 11338.420775516182\n", + "150 -th epoch marginal likelihood 11452.939713954627\n", + "250 -th epoch marginal likelihood 11315.576616625054\n", + "250 -th epoch marginal likelihood 8424.415266105316\n", + "250 -th epoch marginal likelihood 11311.398562302604\n", + "250 -th epoch marginal likelihood 11316.204969405153\n", + "200 -th epoch marginal likelihood 11337.677305119947\n", + "300 -th epoch marginal likelihood 11312.535005554357\n", + "300 -th epoch marginal likelihood 8424.426948175791\n", + "300 -th epoch marginal likelihood 11308.815512707226\n", + "300 -th epoch marginal likelihood 11313.111728720203\n", + "250 -th epoch marginal likelihood 11315.146957037115\n", + "350 -th epoch marginal likelihood 11311.93706358209\n", + "350 -th epoch marginal likelihood 8424.4084640009\n", + "350 -th epoch marginal likelihood 11308.365236463476\n", + "300 -th epoch marginal likelihood 11312.423540961854\n", + "350 -th epoch marginal likelihood 11312.442852595052\n", + "400 -th epoch marginal likelihood 11311.5168885129\n", + "400 -th epoch marginal likelihood 8424.42263191808\n", + "400 -th epoch marginal likelihood 11308.205124504831\n", + "400 -th epoch marginal likelihood 11312.038173816965\n", + "350 -th epoch marginal likelihood 11311.825860380113\n", + "450 -th epoch marginal likelihood 11311.275951176323\n", + "450 -th epoch marginal likelihood 11308.139396131613\n", + "450 -th epoch marginal likelihood 8424.457138682741\n", + "450 -th epoch marginal likelihood 11311.626448257965\n", + "400 -th epoch marginal likelihood 11311.528324244358\n", + "500 -th epoch marginal likelihood 11311.087798336908\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8424.42713327391\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 11308.100460086758\n", + "Done\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 32.4s remaining: 48.6s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "500 -th epoch marginal likelihood 11311.38520824873\n", + "Done\n", + "\n", + "450 -th epoch marginal likelihood 11311.267549038928\n", + "500 -th epoch marginal likelihood 11311.071330999132\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 32.8s finished\n", + "\n", + "[2023-10-09 22:11:10] Features: 1/3 -- score: 0.9868212005393535[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8348.661884201516\n", + "0 -th epoch marginal likelihood 8406.156516774883\n", + "50 -th epoch marginal likelihood 8343.172238132636\n", + "50 -th epoch marginal likelihood 8400.466800380731\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7366.98853938562\n", + "0 -th epoch marginal likelihood 8370.15611847102\n", + "100 -th epoch marginal likelihood 8341.721021871012\n", + "100 -th epoch marginal likelihood 8398.870580527268\n", + "50 -th epoch marginal likelihood 8364.842902199669\n", + "50 -th epoch marginal likelihood 7358.517947131348\n", + "150 -th epoch marginal likelihood 8341.231750204237\n", + "150 -th epoch marginal likelihood 8398.328133055265\n", + "100 -th epoch marginal likelihood 7356.620976941095\n", + "100 -th epoch marginal likelihood 8363.371811862879\n", + "200 -th epoch marginal likelihood 8341.053793463583\n", + "200 -th epoch marginal likelihood 8398.11729552888\n", + "150 -th epoch marginal likelihood 7356.05737114786\n", + "150 -th epoch marginal likelihood 8362.868906476739\n", + "250 -th epoch marginal likelihood 8340.98283159921\n", + "250 -th epoch marginal likelihood 8398.027422725974\n", + "200 -th epoch marginal likelihood 7355.704667154792\n", + "200 -th epoch marginal likelihood 8362.757006347629\n", + "300 -th epoch marginal likelihood 8340.988043231036\n", + "300 -th epoch marginal likelihood 8397.978815952676\n", + "250 -th epoch marginal likelihood 7355.6064865684575\n", + "250 -th epoch marginal likelihood 8362.66835436513\n", + "350 -th epoch marginal likelihood 8340.959273121345\n", + "350 -th epoch marginal likelihood 8397.979738254757\n", + "300 -th epoch marginal likelihood 7355.745602799287\n", + "300 -th epoch marginal likelihood 8362.654043939474\n", + "400 -th epoch marginal likelihood 8340.964442447279\n", + "400 -th epoch marginal likelihood 8397.935617859379\n", + "350 -th epoch marginal likelihood 7355.5908640773105\n", + "350 -th epoch marginal likelihood 8362.589374987134\n", + "450 -th epoch marginal likelihood 8340.941011928955\n", + "450 -th epoch marginal likelihood 8397.922297035038\n", + "400 -th epoch marginal likelihood 7355.613606565945\n", + "400 -th epoch marginal likelihood 8362.593986901027\n", + "500 -th epoch marginal likelihood 8340.93336736056\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8397.940346136087\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "450 -th epoch marginal likelihood 7355.637140339025\n", + "450 -th epoch marginal likelihood 8362.575630404288\n", + "500 -th epoch marginal likelihood 7355.636810652959\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8362.56983824255\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8448.799498703494\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8384.64530148956\n", + "50 -th epoch marginal likelihood 8443.323547470913\n", + "50 -th epoch marginal likelihood 8379.449153339217\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8410.899084508474\n", + "0 -th epoch marginal likelihood 7372.625087352935\n", + "100 -th epoch marginal likelihood 8441.804850238816\n", + "100 -th epoch marginal likelihood 8378.054781075958\n", + "50 -th epoch marginal likelihood 8405.761183377332\n", + "50 -th epoch marginal likelihood 7364.866891824461\n", + "150 -th epoch marginal likelihood 8441.365082381024\n", + "150 -th epoch marginal likelihood 8377.62888318411\n", + "100 -th epoch marginal likelihood 8404.28124725758\n", + "100 -th epoch marginal likelihood 7363.194110903938\n", + "200 -th epoch marginal likelihood 8441.195836849569\n", + "200 -th epoch marginal likelihood 8377.494438279977\n", + "150 -th epoch marginal likelihood 8403.80385289546\n", + "150 -th epoch marginal likelihood 7362.591366863666\n", + "250 -th epoch marginal likelihood 8441.11929407143\n", + "250 -th epoch marginal likelihood 8377.415850985173\n", + "200 -th epoch marginal likelihood 8403.66286455045\n", + "200 -th epoch marginal likelihood 7362.462823929736\n", + "300 -th epoch marginal likelihood 8441.140771998294\n", + "300 -th epoch marginal likelihood 8377.429238495792\n", + "250 -th epoch marginal likelihood 8403.603933290527\n", + "250 -th epoch marginal likelihood 7362.438292943982\n", + "350 -th epoch marginal likelihood 8441.106446557207\n", + "350 -th epoch marginal likelihood 8377.411044560164\n", + "300 -th epoch marginal likelihood 7362.428802144553\n", + "300 -th epoch marginal likelihood 8403.635201940566\n", + "400 -th epoch marginal likelihood 8441.178459103154\n", + "400 -th epoch marginal likelihood 8377.445780564696\n", + "350 -th epoch marginal likelihood 7362.425638400319\n", + "350 -th epoch marginal likelihood 8403.543806552287\n", + "450 -th epoch marginal likelihood 8441.09870629876\n", + "450 -th epoch marginal likelihood 8377.403338715741\n", + "400 -th epoch marginal likelihood 8403.561989566668\n", + "400 -th epoch marginal likelihood 7362.49334292305\n", + "500 -th epoch marginal likelihood 8441.111928822826\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 8377.393454337565\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "450 -th epoch marginal likelihood 8403.522918487286\n", + "450 -th epoch marginal likelihood 7362.325613212061\n", + "500 -th epoch marginal likelihood 8403.52780370436\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 7362.392479889024\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8438.64709433931\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8369.226746477078\n", + "50 -th epoch marginal likelihood 8432.650151554559\n", + "50 -th epoch marginal likelihood 8363.96339380385\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7416.292266847133\n", + "0 -th epoch marginal likelihood 8408.717425059125\n", + "100 -th epoch marginal likelihood 8430.733744732877\n", + "100 -th epoch marginal likelihood 8362.581191517354\n", + "50 -th epoch marginal likelihood 7409.126474914163\n", + "150 -th epoch marginal likelihood 8430.147362588723\n", + "50 -th epoch marginal likelihood 8403.244621571883\n", + "150 -th epoch marginal likelihood 8362.164145382032\n", + "100 -th epoch marginal likelihood 7407.4852564482035\n", + "200 -th epoch marginal likelihood 8429.886804422102\n", + "100 -th epoch marginal likelihood 8401.59009400104\n", + "200 -th epoch marginal likelihood 8362.006436794016\n", + "150 -th epoch marginal likelihood 7406.971494733303\n", + "250 -th epoch marginal likelihood 8429.747527636157\n", + "150 -th epoch marginal likelihood 8401.011990622485\n", + "250 -th epoch marginal likelihood 8361.98702411757\n", + "200 -th epoch marginal likelihood 7406.769707951678\n", + "300 -th epoch marginal likelihood 8429.688112568621\n", + "200 -th epoch marginal likelihood 8400.793678112668\n", + "300 -th epoch marginal likelihood 8361.908527972973\n", + "250 -th epoch marginal likelihood 7406.679082044225\n", + "350 -th epoch marginal likelihood 8429.709924524612\n", + "250 -th epoch marginal likelihood 8400.707051416968\n", + "350 -th epoch marginal likelihood 8361.917387571768\n", + "300 -th epoch marginal likelihood 7406.653889771927\n", + "400 -th epoch marginal likelihood 8429.724953474339\n", + "300 -th epoch marginal likelihood 8400.662601247699\n", + "400 -th epoch marginal likelihood 8361.965621119074\n", + "350 -th epoch marginal likelihood 7406.73671764464\n", + "450 -th epoch marginal likelihood 8429.712014970715\n", + "350 -th epoch marginal likelihood 8400.656766295002\n", + "450 -th epoch marginal likelihood 8361.940628673123\n", + "400 -th epoch marginal likelihood 7406.67590507235\n", + "500 -th epoch marginal likelihood 8429.676077994942\n", + "Done\n", + "\n", + "400 -th epoch marginal likelihood 8400.650924452952\n", + "500 -th epoch marginal likelihood 8361.99410020812\n", + "Done\n", + "\n", + "450 -th epoch marginal likelihood 7406.637415256406\n", + "450 -th epoch marginal likelihood 8400.65902380914\n", + "500 -th epoch marginal likelihood 7406.64668390076\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8400.661119354912\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Done 4 out of 4 | elapsed: 30.1s finished\n", + "\n", + "[2023-10-09 22:11:41] Features: 2/3 -- score: 0.9972916731489968[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7380.252052642909\n", + "0 -th epoch marginal likelihood 6853.388069440912\n", + "0 -th epoch marginal likelihood 7072.274491559429\n", + "50 -th epoch marginal likelihood 7366.320818436539\n", + "50 -th epoch marginal likelihood 6768.635202201106\n", + "50 -th epoch marginal likelihood 7042.191714856888\n", + "100 -th epoch marginal likelihood 7363.401371837834\n", + "100 -th epoch marginal likelihood 6765.818993157858\n", + "100 -th epoch marginal likelihood 7039.314956732355\n", + "150 -th epoch marginal likelihood 7362.5339645011145\n", + "150 -th epoch marginal likelihood 6765.093795292746\n", + "150 -th epoch marginal likelihood 7038.508187698322\n", + "200 -th epoch marginal likelihood 7362.175211895561\n", + "200 -th epoch marginal likelihood 6764.801199017752\n", + "200 -th epoch marginal likelihood 7038.2646571703435\n", + "250 -th epoch marginal likelihood 7362.195496797939\n", + "250 -th epoch marginal likelihood 6764.79219024564\n", + "250 -th epoch marginal likelihood 7038.093235296676\n", + "300 -th epoch marginal likelihood 7362.031643175413\n", + "300 -th epoch marginal likelihood 6764.787875118791\n", + "300 -th epoch marginal likelihood 7038.043072232177\n", + "350 -th epoch marginal likelihood 7362.018293257057\n", + "350 -th epoch marginal likelihood 6764.659697138307\n", + "350 -th epoch marginal likelihood 7037.946251147738\n", + "400 -th epoch marginal likelihood 7361.984553140729\n", + "400 -th epoch marginal likelihood 6764.716380702993\n", + "400 -th epoch marginal likelihood 7038.055586421422\n", + "450 -th epoch marginal likelihood 7361.973581031396\n", + "450 -th epoch marginal likelihood 6764.782999717808\n", + "450 -th epoch marginal likelihood 7038.061743475627\n", + "500 -th epoch marginal likelihood 7362.004635776717\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 6764.823031644267\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 7038.043200140586\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7383.934785966861\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 6853.537518160264\n", + "0 -th epoch marginal likelihood 7057.200729919182\n", + "50 -th epoch marginal likelihood 7372.9222462359485\n", + "50 -th epoch marginal likelihood 6781.992509001286\n", + "50 -th epoch marginal likelihood 7030.031780114455\n", + "100 -th epoch marginal likelihood 7370.619133823647\n", + "100 -th epoch marginal likelihood 6779.576662201424\n", + "100 -th epoch marginal likelihood 7027.830999356948\n", + "150 -th epoch marginal likelihood 7370.105054755204\n", + "150 -th epoch marginal likelihood 6779.001180218182\n", + "150 -th epoch marginal likelihood 7026.5028676593565\n", + "200 -th epoch marginal likelihood 7369.967150907525\n", + "200 -th epoch marginal likelihood 6778.746276112818\n", + "200 -th epoch marginal likelihood 7026.504799517027\n", + "250 -th epoch marginal likelihood 7369.950236525045\n", + "250 -th epoch marginal likelihood 6778.788134673748\n", + "250 -th epoch marginal likelihood 7026.0146679666595\n", + "300 -th epoch marginal likelihood 7369.913378081135\n", + "300 -th epoch marginal likelihood 6778.598192836724\n", + "300 -th epoch marginal likelihood 7025.760779436226\n", + "350 -th epoch marginal likelihood 7369.89229989129\n", + "350 -th epoch marginal likelihood 6778.655385232025\n", + "350 -th epoch marginal likelihood 7026.231836195792\n", + "400 -th epoch marginal likelihood 7369.880223932143\n", + "400 -th epoch marginal likelihood 6778.750184089111\n", + "400 -th epoch marginal likelihood 7026.206421882574\n", + "450 -th epoch marginal likelihood 7369.8818994944495\n", + "450 -th epoch marginal likelihood 6778.600793212785\n", + "450 -th epoch marginal likelihood 7026.169073314849\n", + "500 -th epoch marginal likelihood 7369.879932594257\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 6778.650064423405\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 7025.985606009753\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7425.236133784977\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 6882.4801596008565\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 7116.144131978775\n", + "50 -th epoch marginal likelihood 7412.079020766404\n", + "50 -th epoch marginal likelihood 6802.732401001239\n", + "50 -th epoch marginal likelihood 7088.515315448793\n", + "100 -th epoch marginal likelihood 7408.999897897296\n", + "100 -th epoch marginal likelihood 6799.809368505202\n", + "100 -th epoch marginal likelihood 7085.110118427161\n", + "150 -th epoch marginal likelihood 7408.140727804241\n", + "150 -th epoch marginal likelihood 6799.07291074185\n", + "150 -th epoch marginal likelihood 7083.84619195766\n", + "200 -th epoch marginal likelihood 7407.856791237282\n", + "200 -th epoch marginal likelihood 6798.790111335462\n", + "200 -th epoch marginal likelihood 7083.592439544232\n", + "250 -th epoch marginal likelihood 7407.7265079654535\n", + "250 -th epoch marginal likelihood 6798.703666439378\n", + "250 -th epoch marginal likelihood 7083.615407897124\n", + "300 -th epoch marginal likelihood 7407.679377148817\n", + "300 -th epoch marginal likelihood 6798.682939252364\n", + "300 -th epoch marginal likelihood 7083.43114420494\n", + "350 -th epoch marginal likelihood 7407.698426318327\n", + "350 -th epoch marginal likelihood 6798.696704051623\n", + "350 -th epoch marginal likelihood 7083.37901855841\n", + "400 -th epoch marginal likelihood 7407.757573212317\n", + "400 -th epoch marginal likelihood 6798.8052843951555\n", + "400 -th epoch marginal likelihood 7083.456279076076\n", + "450 -th epoch marginal likelihood 7407.679463501584\n", + "450 -th epoch marginal likelihood 6798.702033160487\n", + "450 -th epoch marginal likelihood 7083.543513835316\n", + "500 -th epoch marginal likelihood 7407.631113131754\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 6798.839509680971\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 7083.436575167636\n", + "Done\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Done 3 out of 3 | elapsed: 27.1s finished\n", + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25417.25952973674\n", + "0 -th epoch marginal likelihood 8370.150691315843\n", + "50 -th epoch marginal likelihood 14568.545907200218\n", + "50 -th epoch marginal likelihood 8364.753935882698\n", + "100 -th epoch marginal likelihood 12862.33467989464\n", + "100 -th epoch marginal likelihood 8363.30442487214\n", + "150 -th epoch marginal likelihood 11986.867433425134\n", + "150 -th epoch marginal likelihood 8362.85102673119\n", + "200 -th epoch marginal likelihood 11558.290423093193\n", + "200 -th epoch marginal likelihood 8362.692841194772\n", + "250 -th epoch marginal likelihood 11383.269424890985\n", + "250 -th epoch marginal likelihood 8362.61693373179\n", + "300 -th epoch marginal likelihood 11327.535662659871\n", + "300 -th epoch marginal likelihood 8362.60493075461\n", + "350 -th epoch marginal likelihood 11308.248221165366\n", + "350 -th epoch marginal likelihood 8362.554338698534\n", + "400 -th epoch marginal likelihood 11301.288097330098\n", + "400 -th epoch marginal likelihood 8362.569360967344\n", + "450 -th epoch marginal likelihood 11298.13683732899\n", + "450 -th epoch marginal likelihood 8362.588251109968\n", + "500 -th epoch marginal likelihood 11296.01073859547\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8362.559431238897\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25421.881394094737\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8410.918451174932\n", + "50 -th epoch marginal likelihood 14339.941367061208\n", + "50 -th epoch marginal likelihood 8405.847980735656\n", + "100 -th epoch marginal likelihood 12625.850659742582\n", + "100 -th epoch marginal likelihood 8404.358429588547\n", + "150 -th epoch marginal likelihood 11890.892838746895\n", + "150 -th epoch marginal likelihood 8403.924370340072\n", + "200 -th epoch marginal likelihood 11522.778933305734\n", + "200 -th epoch marginal likelihood 8403.694224328197\n", + "250 -th epoch marginal likelihood 11365.346182291476\n", + "250 -th epoch marginal likelihood 8403.609327915476\n", + "300 -th epoch marginal likelihood 11306.706662766901\n", + "300 -th epoch marginal likelihood 8403.616597512182\n", + "350 -th epoch marginal likelihood 11286.464721719973\n", + "350 -th epoch marginal likelihood 8403.550724891156\n", + "400 -th epoch marginal likelihood 11278.90551489383\n", + "400 -th epoch marginal likelihood 8403.5438051382\n", + "450 -th epoch marginal likelihood 11274.414188707166\n", + "450 -th epoch marginal likelihood 8403.546835147039\n", + "500 -th epoch marginal likelihood 11271.236321882174\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "500 -th epoch marginal likelihood 8403.545799030224\n", + "Done\n", + "\n", + "Start the initial hyper parameter searching ...\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 25497.968812217412\n", + "Done\n", + "\n", + "Start the hyper parameter learning ...\n", + "0 -th epoch marginal likelihood 8408.705472676626\n", + "50 -th epoch marginal likelihood 14296.13346995813\n", + "50 -th epoch marginal likelihood 8403.239744736737\n", + "100 -th epoch marginal likelihood 12662.484300091477\n", + "100 -th epoch marginal likelihood 8401.626452874256\n", + "150 -th epoch marginal likelihood 11931.188047845548\n", + "150 -th epoch marginal likelihood 8401.033529280608\n", + "200 -th epoch marginal likelihood 11564.647303657104\n", + "200 -th epoch marginal likelihood 8400.841585609109\n", + "250 -th epoch marginal likelihood 11407.140678401727\n", + "250 -th epoch marginal likelihood 8400.740274067624\n", + "300 -th epoch marginal likelihood 11346.927779000993\n", + "300 -th epoch marginal likelihood 8400.726023845597\n", + "350 -th epoch marginal likelihood 11326.64090238014\n", + "350 -th epoch marginal likelihood 8400.690824674211\n", + "400 -th epoch marginal likelihood 11318.576422682858\n", + "400 -th epoch marginal likelihood 8400.753422347942\n", + "450 -th epoch marginal likelihood 11314.908946073198\n", + "450 -th epoch marginal likelihood 8400.706229365529\n", + "500 -th epoch marginal likelihood 11313.245342520775\n", + "Done\n", + "\n", + "500 -th epoch marginal likelihood 8400.67014871078\n", + "Done\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Done 2 out of 2 | elapsed: 24.6s finished\n", + "\n", + "[2023-10-09 22:12:32] Features: 3/3 -- score: 0.9989209394666663" + ] + }, + { + "data": { + "text/html": [ + "
SequentialFeatureSelector(clone_estimator=False, cv=3,\n",
+       "                          estimator=<physbo.gp.core.model.GP_sfs object at 0x15b08c0a0>,\n",
+       "                          floating=True, k_features=(3, 3), n_jobs=-1,\n",
+       "                          scoring='r2', verbose=2)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "SequentialFeatureSelector(clone_estimator=False, cv=3,\n", + " estimator=,\n", + " floating=True, k_features=(3, 3), n_jobs=-1,\n", + " scoring='r2', verbose=2)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sfs.fit(coefficient,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: {'feature_idx': (4,),\n", + " 'cv_scores': array([0.98557907, 0.98842159, 0.98646293]),\n", + " 'avg_score': 0.9868212005393535,\n", + " 'feature_names': ('4',)},\n", + " 2: {'feature_idx': (0, 4),\n", + " 'cv_scores': array([0.99707211, 0.99737709, 0.99742582]),\n", + " 'avg_score': 0.9972916731489968,\n", + " 'feature_names': ('0', '4')},\n", + " 3: {'feature_idx': (0, 1, 4),\n", + " 'cv_scores': array([0.99884154, 0.99898918, 0.9989321 ]),\n", + " 'avg_score': 0.9989209394666663,\n", + " 'feature_names': ('0', '1', '4')}}" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sfs.subsets_ # CV score should converge to 1 # Test directly GP with 1 feature" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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F3PmzMGiRYtw9OhRvPrqq5g9ezY2bdoEAHjrrbfwySef4IMPPsDx48fx7rvvBhTARC2KREQkSdKYMWOk4cOHS5IkSb/73e+kcePGSZIkSR999JF0+a+KuXPnSn369Al47Jtvvil16NAh4FwdOnSQBEHwH+vevbv0+9//3v+51+uV9Hq99Pe//12SJEnKzs6WAEiLFy/2j/F4PFK7du2kJUuWSJIkSQsWLJDuuuuugOfOzc2VAEjHjx+XJEmSbrvtNqlfv35XfL3x8fHSokWLAo4NHDhQmjBhgv/zPn36SHPnzq3xPGPGjJEUCoWk1+v9Hw8//LAkSZL0P//zP9Krr74aMH7z5s1SXFxctef78MMPpejoaP/nGzZskCIiIqqMAyB99NFHAcciIiKkDRs2SJJU+f1cvnx5wJikpCTpvffeCzi2YMECaciQIZIkSdLkyZOlO+64QxJFscbXTdQSKBu0QiOiRmnJkiW444476rR6UqFXr16QyysXq2NjY3HDDTf4P1coFIiOjobJZAp43JAhQ/z/rlQqMWDAABw9ehQAcOjQIfz73/+GwWCo8nynT59Gt27dAAD9+/evcW4WiwUXLlzAzTffHHD85ptvxqFDh2r5CivdfvvtWLNmjf9zvV7vn+93330XsHIkCAKcTiccDgfCwsLw1VdfITMzE8eOHYPFYoHX6w34+tUaMGCA/9/tdjtOnz6Np556Cs8884z/uNfrRUREBADfpdI777wT3bt3x91334377rsPd91111XPg6gpYpFERFXceuutSE1NRUZGBp588smAr8nlckiSFHAs2IZglUoV8LlMJgt6TBTFWs/LZrPh/vvvx5IlS6p8LS4uzv/vFUXK9aLX69GlS5cqx202G1555RU89NBDVb6m1WqRk5OD++67D88//zwWLVqEqKgo7N69G0899RTcbneNRZJMJqvVf4fLvxcVe53Wr1+PwYMHB4yr2EN10003ITs7G59//jm++uorPPLII0hJScE///nPGr4DRM0TiyQiCmrx4sXo27cvunfvHnC8devWKCgogCRJ/miA+sw2+uGHH3DrrbcC8K1w7N+/H5MmTQLgewPfunUrOnbsCKWy7r++wsPDER8fj++++w633Xab//h3332HQYMGXd0LuMxNN92E48ePBy2gAGD//v0QRRFLly71r7p98MEHAWPUajUEQajy2NatWyM/P9//+cmTJ+FwOGqcT2xsLOLj43HmzBk8/vjj1Y4LDw/HqFGjMGrUKDz88MO4++67UVpaiqioqBrPT9TcsEgioqB69+6Nxx9/HG+99VbA8T/84Q8oKirCa6+9hocffhg7duzA559/jvDw8Hp53tWrV6Nr167o0aMH3nzzTZSVlWHcuHEAgIkTJ2L9+vV47LHHMH36dERFReHUqVP4xz/+gb/85S/+1ZDaSE9Px9y5c5GUlIS+fftiw4YNOHjwoL8DrD7MmTMH9913H9q3b4+HH34Ycrkchw4dwuHDh7Fw4UJ06dIFHo8HK1euxP333x90o3nHjh1hs9mQlZWFPn36ICwsDGFhYbjjjjuwatUqDBkyBIIgYMaMGVVW6oJ55ZVXMGXKFERERODuu++Gy+XCf//7X5SVlSEtLQ3Lli1DXFwc+vXrB7lcjg8//BBt27ZlVhO1SOxuI6JqzZ8/v8rlsB49euDtt9/G6tWr0adPH+zbt++q9i791uLFi7F48WL06dMHu3fvxieffIKYmBgA8K/+CIKAu+66C71798bUqVMRGRkZsP+pNqZMmYK0tDRMmzYNvXv3xo4dO/DJJ5+ga9eu9fZaUlNT8emnn+KLL77AwIED8bvf/Q5vvvkmOnToAADo06cPli1bhiVLluCGG27Au+++W6XdfujQoRg/fjxGjRqF1q1b47XXXgMALF26FImJifj973+PP/7xj3jppZdqtYfp6aefxl/+8hds2LABvXv3xm233YaNGzf6c52MRiNee+01DBgwAAMHDkROTg7+7//+L+TvL1FzIJN+e1GbiIiIiLiSRERERBQMiyQiIiKiIFgkEREREQXBIomIiIgoCBZJREREREGwSCIiIiIKgkUSERERURAskoiIiIiCYJFEREREFASLJCIiIqIgWCQRERERBfH/ASWpCID4qLKAAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mlxtend.plotting import plot_sequential_feature_selection as plot_sfs\n", + "\n", + "fig = plot_sfs(sfs.get_metric_dict(), kind='std_err')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: {'feature_idx': (4,),\n", + " 'cv_scores': array([0.98557907, 0.98842159, 0.98646293]),\n", + " 'avg_score': 0.9868212005393535,\n", + " 'feature_names': ('4',),\n", + " 'ci_bound': 0.0026729055301516714,\n", + " 'std_dev': 0.0011877841412142533,\n", + " 'std_err': 0.0008398902208384383},\n", + " 2: {'feature_idx': (0, 4),\n", + " 'cv_scores': array([0.99707211, 0.99737709, 0.99742582]),\n", + " 'avg_score': 0.9972916731489968,\n", + " 'feature_names': ('0', '4'),\n", + " 'ci_bound': 0.000352235687586893,\n", + " 'std_dev': 0.0001565262815935246,\n", + " 'std_err': 0.00011068079514869633},\n", + " 3: {'feature_idx': (0, 1, 4),\n", + " 'cv_scores': array([0.99884154, 0.99898918, 0.9989321 ]),\n", + " 'avg_score': 0.9989209394666663,\n", + " 'feature_names': ('0', '1', '4'),\n", + " 'ci_bound': 0.00013679366761352237,\n", + " 'std_dev': 6.0788287194218874e-05,\n", + " 'std_err': 4.298381009174754e-05}}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sfs.get_metric_dict()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}