ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。ニューラル ネットワークで 8 つの異なるペナルティ モードをスクリーニングし、結果を現在のテーブルに出力することを自動化するスクリプトを実行しようとしています。 スクリプト内のさまざまな適合から異なる結果が得られない理由をトラブルシューティングしています。 これにより、モデルがニューラル メニューから設定された場合とスクリプトから設定された場合の、個々のペナルティ モードの結果を確認するようになりました。 スクリプトは、分析スクリプトをデータ テーブルに保存して実行することによって作成されました。 したがって、結果は同じになるはずです。
Set up of model from Analyze>Predictive Modeling>NeuralSet up of model from Analyze>Predictive Modeling>NeuralAnalyze>Predictive Modeling>Neural からモデルを設定します。
Initial run of modelInitial run of modelモデルの最初の実行
Redo Analysis #1Redo Analysis #1分析をやり直す #1
Redo Analysis #2Redo Analysis #2分析をやり直す #2
モデルを再起動してすべて同じ設定を選択すると、上記の初期結果と同じ結果が得られます。 スクリプトから実行すると、やり直し分析と同じ結果が得られます。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。検証列を用意してランダム シードを設定しても、問題は解決されません。Random KFold(5) 検証列 (ValidationCol) を作成し、以下のコードで使用しました。 Holdback 検証列を使用してチェックしたところ、動作は同じでした。
まず、Fit() を上から下にコメントアウトすると、2 番目 (Absolute)、3 番目 (WeightDecay)、および 4 番目 (NoPenalty) のペナルティ モードが最初の (Squared) と同じ結果を与えることがわかります。 次に、適合間のランダム シードを 999 にリセットすると、結果はすべてのロバスト モデルで同じになり、すべての非ロバスト モデルでも同じになります。 Set Random Seed 関数は、実行時にモデル パラメーターに対して何らかの処理 (リセット?) を行っている必要があります。
私の懸念は、再現性を得る唯一の方法はシードを使用することですが、そうすることでペナルティ モードが「修正」されるように見えることです。
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
Validation( :ValidationCol ),
Informative Missing( 0 ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "NoPenalty" ) )
);
Robust SquaredRobust Squaredロバストスクエアド
Robust AbsoluteRobust Absolute堅牢なアブソリュート
Robust Weight DecayRobust Weight Decay確実な体重減少
Robust No PenaltyRobust No Penalty堅牢でペナルティなし
All Robust, reset seed for each fitAll Robust, reset seed for each fitすべて堅牢、フィットごとにシードをリセット
All, non-robust, reset seed for each fitAll, non-robust, reset seed for each fitすべて、非ロバスト、フィットごとにシードをリセット
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。あなたがやっていることとあなたのスクリプトを私が完全に誤解している可能性は十分にあります。ただし、私の側では、異なる再現可能な結果を得ることができます。
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
//Validation Method( "KFold", 5 ),
Validation( :Validation ),
Informative Missing( 0 ),
//Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) )
);
まず、検証列を作成する必要があります。 分析/予測モデリング/検証カラムの作成 (jmp pro v13,14) :Target で階層化する
このスクリプトをそのまま実行すると、実行間の誤差はかなり近いにもかかわらず、スクリプトの適合間と実行間の誤差について異なる推定値が得られます。
ランダム シード行のコメントを解除します。フィット間とスクリプトの実行間で異なる推定値が得られますが、結果は同じです。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。実際には、同じ問題に 2 つの異なる側面があります。 1 つは、スクリプト内のフィット間のシードをリセットしても、異なるペナルティ メソッドを使用しても、異なる結果が得られないことです。 このため、シードをリセットしなかった場合に見られる違いが本物であるかどうかは信頼できません。同じペナルティ方法が使用されているだけで、異なる場所から開始されている可能性があります。 これは、アップロードしたファイルで説明したものです。
2 番目の (元の) 問題は、同じモデルを実行しているが、異なるペナルティ メソッドを持つ 2 つの異なるインスタンスが同じ結果を与えるため、どのメソッドが実際にどこで使用されているかがわからないことです。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。私が言いたいことを説明するために、スクリプトを含む小さなモデルをアップロードしました。 スクリプトを実行すると、最初の NN フィットが一意であることがわかります。他のすべての結果は同じです。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。私の問題は、JMP の 2 つのインスタンスを実行しようとしたときに始まり、それぞれが 4 つの NN を実行するスクリプトを実行していました。 インスタンス 1 は、Squared、Robust Squared、Absolute、および Robust Absolute ペナルティを使用してシードされたモデルを実行していました。 インスタンス 2 は、4 つのモデルが Weight Decay、Robust Weight Decay、No Penaly、Robust No Penalty NN を実行していたことを除いて、まったく同じスクリプト (別の名前のファイルで) を実行していました。実行が完了するまでに約 20 時間かかり、スクリプトは数式を保存しました。最後にデータテーブルに追加します。 私が発見したのは、両方のインスタンスがまったく同じ結果を返したことです。 各例で 4 つの異なる結果がありましたが、それらはまったく同じでした。 何が起こっているのかを調べるために、さまざまな組み合わせを試しました。 2 つのスクリプト間ですべての変数を一意にしました。 テキスト ボックスを使用して、各インスタンスのデータ テーブルを変数に設定しました。 何をしても、2 つのインスタンス間で異なる結果を生成することはできませんでした。
メニューから各モデルを実行すると、8 つの異なる結果が得られます。 スクリプトで実行する場合は実行しません。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。私の問題は、固定シードと異なるペナルティメソッドを使用してスクリプトを実行すると、異なる結果が得られないことです。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。スクリプトには次の行があります。
Validation Method( "Holdback", 0.3333 )
そしてそれはあなたの問題です。 これを実行するたびに、異なるランダムなホルバック セットが得られます。
JMP Pro を使用しているので、検証列を設定してそれを使用します。
1. 階層化されたサブセットを作成する場合と同様に、ホールドバックに含まれる行を制御します。
2. モデルの各バージョンのホールドバックに同じ行を使用します。
Re: ニューラル ネットワークをメニューから実行する場合とスクリプトから実行する場合では、同じ結果が得られません。また、次のスクリプトはすべて同じ結果をもたらします。スクリプトから実行されるニューラル ネットワーク モデルがペナルティ メソッドの 1 つだけを使用しているかのようです。
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Squared"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Absolute"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Weight Decay"),
Number of Tours( 3 )
)
)
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("NoPenalty"),
Number of Tours( 3 )
)
)