Machine-learning-with-python-improving-performance-of-ml-model

提供:Dev Guides
移動先:案内検索

MLモデルのパフォーマンスの改善(続き)

アルゴリズムの調整によるパフォーマンスの改善

MLモデルは、特定の問題に合わせて動作を調整できるようにパラメーター化されていることがわかっています。 アルゴリズムの調整とは、これらのパラメーターの最適な組み合わせを見つけて、MLモデルのパフォーマンスを向上させることです。 このプロセスはハイパーパラメーター最適化と呼ばれることもあり、アルゴリズム自体のパラメーターはハイパーパラメーターと呼ばれ、MLアルゴリズムによって検出された係数はパラメーターと呼ばれます。

アルゴリズムの調整によるパフォーマンスの改善

ここでは、Python Scikit-learnが提供するアルゴリズムパラメーターチューニングのいくつかの方法について説明します。

グリッド検索パラメーターの調整

これはパラメーター調整アプローチです。 このメソッドの動作の重要な点は、グリッドで指定されたアルゴリズムパラメーターのすべての可能な組み合わせに対してモデルを系統的に構築および評価することです。 したがって、このアルゴリズムには検索性があると言えます。

次のPythonレシピでは、sklearnのGridSearchCVクラスを使用してグリッド検索を実行し、Pima Indians糖尿病データセットのRidge Regressionアルゴリズムのさまざまなアルファ値を評価します。

まず、次のように必要なパッケージをインポートします-

import numpy
from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV

さて、前の例のようにPima糖尿病データセットをロードする必要があります-

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

次に、次のようにさまざまなアルファ値を評価します。

alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0])
param_grid = dict(alpha = alphas)

今、私たちはモデルにグリッド検索を適用する必要があります-

model = Ridge()
grid = GridSearchCV(estimator = model, param_grid = param_grid)
grid.fit(X, Y)

次のスクリプト行で結果を印刷します-

print(grid.best_score_)
print(grid.best_estimator_.alpha)

出力

0.2796175593129722
1.0

上記の出力は、最適なスコアと、そのスコアを達成したグリッド内のパラメーターのセットを提供します。 この場合のアルファ値は1.0です。

ランダム検索パラメーターの調整

これはパラメーター調整アプローチです。 このメソッドの動作の重要な点は、一定の反復回数でランダム分布からアルゴリズムパラメーターをサンプリングすることです。

次のPythonレシピでは、sklearnのRandomizedSearchCVクラスを使用して、Pima Indians糖尿病データセットのRidge Regressionアルゴリズムの0〜1の異なるアルファ値を評価することにより、ランダム検索を実行します。

まず、次のように必要なパッケージをインポートします-

import numpy
from pandas import read_csv
from scipy.stats import uniform
from sklearn.linear_model import Ridge
from sklearn.model_selection import RandomizedSearchCV

さて、前の例のようにPima糖尿病データセットをロードする必要があります-

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

次に、次のようにリッジ回帰アルゴリズムでさまざまなアルファ値を評価します-

param_grid = {'alpha': uniform()}
model = Ridge()
random_search = RandomizedSearchCV(
   estimator = model, param_distributions = param_grid, n_iter = 50, random_state=7)
random_search.fit(X, Y)

次のスクリプト行で結果を印刷します-

print(random_search.best_score_)
print(random_search.best_estimator_.alpha)

出力

0.27961712703051084
0.9779895119966027

上記の出力により、グリッド検索と同様の最適なスコアが得られます。