この記事では、Python に関する関連知識を提供します。主に、パラメーターを解析する 3 つの方法に関連する問題をまとめています。最初のオプションは、コマンド ラインに特に使用される、人気のある Python モジュールである argparse を使用することです。解析; もう 1 つの方法は、すべてのハイパーパラメータを配置できる JSON ファイルを読み取ることです。3 番目のあまり知られていない方法は、YAML ファイルを使用することです。一緒に見てみましょう。役立つことを願っています。全員が役に立ちます。
[関連する推奨事項: Python3 ビデオ チュートリアル ]
今日共有する内容の主な目的は、コマンド ラインとコード効率を向上させるための設定ファイル
それでは、いきましょう!
機械学習のパラメータ調整プロセスを練習に使用します。3 つの方法から選択できます。最初のオプションは、コマンド ライン解析専用の人気のある Python モジュールである argparse を使用することです。もう 1 つは、すべてのハイパーパラメータを配置できる JSON ファイルを読み取ることです。3 番目のオプションもあまり知られていません。解決策は、YAML ファイルを使用することです。興味があるなら、始めましょう!
以下のコードでは、非常に効率的な統合 Python 開発環境である Visual Studio Code を使用します。このツールの利点は、拡張機能をインストールすることであらゆるプログラミング言語をサポートし、ターミナルを統合し、Kaggle の Shared Bicycle Dataset## を使用して、多数の Python スクリプトと Jupyter ノートブック
データセットを操作できることです
#argparse の使用 上の図に示すように、小さなプロジェクトを整理するための標準構造があります。
import pandas as pd import numpy as np from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, mean_absolute_error from options import train_options df = pd.read_csv('data\hour.csv') print(df.head()) opt = train_options() X=df.drop(['instant','dteday','atemp','casual','registered','cnt'],axis=1).values y =df['cnt'].values X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) if opt.normalize == True: scaler = StandardScaler() X = scaler.fit_transform(X) rf = RandomForestRegressor(n_estimators=opt.n_estimators,max_features=opt.max_features,max_depth=opt.max_depth) model = rf.fit(X_train,y_train) y_pred = model.predict(X_test) rmse = np.sqrt(mean_squared_error(y_pred, y_test)) mae = mean_absolute_error(y_pred, y_test) print("rmse: ",rmse) print("mae: ",mae)コードでは、ファイル内の options.py train_options 関数に含まれるファイルもインポートします。後者のファイルは、train.py で考慮されるハイパーパラメータを変更できる Python ファイルです。
import argparse def train_options(): parser = argparse.ArgumentParser() parser.add_argument("--normalize", default=True, type=bool, help='maximum depth') parser.add_argument("--n_estimators", default=100, type=int, help='number of estimators') parser.add_argument("--max_features", default=6, type=int, help='maximum of features',) parser.add_argument("--max_depth", default=5, type=int,help='maximum depth') opt = parser.parse_args() return optこの例では、コマンド ライン引数を解析するときに非常に人気のある argparse ライブラリを使用します。まず、パーサーを初期化してから、アクセスするパラメーターを追加します。 これはコードの実行例です:
python train.py
ハイパーパラメータのデフォルト値を変更するには、2 つの方法があります。最初のオプションは、options.py ファイルに異なるデフォルト値を設定することです。別のオプションは、コマンド ラインからハイパーパラメータ値を渡すことです。
python train.py --n_estimators 200変更するハイパーパラメータの名前と対応する値を指定する必要があります。
python train.py --n_estimators 200 --max_depth 7JSON ファイルの使用
以前と同様に、同様のファイル構造を維持できます。この場合、options.py ファイルを JSON ファイルに置き換えます。つまり、JSON ファイルでハイパーパラメータの値を指定し、train.py ファイルに渡したいと考えます。 JSON ファイルは、キーと値のペアを利用してデータを保存するため、argparse ライブラリに代わる高速かつ直感的な代替手段となります。次に、後で他のコードに渡す必要があるデータを含む options.json ファイルを作成します。
{ "normalize":true, "n_estimators":100, "max_features":6, "max_depth":5 }上でわかるように、これは Python 辞書に非常に似ています。ただし、辞書とは異なり、テキスト/文字列形式のデータが含まれています。さらに、構文が若干異なる一般的なデータ型がいくつかあります。たとえば、ブール値は false/true ですが、Python は False/True を認識します。 JSON で使用できるその他の値は配列であり、角かっこを使用して Python リストとして表されます。 Python で JSON データを操作する利点は、load メソッドを使用して Python 辞書に変換できることです:
f = open("options.json", "rb") parameters = json.load(f)特定の項目にアクセスするには、その項目内で引用符で囲むだけで済みます。角括弧 キー名:
if parameters["normalize"] == True: scaler = StandardScaler() X = scaler.fit_transform(X) rf=RandomForestRegressor(n_estimators=parameters["n_estimators"],max_features=parameters["max_features"],max_depth=parameters["max_depth"],random_state=42) model = rf.fit(X_train,y_train) y_pred = model.predict(X_test)YAML ファイルの使用
最後のオプションは、YAML の可能性を活用することです。 JSON ファイルと同様に、YAML ファイルを Python コードで辞書として読み取り、ハイパーパラメータの値にアクセスします。 YAML は人間が判読できるデータ表現言語であり、JSON ファイルのような括弧ではなくダブルスペース文字を使用して階層が表現されます。以下に、options.yaml ファイルの内容を示します。
normalize: True n_estimators: 100 max_features: 6 max_depth: 5train.py で、options.yaml ファイルを開きます。このファイルは常に、load メソッドを使用して Python 辞書に変換されます。今回は、 yaml ライブラリ インポート先:
import yaml f = open('options.yaml','rb') parameters = yaml.load(f, Loader=yaml.FullLoader)前と同様に、辞書に必要な構文を使用してハイパーパラメータの値にアクセスできます。
設定ファイルは非常に速くコンパイルされますが、argparse では追加する引数ごとに 1 行のコードを記述する必要があります。
したがって、さまざまな状況に応じて最適な方法を選択する必要があります。
たとえば、パラメータにコメントを追加する必要がある場合、JSON はコメントを許可しないため適していません。YAML は適していません。 argparse が適しているかもしれません。
【関連する推奨事項: Python3 ビデオ チュートリアル ]
以上がPythonでパラメータを解析する3つの方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。