estimated_y_in_cv = estimated_y_in_cv * y.std() + y.mean() # スケールをもとに戻す r2_in_cv = metrics.r2_score(y, estimated_y_in_cv) # r2 を計算 print(component, r2_in_cv) # 成分数と r2 を表示 r2_in_cv_all.append(r2_in_cv) # r2 を追加 components.append(component) # 成分数を追加 # 成分数ごとの CV 後の r2 をプロットし、CV 後のr2が最大のときを最適成分数に optimal_component_number = sample_functions.plot_and_selection_of_hyperparameter(components, r2_in_cv_all, 'number of components', 'cross-validated r2') print('\nCV で最適化された成分数 :', optimal_component_number) # PLS model = PLSRegression(n_components=optimal_component_number) # モデルの宣言 elif method_name == 'svr': # グラム行列の分散を最大化することによる γ の最適化 optimal_svr_gamma = sample_functions.gamma_optimization_with_variance(autoscaled_x, svr_gammas) # CV による ε の最適化 model_in_cv = GridSearchCV(svm.SVR(kernel='rbf', C=3, gamma=optimal_svr_gamma), {'epsilon': svr_epsilons}, cv=fold_number, iid=False) model_in_cv.fit(autoscaled_x, autoscaled_y) optimal_svr_epsilon = model_in_cv.best_params_['epsilon'] # CV による C の最適化 model_in_cv = GridSearchCV(svm.SVR(kernel='rbf', epsilon=optimal_svr_epsilon, gamma=optimal_svr_gamma), {'C': svr_cs}, cv=fold_number, iid=False) model_in_cv.fit(autoscaled_x, autoscaled_y) optimal_svr_c = model_in_cv.best_params_['C'] # CV による γ の最適化 model_in_cv = GridSearchCV(svm.SVR(kernel='rbf', epsilon=optimal_svr_epsilon, C=optimal_svr_c), {'gamma': svr_gammas}, cv=fold_number, iid=False) model_in_cv.fit(autoscaled_x, autoscaled_y) optimal_svr_gamma = model_in_cv.best_params_['gamma']
import pandas as pd import sample_functions from sklearn import svm import matplotlib.pyplot as plt ocsvm_nu = 0.003 # OCSVM における ν。トレーニングデータにおけるサンプル数に対する、サポートベクターの数の下限の割合 ocsvm_gammas = 2 ** np.arange(-20, 11, dtype=float) # γ の候補 x_train = pd.read_csv('tep_0.csv', index_col=0) x_test = pd.read_csv('tep_7.csv', index_col=0) # オートスケーリング autoscaled_x_train = (x_train - x_train.mean()) / x_train.std() autoscaled_x_test = (x_test - x_test.mean()) / x_test.std() # グラム行列の分散を最大化することによる γ の最適化 optimal_ocsvm_gamma = sample_functions.gamma_optimization_with_variance(autoscaled_x_train, ocsvm_gammas) # 最適化された γ print('最適化された gamma :', optimal_ocsvm_gamma) # OCSVM による異常検出モデル model = svm.OneClassSVM(kernel='rbf', gamma=optimal_ocsvm_gamma, nu=ocsvm_nu) model.fit(autoscaled_x_train) # モデル構築 # トレーニングデータのデータ密度 (f(x) の値) data_density_train = model.decision_function(autoscaled_x_train) number_of_support_vectors = len(model.support_) number_of_outliers_in_training_data = sum(data_density_train < 0) print('\nトレーニングデータにおけるサポートベクター数 :', number_of_support_vectors) print('トレーニングデータにおけるサポートベクターの割合 :', number_of_support_vectors / x_train.shape[0]) print('\nトレーニングデータにおける外れサンプル数 :', number_of_outliers_in_training_data) print('トレーニングデータにおける外れサンプルの割合 :', number_of_outliers_in_training_data / x_train.shape[0])