モデルバリデーション¶
本項では、モデルバリデーションについて、SAMPO/FABとsklearn-fabにおける実現方法およびスクリプトの差異を示します。 モデルバリデーションとして、定量的な評価、門木可視化、予測式可視化を示します。
定量的な評価¶
主な評価指標として、以下のように取得または算出します。
予測種別 |
評価指標 |
SAMPO/FAB |
sklearn-fab |
---|---|---|---|
回帰 |
RMSE |
ProcessResultLoaderクラス内の以下を取得
|
以下の関数により算出 |
回帰 |
MAE |
ProcessResultLoaderクラス内の以下を取得
|
以下の関数により算出 |
分類 |
accuracy |
ProcessResultLoaderクラス内の以下を取得
|
以下の関数により算出 |
分類 |
precision |
ProcessResultLoaderクラス内の以下を取得
|
以下の関数により算出 |
分類 |
recall |
ProcessResultLoaderクラス内の以下を取得
|
以下の関数により算出 |
ここでは、RMSEを出力する例を示します。
SAMPO/FAB |
sklearn-fab |
---|---|
predict_proc_name = 'predict'
with process_store.open_process(pstore_url, predict_proc_name) as prl:
prl = prl
prl.load_comp_output_evaluation('rg')['std_root_mean_squared_error'][0]
|
from sklearn.metrics import mean_squared_error
test_rmse = mean_squared_error(y_predict, predict_value, squared=False)
test_rmse
|
0.7621801464683062
|
0.6509250433352727
|
門木可視化¶
SAMPO/FAB
SAMPOVIS API save_gate_tree関数を使用します。
sklearn-fab
sklearn-fab API export_gate_tree_dot関数を使用します。
sklearn-fabでは、ユーザがOSSライブラリ等を用いてデータの標準化を事前に実施するため、逆標準化された値は出力されません。
SAMPO/FAB |
sklearn-fab |
---|---|
from IPython.display import display, Image
from sampovis.api.fabhme_vis import save_gate_tree
save_gate_tree(pstore_url, train_proc_name, 'output')
display(Image('output/{}_rg_fabhme_gate_tree.png'.format(train_proc_name)))
|
from IPython.display import display, Image
from sklearn_fab.utils import export_gate_tree_dot
dot = export_gate_tree_dot(estimator, X=X_train)
display(Image(dot.create_png()))
|
![]() |
![]() |
予測式可視化¶
SAMPO/FAB
SAMPO API process_storeとProcessResultLoaderクラスを利用して、予測式を参照し、可視化します。
sklearn-fab
学習済みのestimatorがもつcomps_アトリビュートを参照し、データ型を変換して可視化します。
SAMPO/FAB |
sklearn-fab |
---|---|
import matplotlib.pyplot as plt
%matplotlib inline
model_params = prl.load_model('rg')
prediction_formulas = model_params['prediction_formulas']
relevant_feature_indices = prediction_formulas.sum(axis=1) != 0
prediction_formulas = prediction_formulas[relevant_feature_indices]
prediction_formulas.plot(kind='barh', figsize=(8, 4), stacked=True)
plt.show()
|
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 可視化のために、DataFrame形式で予測式を表現
columns = np.append(estimator.feature_names_, ['bias', 'variance'])
prediction_formulas = [np.append(comp.weights, [comp.bias, comp.variance])
for comp in estimator.comps_]
pf_df = pd.DataFrame(prediction_formulas, columns=columns,
index=['component #' + str(i) for i in estimator.comp_ids_])
# 係数が0ではない説明変数のみを抽出し、表示
relevant_feature_indices = pf_df.sum(axis=0) != 0
pf_df = pf_df.T[relevant_feature_indices]
pf_df.plot(kind='barh', figsize=(8, 4), stacked=True)
plt.show()
|
![]() |
![]() |