複数のニューラルネットワークモデルの構築私はニューラルプラットフォームを使用して予測を行っていますが、ニューラルネットワーキングに慣れていないため、すべての入力パラメーター(非表示レイヤーの数、ノード/非表示レイヤーの数、ブースティングモデル、学習率、ツアー)に少ししか精通していません。 私がやりたいのは、RMSEと検証モデルの誤分類率を最小限に抑えることです。 私がやっていることは、各パラメーターを1つずつ繰り返し変更し、モデルのパフォーマンスパラメーターを保存して、新しいJMPテーブルに貼り付けることですが、レイヤー、ノード、ツアーの組み合わせが非常に多いため、これには数日かかります。など。JMPProが1,000のモデルを構築し、データをテーブルにダンプする場所にスクリプトを記述して、各モデルの入力パラメーターを手動で変更する必要がないようにすることは可能でしょうか。
#隠しレイヤー:1または2
#シグモイドノード:0、1、2、3、または4
#線形ノード:0、1、2、3、または4
#ラジアルノード:0、1、2、3、または4
#boostingモデル:わからない、多分1-5?
#学習率:0.1刻みで0〜0.5
#tours:1、5、10、20、100
つまり、2 x 5 x 5 x 5 x 5 x 5 x 5 = 〜30,000になります。
データセットに慣れたら、これらのいくつかをいじくりまわすことができると思います。 もちろん、ノードが多く、ブースティングモデルの数が多いことは意味がありません(他の特定の組み合わせも意味がありません)が、テストする価値のある数百のモデルについて話し合っています。 確かに、この種のモデルのスクリーニング/比較はスクリプト化できますよね?
分析スクリプティング再:複数のニューラルネットワークモデルの構築2次モデルに適合するように、より少ないレベルで実験を設計し、そのモデルを使用して設定を最適化することができます。 また、各モデルを作成してから、結果テーブルの1つを右クリックし、[結合テーブルに作成]を選択することで、すべての結果を一度に抽出できます。
再:複数のニューラルネットワークモデルの構築マーク、あなたの提案をありがとう。 私が試したが失敗した2番目のもの。 他のプラットフォームの「結合テーブルにする」オプションは知っていますが、何らかの理由でニューラルプラットフォームから除外された可能性があります。 不思議なことに、オプションキーを押しながら選択を行い、レポートのすべての部分に適用される「オプション」トリックは、ニューラルプラットフォームでも機能しないか、速度を上げる可能性があります。
RSMEを最小限に抑えることを目的として、ニューラルネットワークパラメーター(#ノード、#ツアーなど)をDOEのXとして持つことができれば、それはすばらしいことですが、入力する方法が原因で不可能なようです。ニューラルモデル起動の特定のボックスのパラメータ。 非常に高度なスクリプトを作成する必要がありますが、それでもDOEとNeuralが適切に通信できるかどうかはわかりません。 しかし、このスクリーンショットに反映されているモデルを基本的に実行するためにニューラルプラットフォームを取得する方法を知っている人がいれば(総計のサブセレクションであるため)、大いに感謝します。 つまり、最初のスクリーンショットテーブルの値は、2番目のスクリーンショットの適切な入力ボックスに移動する必要があります(つまり、ニューラルモデルの起動)。
再:複数のニューラルネットワークモデルの構築ところで、アクティブに選択している機能と同じ情報を表示するためにすべての関連機能を取得する「オプション」トリックは、実際にはMacの「コマンド」トリックです(したがって、以前は機能しませんでした)。
再:複数のニューラルネットワークモデルの構築こんにちは@abmayfield 、
これは私がしばらくの間スクリプトを書きたいと思っていたもので、本当に楽しかったです、そしてあなたの投稿はそれを動かすために火をつけました、ありがとう! NNプラットフォームは初期条件に非常に敏感であり、手動で行うのはかなり遅いため、しばらくの間、NNプラットフォームを調整する方法が必要でした。
そこで、ブーストされたツリー、ブートストラップフォレスト、XGBoostプラットフォームなど、他のモデルプラットフォーム用に作成したいくつかのスクリプトを適応させてチューニングプロセスを自動化しました。 スクリプトはデータテーブルに保存され、緑色のホットボタンで実行されるようになっています。
うまくいけば、スクリプトについてある程度知っていて、これらのスクリプトを特定の状況/データ構造/列名などに適合させる場所を知っているはずです。 私はいくつかのコメントを入力して、それぞれの大きなグループで何をしているのかを説明しようとしています。 2つのスクリプトを添付しています。1つは連続Y用で、もう1つは名義/順序Y用です。 Number Col Box()の値はこれに応じて変化するため、出力Yが名義か順序かを確認するためのテストを含める必要がありました。 サンプルデータのBigClassFamilies.jmpデータテーブルをテストデータセットとして使用しました。 また、数値NN調整または名義/順序NN調整のいずれかを使用して生成した2つの出力データテーブルも含まれています。 :age、:weight:、:heightを使用して:sexで名目上実行し、次に:ageを序数から連続に変更し、連続NNチューニング用に:weightと:sexで年齢をモデル化しました。適合と統計はひどいですが、それはJSLが機能するかどうかを確認することのみを目的としています。 また、すべてが正しく機能することを確認するために、:ageで階層化することにより、データテーブルに:Validation列を追加しました。
他の誰かがそれをよりエレガントにスクリプト化して、Y()入力列をモデリングタイプContinuous、Nominal、またはOrdinalにテストし、適切なNumber Col Box()値を挿入して、データを適切に抽出することができると確信しています。単一のJSLコード。
dt << Nerual()セクションへのY()およびX()入力と、モデリングしている変数にちなんで名付けられたレポートウィンドウの名前を取得する部分を編集する必要があります。
NNチューニングテーブルは、原則として空間充填DOEのように扱うことができ、JMPでは1または2しか許可されないため、N_Layersは1または2にしかできないなど、一部の設定を除いて、下限と上限の設定を設定します。レイヤー。 Penalty_Methodは、NNプラットフォームで有効なオプションのみであり、共変量変換とロバストフィットは、0または1(オフまたはオン)の値のみを取ります。 NNチューニングテーブルも含めています。
ご不明な点がございましたら、お気軽にお問い合わせください。
名目/順序モデリングタイプのコードは次のとおりです。
Names Default To Here( 1 );
dt = Data Table( "Big Class Families" );//enter the name of the current data table
dt_parms = Data Table( "NN Tuning" );//enter name of parameter data table for tuning the NN
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );//this copies the tuning table with all the different rows in it
//these commands create columns to record the fit results
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//This part just creates a separate modelling progress, delete if you don't want it.
i = 1;
imax = N Row( dt_parms );
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
Text Box( " Overall Modeling Progress ", <<SET font="" size=""></SET>
私が理解していない奇妙なことの1つは、NNプラットフォームで実行したときに作成したログウィンドウについてこの警告が表示されることですが、他のプラットフォームからは取得したことがありません。 その警告がどこから来たのか追跡できませんが、それでも正しく実行されます。 多分誰かが私のコードのその部分を修正することができますか?
予期しない「、」。 おそらく、「)」が欠落しています。
「<<」演算子のオペランドを解析しようとしています。
23行10列:))►、
最後の注意として:ブーストやツアー、伝達関数が大量にある場合、モデリングの実行に非常に長い時間がかかる可能性があるため、設定に注意してください。 船外に出ないように注意してください。
お役に立てれば!、
DS
再:複数のニューラルネットワークモデルの構築はい! これはまさに私が望んでいることです。NNプラットフォームと同期するすべてのNN入力パラメーター(たとえば、TanHノードの数、レイヤーの数など)を含むテーブルです。 まだ試していません。しばらく時間がかかると思いますが、20サンプルx 90の小さな予測子「練習」データセットを使用しているので、実行できる可能性があります。 実際には、アクティベーションのタイプとノードの数(およびツアーの数)が実際にRMSEを低下させ、ブーストはあまり役に立たないことがわかりました。 しかし、それでも、これは、実行する予定の約500のモデルすべてを実行するよりもはるかに高速です(4ノード/アクティベーションタイプ未満にとどまりたいので、ありがたいことに昨日実行する予定の数にはほど遠いです)。 明日試してみて、どうなるかみんなに知らせます。
再:複数のニューラルネットワークモデルの構築失敗しましたが、スクリプトの小さな間違いが原因だと思います。 私はあなたのNNチューニングテーブルを私のデータ(添付)で使用し、必要なすべての更新を行いました(3つのトレーニング+検証+テストサンプルを使用しました)。 最後のスクリプト(「ニューラルネットワーク比較」)を実行すると、新しいテーブルが作成されますが、分析は実行されません。 いくつかのX用語を含めましたが、実際には「標準化されたデータ」グループの86列すべてになります。 デバッガーを使用すると、問題が発生していると表示されます。
「」ために(i = 1 、i <= imax、i ++、 "領域。 私は、より有能なスクリプトライターがおそらく数秒で問題を見つけることができることを望んでいます/推測しています!
再:複数のニューラルネットワークモデルの構築こんにちは@abmayfield 、
データテーブルを共有していただきありがとうございます。スクリプトで行った変更をデバッグするのに役立ちました。
私が気づいたいくつかのこと:
- 記録する「テスト」データセット統計の列を追加する必要がありました。
- パラメータテーブルの行数であるimaxの定義を誤って削除しました
- また、誤ってNNプラットフォームへの呼び出しを変更しました。スクリプトでは、dt << Neural()と表示されています。ここで、データテーブル「dt」に対してニューラルネットモデリングを実行するコマンドが送信されます。 あなたはそれを何か他のものに変えました。
- ウィンドウ「w」の定義には、NNウィンドウのフルネームが必要です。単一のXのみを実行している場合、JMPはそれをウィンドウ名の一部として配置するため、両方に含める必要があります。 GetNameコマンドとその下のIFステートメント。 しかし、それは単一のXでモデリングする場合にのみ当てはまります。 複数を使用する場合は、ウィンドウ名またはIFステートメントに「by ......」を含める必要はありません。
- 最後の部分は、トレーニング、検証、およびテストデータの統計がNumber Col Box()コマンドで正しく呼び出されていることを確認することです。
以下のコードは、データテーブルで機能します(変更されたスクリプトも添付されています)。 これは、前に示したNNチューニングテーブルで機能します。
86列すべてを実際に使用する場合は、スクリプトのX(col1、col2、...)部分に手動で配置する必要があります。 次に、GetName部分も編集する必要があります。これは、86の名前すべてが含まれるわけではなく、応答列を含むウィンドウ名になるためです。
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(
:OFA...22_c0_g2_i1.p1
),
Validation ( :Validation with test ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
お役に立てれば!、
DS
再:複数のニューラルネットワークモデルの構築あはは! 私のためにそれをやり直してくれてありがとう。 私は明らかにスクリプトの知識がないので、「Neural」をデータテーブルの名前に変更しただけです.....これは明らかに機能しません。 データテーブルの名前を「Neural」に変更し、テスト列を追加し、推奨するその他の変更を加えると、機能しました。
今私がするかもしれないことは、条件付き要因計画を作成し(あなたが指摘したように、複数の隠しレイヤーでブーストすることはできないので)、私の仕事用コンピューターで数百のモデルを実行することです(私の8に過度の負担をかけないように) -GB RAMラップトップ)。
あなたのスクリプトはGUIまたはアドインになる必要があるように感じます(テイカーはいますか?)。 私がベータテストを行っているJMPPro 16には、非常に優れた「モデルスクリーニング」ツールがありますが、潜在的に数千のモデル内ではなく、モデリングタイプ全体(PLSとGen-Regなど)でテストできると思います。各モデリングタイプ内に構築されています(そうでない場合、実行が停止することはありません)。 「シミュレーター」について聞いたことがありますが、間違っている可能性はありますが、それは別のことをしていると思います(大量のシミュレーションモデルを生成していません)。 繰り返しになりますが、ご協力いただきありがとうございます。 これは確かに私に何日もの時間を節約するでしょう!
再:複数のニューラルネットワークモデルの構築こんにちは@abmayfield 、
それがあなたの問題を解決したことをうれしく思います。
ツリーベースのモデリング(XGBoost、ブーストされたツリー、およびブートストラップフォレスト)を使用すると、JMP内のチューニングテーブルGUIを簡単に使用して、多くのモデルを実行できます。 ただし、1つの欠点は、RAMを大量に消費することです。 この方法で実行することの良い点は、何万もの異なるパラメーター設定を実行でき、RAMをあまり消費せず、CPU消費だけを消費することです。 ブートストラップフォレスト(遅い)で最大40kの異なる設定を実行しましたが、仕事用のラップトップ(32 GBRAMと2GHz CPU)では数日かかる場合があります。
私はJMP16のアーリーアダプターでもあり、モデルのスクリーニングは素晴らしいですが、ご指摘のとおり、どのモデルも調整されていないため、少し誤解を招く可能性があります。 デフォルト設定を使用するだけですが、予測モデルを作成するのに常に最適な設定であるとは限りません。 少なくとも、どのプラットフォームをさらに調整するのに時間の労力を費やす価値があり、どのプラットフォームを調べる価値がないかを判断するのに役立つ可能性があります。
SVMプラットフォームを検討して、名目データをモデル化することもできます。これは、この種のデータにも適した方法であると考えられているためです。
シミュレーターに関しては、それは何か違うものであり、異なる初期条件(ランダム化)で推定値をテストする方法として意図されています。 これにより、推定値の分布が得られ、元の推定値の信頼区間が得られます。次に、指定された推定値を持つそのモデルが適切かどうかを判断できます。
DOEに関しては、階乗を実行することも、係数を適切に設定して空間充填設計として実行することもできます。プラットフォームでは、条件付き制約も可能だと思います。 また、予測子のスクリーニングまたはブートストラップを実行して、予測子の89個すべてが実際に必要かどうか、または実際にはより小さなサブセットしか使用できないかどうかを確認することを検討してください。
最後の注意として、短くて幅の広いデータテーブルがあるため、検証列を使用する代わりに、検証に1つ残しておくアプローチを実行することを検討することをお勧めします。 その場合は、そのためのスクリプトを編集する必要があります。
幸運を!、
DS
再:複数のニューラルネットワークモデルの構築特に検証のタイプに関して、より優れた提案。 Neuralはホールドバック、Kfold、または行の除外をサポートしていることがわかります(これにより、除外する行をランダムに選択するだけだと思います)。 スクリプトを変更して検証のタイプを変更したい場合は、「Validation(:Validation with test)」行を変更するだけですか? そして、抑制されたサンプルは、検証サンプルとしてJMPの観点から同等でしょうか? そうでない場合は、検証列を削除する(または名前を変更する)必要があり、テスト列も削除する必要があります。
再:複数のニューラルネットワークモデルの構築こんにちは@abmayfield 、
Kfoldは、短いデータセットを検証するためのもう1つの優れた方法でもあります。 はい、行の状態として設定する行の除外。これは、「テスト」データセットを選択し、行の状態を「除外」に設定することで実行できます。 KfoldまたはHoldbackを使用する場合、JMPはデータのテストとしてではなく、データの検証にそれらを使用します。 うまくいけば、テストデータとして使用できる別のデータセットがあり、トレーニングおよび検証データと同じデータテーブルにはありません。
検証にKfoldを使用してから、スクリプトを実行する必要のない部分をコメントアウトします。 以下は、NNプラットフォームの5K倍の検証設定で編集されたバージョンです。うまくいくはずです、それは私のためになりました。
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(:OFA...22_c0_g2_i1.p1 ),
Validation ( \!"KFold\!", 5 ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
//ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
//Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
幸運を!、
DS
再:複数のニューラルネットワークモデルの構築スクリプトの助けを借りて、昼食前に300のニューラルネットワークモデルを実行したとは信じられません。 NNプラットフォームの価値をますます多くの人が見始めると、特にそれがまったく新しいデータセットであり、実際にはそうではない場合、彼らはこのようなものに引き寄せられると思いますが、これが取り上げられて「kudo」されることを願っていますわずかに調整できるNNモデル入力パラメーターの途方もない量に関してどこに「飛び込む」かを知ってください(たとえば、学習率を0.05から0.1に増やしただけでも、大きな違いが生じることがあります)。 次に、さまざまな検証アプローチ(検証列、ホールドバック、KFold)を試してみます。 私の(現在の)サンプルサイズが小さいことを考えると、間違いなく注意する必要があります(これらの予備データを使用して、より多くの「行」、つまりサンゴを追加するための資金を得たいと考えています)。
再:複数のニューラルネットワークモデルの構築それがあなたのために働いていると聞いてうれしいです。 モデリングで頑張ってください! 他のモデルプラットフォームもチェックしてから、テストデータセットのモデルを比較して、どれが最適な予測子であるかを確認することをお勧めします。
DS再:複数のニューラルネットワークモデルの構築(おそらく単純な)スクリプトに関する質問があります。 入力dtを別のdtに変更したいとします。 スクリプトをコピーして貼り付け、dtを「Neural」から別のものに置き換えるだけでよいのではないでしょうか。
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
元の「Neural」ファイルを削除して、まったく同じ情報と異なる名前の別のテーブルに置き換えると、スクリプトが機能しません。 2つのデータテーブルにまったく同じデータを含める必要があります。そのうちの1つは「Neural」という名前です。 多分私はその部分を逃した!
再:複数のニューラルネットワークモデルの構築こんにちは@abmayfield 、
戻ってスクリプトを確認すると、2行目は、分析中に使用されるデータテーブルを定義します。 JSLコードdt = Current Data Table()は、ローカル変数 "dt"を定義します。この変数は、名前でデータテーブルを呼び出す代わりに、スクリプトの残りの部分で使用されます。 同様に、dt_parmsは、NNチューニングテーブル「NNチューニング」に割り当てられるローカル変数です。 これらの2つのテーブルは、実際にはスクリプトにフィードする唯一のものです。 残りはすべて内部です。
JSLコードをコピーして新しいデータテーブルに貼り付けると、そのデータテーブルでローカルに実行されているため、自動的に機能するはずです。
Y()とX()、そしておそらくValidation()メソッドを定義する場合を除いて、dt << Nerual()の呼び出しを変更しないでください。 JSLコードdt << Nerual()は、データテーブル「dt」でNNモデリングを実行するようにJMPに指示するコマンドです。 したがって、コードの先頭にあるdtの定義。
また、w = Window()呼び出しを変更して、NNレポートウィンドウのタイトルとその下のRegex()を反映する必要があります。 最後に、検証列の一部として「テスト」データセットを実際に使用するかどうかに応じて、コメントアウトするか(行の先頭に//コマンドを使用)、コメントを削除します。テスト結果列とTest_stats定義を作成するとき、およびコードが結果を新しい出力データテーブルに書き込む場所で、コードの先頭に出力します。
それ以外は、あまり編集する必要はありません。
最後の質問に関しては、コードをどのように実装しているかによって異なります。 データテーブル内から実行している場合、つまりデータテーブルのスクリプト部分に保存されており、緑色のホットボタンを使用して実行している場合は、Y()とX()を変更するだけで済みます。 )は、新しいデータテーブルの列名と一致する予測子および応答として使用しているものです。 もちろん、「NNチューニング」テーブルを開いておく必要があります。 一方、これを別のスクリプトとして実行している場合は、dtの定義をdt = Current Data Table()からdt = Data Table( "")に変更して、ここにを挿入することをお勧めします。引用符の間の新しいデータテーブルの名前。
参照している「ニューラル」はデータテーブルではなく、指定されたデータテーブルでニューラルネットモデルを実行するためのJMPコマンドです。 「<<」コマンドは、左側のオブジェクトの<<の右側にあるアクションを実行することを意味します。 コードの先頭近くで、newcolumnコマンドを使用してそれを確認できます。 dt_results << New Column()と表示されている場合、コードはJMPにオブジェクトdt_resultsの新しい列を作成するように指示しています。これは、dt_parmsデータテーブルから生成されたサブセットデータです。
お役に立てれば!、
DS
再:複数のニューラルネットワークモデルの構築OK、素晴らしい。 これは私が持っていたいくつかの追加の質問に答えます。 今、私が苦労しているのは、スクリプトをコピーして貼り付け、新しいデータテーブルで実行すると、アウトラインボックスエラーが発生することだけです。これは、スクリプトのコメントでほのめかされています。 「アウトラインボックスへのアクセスまたは評価で文字引数1が必要です。」 どういう意味ですか?? 数を増やしたり減らしたりしましたが、毎回同じエラーメッセージが表示され、スクリプトが実行されません。 アウトラインボックスが何であるかさえ知りません。 木の構造が同じであるのは奇妙です。 ファイル名を変更しました。 ファイル名が長くなっています。 多分それは私がより大きなアウトラインボックスが必要であることを意味しますか?