# パラメータの取りうる範囲 x_grid = np.atleast_2d(np.linspace(0, 10, 1001)[:1000]).T # 初期値として x=1, 9 の 2 点の探索をしておく. X = np.atleast_2d([1., 9.]).T y = blackbox_func(X).ravel() # Gaussian Processs Upper Confidence Bound (GP-UCB)アルゴリズム # --> 収束するまで繰り返す(収束条件などチューニングポイント) n_iteration = 20 for i in range(n_iteration): # 既に分かっている値でガウス過程フィッティング # --> カーネル関数やパラメータはデフォルトにしています(チューニングポイント) range_g = 2**np.arange(-20, 11, dtype=float) optgamma = optimize_gamma(X, range_g) model = SVR(gamma=optgamma) model.fit(X, y) # 事後分布が求まる posterior_mean = model.predict(x_grid) # posterior_sig = dist_knn(X, x_grid,i+1) posterior_sig = dist_ocsvm(X, x_grid, optgamma) # 目的関数を最大化する x を次のパラメータとして選択する # --> βを大きくすると探索重視(初期は大きくし探索重視しイテレーションに同期して減衰させ活用を重視させるなど、チューニングポイント) idx = acq_ucb(posterior_mean, posterior_sig, beta=100.0) x_next = x_grid[idx] plot(x_grid, y,
cv = ShuffleSplit(n_splits=5, test_size=0.2) cv = KFold(n_splits=5, shuffle=True) gscv = GridSearchCV(mod, param_grid, cv=cv) gscv.fit(X_train, y_train) print_gscv_score_rgr(gscv, X_train, X_test, y_train, y_test, cv) #%% # Novelty detection by One Class SVM with optimized hyperparameter clf = OneClassSVM(nu=0.003, kernel=gscv.best_params_['kernel'], gamma=gscv.best_params_['gamma']) clf.fit(X_train) reliability1 = clf.predict(X_test) # outliers = -1 # Novelty detection by One Class SVM with optimized hyperparameter optgamma = optimize_gamma(X_train, range_g) clf = OneClassSVM(nu=0.003, kernel=gscv.best_params_['kernel'], gamma=optgamma) clf.fit(X_train) reliability2 = clf.predict(X_test) # outliers = -1 y_pred = gscv.predict(X_test) # prediction results = np.c_[y_pred, y_test, reliability1, reliability2] columns = ['predicted y', 'observed y', 'reliability1', 'reliability2'] df = pd.DataFrame(results, columns=columns) print(df) #%% for i in range(1): dcv(X, y, mod, param_grid) print('{:.2f} seconds '.format(time() - start))