機械学習アプリケーションの普及に伴い、ますます多くのデータ サイエンティストや機械学習開発者がモデルのパフォーマンスの最適化に注目し始めていますが、その最適化にはハイパーパラメーターの調整が不可欠です。機械学習では、ハイパーパラメータはトレーニング データから学習した重みではなく、モデルのパラメータを表します。ハイパーパラメータ設定が不適切だと、トレーニングやテスト中にモデルのパフォーマンスが低下する可能性があるため、ハイパーパラメータの調整は重要な手順です。
Python は、Scikit-learn、TensorFlow など、多くの人気のある機械学習ライブラリを提供します。これらのライブラリは、ハイパーパラメータの調整に役立つ多くのツールを提供します。この記事では、Python での機械学習のハイパーパラメーター調整のヒントについて説明します。
グリッド検索は、シンプルで効果的なハイパーパラメータ調整方法です。その中心となるアイデアは、さまざまなハイパーパラメータの組み合わせを試し、各組み合わせに対して相互検証を実行して、最もパフォーマンスの高いハイパーパラメータの組み合わせを見つけることです。 Scikit-learn では、GridSearchCV クラスを使用してグリッド検索を実装できます。
以下はグリッド検索の一般的なプロセスです。
1) 調整する必要があるパラメーターとパラメーターの組み合わせを定義します。
2) GridSearchCV クラスを使用してクロス検索を実行します。 -検証とグリッド検索
3) 最適なハイパーパラメータの組み合わせを出力します
たとえば、分類に Scikit-learn のサポート ベクター マシン (SVM) を使用する場合、次のコードを使用して実行できます。グリッド検索 :
from sklearn.model_selection import GridSearchCV from sklearn import svm, datasets iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target parameters = {'kernel':('linear', 'rbf'), 'C':[0.1, 1, 10]} svc = svm.SVC() clf = GridSearchCV(svc, parameters) clf.fit(X, y) print("Best parameters:", clf.best_params_)
グリッド検索は簡単で確実ですが、ハイパーパラメータの網羅空間が大きい場合、計算量が非常に膨大になります。ランダム検索方法は、パラメーター空間内の一連のパラメーターをランダムにサンプリングし、そのパフォーマンスを評価することで、この状況を軽減します。この方法では、特にパラメータの範囲が広く、互いに独立している場合に、より広いパラメータ空間を探索します。同じコンピューティング リソースの下では、ランダム検索の方がグリッド検索よりも効率的である可能性があります。
以下はランダム検索の一般的なプロセスです:
1) 調整する必要があるパラメーターとパラメーター範囲を定義します
2) RandomizedSearchCV クラスを使用してクロス検索を実行します。 -検証とランダム検索
3) 最適なハイパーパラメーターの組み合わせを出力します
#たとえば、ランダム フォレスト モデルでは、次のコードを使用してランダム検索を実行できます:
from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import RandomizedSearchCV import numpy as np # Load data iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target # Define parameter grid param_grid = {'n_estimators': np.arange(10, 200, 10), 'max_features': ['auto', 'sqrt', 'log2'], 'max_depth' : np.arange(1, 10), 'criterion' :['gini', 'entropy'] } # Random search using 10-fold cross validation rf = RandomForestClassifier() rf_random = RandomizedSearchCV(estimator=rf, param_distributions=param_grid, n_iter=100, cv=10, random_state=42) # Fit the model rf_random.fit(X, y) # Print the best parameters print("Best parameters:", rf_random.best_params_)
ベイジアン最適化は、効率的なハイパーパラメータ調整方法です。このメソッドは、各反復でパフォーマンスを向上させる可能性が最も高いハイパーパラメーターの組み合わせを選択することによってハイパーパラメーター空間を検索し、プロセス内で徐々に収束します。このアプローチでは、さまざまなパラメーターを試すときに初期の実行結果を推論に使用します。事前確率 D を使用してモデルのパラメーターの確率分布をモデル化するため、少量の探索しか実行できない状況を最適化できます。離散または連続パラメータ、さまざまなタイプの目的関数およびノイズを処理でき、プリセット検索ルールを自動的に調整できるため、多次元ハイパースペースの最適化に大きな利点があります。
以下はベイジアン最適化の一般的なプロセスです:
1) 調整する必要があるパラメーターとパラメーター範囲を定義します
2) 目的関数を定義し、ベイジアンを使用します最適化アルゴリズムを最適化する
3) 最適なハイパーパラメータの組み合わせを出力する
たとえば、分類に Scikit-learn の Gradient Boosting Machine (GBM) を使用する場合、次のコードを使用できます。 :
from sklearn.datasets import load_iris from sklearn.ensemble import GradientBoostingClassifier from sklearn.model_selection import cross_val_score from bayes_opt import BayesianOptimization # Load data iris = load_iris() X = iris.data[:, :2] y = iris.target # Define objective function def gbmler_learning_rate(learning_rate): gb = GradientBoostingClassifier(learning_rate=learning_rate) return cross_val_score(gb, X, y, cv=5).mean() # Define parameter space param_space = {'learning_rate': (0.01, 1.0)} # Initialize optimizer optimizer = BayesianOptimization( f=gbmler_learning_rate, pbounds=param_space, random_state=42 ) # Optimize optimizer.maximize( init_points=5, n_iter=25 ) # Print the best parameters print("Best parameters:", optimizer.max['params'])
通常、ハイパーパラメータ検索では、可能な限り、ハイパーパラメータ検索の前に分類子のアイデアを置きます。ハイパーパラメータ設定は、配置などのエンコードを実行します。各ハイパーパラメータは検索プロセス中に配列に設定され、その配列を入力として使用します。このアプローチで検索を実行する場合の主な問題は、ハイパーパラメーターが個別に表示され、そのインタラクティブな効果に関する情報が失われることです。むしろ、このアプローチは、シンプルで解釈可能な統計モデリングへの取り組みの一部です。ベイジアン最適化を使用するもう 1 つの利点は、確率モデル推論を使用するときに、カメラと制約されたハイパーパラメーターの間の関係を検索できることです。
要約すると、Python は、グリッド検索、ランダム検索、ベイジアン最適化、解釈可能なパラメーター検索など、機械学習のハイパーパラメーター調整のための多くの手法を提供します。データセットに適した方法を選択すると、ハイパーパラメータ調整でより良い結果を達成するのに役立ちます。
以上がPython での機械学習ハイパーパラメータ調整のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。