ブーストされたデシジョンツリートレーニングに最適なハイパーパラメータを調査しようとしています。2つのインスタンスのコードは次のとおりです。
user = '/home/.../BDT/'
nestimators = [1, 2]
rule all:
input: user + 'AUC_score.pdf'
rule testing:
output: user + 'AUC_score.csv'
shell: 'python bdt.py --nestimators {}'.format(nestimators[i] for i in range(2))
rule plotting:
input: user + 'AUC_score.csv'
output: user + 'AUC_score.pdf'
shell: 'python opti.py
計画は次のとおりです。BDTのトレーニングをさまざまなハイパーパラメータの束と並列化したい(最初はネスティメータから始めたい)。したがって、shellコマンドを使用してbdtをトレーニングしようとします。bdt.pyは、トレーニングの引数を取得し、ハイパーパラメータとトレーニングスコアをcsvファイルにトレーニングして保存します。csvファイルで、どのハイパーパラメータが最高のスコアを与えるかを確認できます。イェイ!
悲しいことに、それはそのようには機能しません。入力関数を使おうとしましたが、整数にしたいのでうまくいきません。上記の方法で試してみましたが、「エラーメッセージ」が表示されることがわかっています:「pythonbdt.py --nestimators <generator object at0x7f5981a9d150>」。これもうまくいかない理由は理解できますが、ここからどこに行けばいいのかわかりません。
ため、エラーが発生{}
ジェネレータオブジェクトによって置き換えられている、すなわち、それはされていない最初に置き換え1
によって、その後2
の反復子により、いわば、しかしnestimators
。
ルールのPython式を修正してもtesting
。私があなたの目的を正しく理解していれば、もっと根本的な問題があるかもしれません。snakemakeのワークフローは、入力ファイルから出力ファイルを作成する方法を定義するルールの観点から定義されています。したがって、関数テストは1回だけ呼び出されますが、ハイパーパラメーターごとに個別にルールを呼び出すことをお勧めします。
解決策は、出力のファイル名にハイパーパラメータを追加することです。このようなもの:
user = '/home/.../BDT/'
nestimators = [1, 2]
rule all:
input: user + 'AUC_score.pdf'
rule testing:
output: user + 'AUC_score_{hyper}.csv'
shell: 'python bdt.py --nestimators {wildcards.hyper}'
rule plotting:
input: expand(user + 'AUC_score_{hyper}.csv', hyper=nestimators)
output: user + 'AUC_score.pdf'
shell: 'python opti.py'
最後に、shell:
Pythonスクリプトを呼び出すために使用する代わりに。script:
ドキュメントで説明されているように直接使用できます:https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#external-scripts
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加