ニューラル ネットワークを自動化するこんにちは、みんな、
私は、ニューラル ネットワーク モデルを使用して、一意の座標で定義されたさまざまな場所 (約 1000 か所) の土壌水分を予測するプロジェクトに取り組んでいます。JMP のニューラル ネットワークの同じ構造は、すべてのサイトに適用できます。 そこで、作業の自動化を考えています。 ロケーション コーディネーター (X、Y) を見つけ、必要なデータ入力を抽出し、ニューラル ネットワークを実行できる JMP スクリプトを使用できます。 最後に、スクリプトはモデルのレポートを保存できます。 私と共有できる指針やアドバイスはありますか?
前もって感謝します。
提案や議論は大歓迎です。
Re: ニューラル ネットワークを自動化するやあ@マルコ1 、
出力列を持たずに特定の期間を予測したい理由を理解できません。 NN、ツリーベース、または kNN のいずれであっても、モデルに適切な予測子のセットがあることがわかっている場合、それは本当に重要ではないと思います。モデルが適切に予測を行うかどうかがすべてです。次のイベント。 Y 列をモデルにフィードする必要があります。そうしないと、モデルのトレーニングと検証のために試して予測する結果が得られません。 プラットフォームでは、予測式をデータ テーブルに保存したり、生成した他の予測と比較するためにそれらをデポに公開したりできるため、新しいデータでそれらをテストし、どのモデルがより優れているかを確認できます。これは、どのメトリックに依存します。分類と回帰のどちらを行っているかを調べています。
時間があれば、パレート境界を調べなければなりません。アドインをありがとう。
ワンストップの GUI で JMP 内のさまざまなモデリング プラットフォームをすべて実行できればすばらしいのですが、現時点でそれを実行するには少し時間がかかります。 おそらく将来のバージョンでは、追加のプラットフォームを追加できます。 現在、NN、ブースト ツリー、ブートストラップ フォレスト、および XGBoost を実行できます。 kNN、単純ベイズ、SVM もリストに追加する予定です。 特に複数の異なるプラットフォームを呼び出す場合は、バグなどに対処するのに時間がかかります。
ありがとう!、
DS
Re: ニューラル ネットワークを自動化するこんにちは。
良い説明、クエリ: JMP ニューラル ネットワークを使用した時系列の予測について、1、2、3、またはそれ以上の入力列を使用して、将来の次の 2、3、4、5、またはそれ以上の期間の予測をどのように達成できますか? ? ...つまり、出力列はありません。
多目的最適化 (パレート境界) に関しては、JMP コミュニティからダウンロードできる非常に優れた GUI を添付しました。作業中の GUI の更新に役立つかもしれません。
時系列 (ARIMA、Winter ...) など、JMP が持つ任意のプラットフォームのパラメータを GUI で最適化できれば、ユーザーが何らかの最適化で実行できる作業を実行する必要がなくなります。
ご協力いただきありがとうございます!
ご挨拶、
マルコ
Re: ニューラル ネットワークを自動化するやあ@giMSU 、
異なる検証スキームで異なる NN を本当に比較したい場合は、ランダム シードを 12345 などの数値に設定します。 そうすれば、常に同じポイントから開始されます。 そこからどこへ行くかは、モデルで使用されるパラメーターと検証セットによって異なりますが、少なくともすべて同じ場所から始まります。私の経験では、優れた検証スキームを持つことは非常に重要です。 トレーニングまたは検証用に特定の例を選択することで、ある結果を別の結果よりも優先する非常に不均衡なデータ セットを作成する可能性があります。これは、トレーニングでオーバーフィッティングして検証セットを適切に予測しないか、またはその逆になる可能性があります。 ネストされた k 分割検証スキームの一種である K 分割検証列を作成することを検討することもできます。その後、ネストされた各列の適合予測を確認し、統計を適合させることさえできます。 ちょっとした考え。
幸運を!、
DS
Re: ニューラル ネットワークを自動化するやあ@マルコ1 、
JMP のどのプラットフォームを使用してパレート境界 DOE 生成を行うかはわかりません。 現在更新中の GUI では、Space Filling DOE プラットフォームを呼び出します。これは、Space Filling DOE の低い入力値と高い入力値に基づいて、ハイパーパラメーター空間をポイントで最適に埋めます。 生成された結果のデータ テーブルには、すべての適合統計が保存されるため、各適合を評価し、後で戻ってプラットフォームで手動で実行することもできます。
私の知る限り、JMP は 2 つ以上のレイヤーをサポートしていません。 詳細は覚えていませんが、先週の Discover Summit Americas のセッションの 1 つで言及されました。 これは、パフォーマンス (特に予測パフォーマンス) を評価するときに、モデルを構築する際の追加の計算時間に対して、2 つ以上のレイヤーが追加されなかったためだと思います。 また、NN でブースティングする場合は、1 つのレイヤーのみが許可されることに注意してください。 多くの場合、ノードの数はレイヤーの数よりも意味があります。
私の知る限り、NN プラットフォームで時系列をモデル化できるはずです。 そこに制限はありません。 もちろん、唯一の課題は、NN モデルの解釈可能性です。 NN で X の -> Y の変換を解釈するのははるかに困難です。
基本的な NN チューニング テーブル (NN Tuning) と Space Filling DOE を添付して、ハイパーパラメーター スペースを探索します。 私の DOE には、4 つのペナルティ方法のうち 2 つしかないことに注意してください。 また、すべての変数 (ロバスト フィットを除く) が変化することを許可しましたが、ブースティングは単一層モデルでのみ許可されているため、コードは自動的に 2 層の選択を排除し、ブースティング オプションに戻ります。 最後に、13 列すべてが、GUI の実行時に選択するチューニング テーブルに存在する必要があります。 それらが存在しない場合、エラーがスローされます。
DOE プラットフォームは、既定で定数である因子をすべて削除します。 DOE を生成した後に列が欠落している場合は、因子テーブルからそれをコピーして戻す必要があります (そしてテーブルの最後まで値を入力します)。したがって、ロバスト フィットが 0 で一定に保たれる例です。 スペース フィリング DOE を生成するために、1234 のランダム シードを使用し、120 回実行しました。
お役に立てれば、
DS
Re: ニューラル ネットワークを自動化するこんにちは。
ユーザーが調整しなければならないすべてのハイパーパラメータで、GUI が複数オブジェクトの最適化 (パレート境界) を実行し、2 つ以上のレイヤー (深層学習) を作成できれば素晴らしいと思います。
質問: JMP ニューラル ネットワークで時系列の予測を行うことは可能ですか?
私が送信した例、つまり、調整テーブルは JMP のカスタム DOE によって作成されたものです。NN と DOE の使用方法を学んでいます。DOE はどの列を削除しますか? どの列をどのテーブルに配置する必要がありますか? つまりデータ表か調整表か?
例を送っていただけますか?
あなたの答えと助けをありがとう!!!
ご挨拶、
マルコ
Re: ニューラル ネットワークを自動化するやあ@マルコ1 、
ありがとう。 私は実際にJSLをさらに更新して、ユーザー用のチューニングテーブルを生成しようとしています。 手動で行う場合の問題は、はい、コードの内外をかなりよく知る必要があることです。 発生している問題は、各行にモデリング プラットフォームに供給されるパラメーターが含まれているため、列が定数であっても、チューニング データ テーブルに特定の列があることをコードが想定していることです。
私の推測では、チューニング テーブルを作成したときに、JMP によって定数項が自動的に削除されたようです。 結果のチューニング テーブルには正しい列が含まれていないため、エラーがスローされます。 私は最高のプログラマーではないので、考えられるすべてのシナリオを実行しようとすると時間がかかります。
それまでの間、私の次のバージョンが出る前に、JMP が削除した列をコピーして、テーブルの最後まで値を入力することをお勧めします。 これでうまくいくはずです。 さらに問題がある場合は、お知らせください。
お役に立てれば!、
DS
Re: ニューラル ネットワークを自動化するディードリッヒ・シュミットさん、こんにちは。
GUI Gen_AT_v3.0 をご利用いただきありがとうございます。どうやら使い方がわからないようです。エラーが発生します。
マニュアルや例はありますか?
時系列表とパラメータ表を添付。
ご協力ありがとうございました。
ご挨拶、
マルコ





Re: ニューラル ネットワークを自動化するこんにちは、DS さん。
助けてくれてありがとう。 正直、諦めて手動でやりました。
私は、人に聞いたり、JMP Scripting Index を使って自己学習したりして、何度もスクリプトを試しました。 たとえば、fit() または add で Get RSquare Validation オプションを使用しました。 rSquare = (report(obj)["検証"]["mvalue"][NumberColBox(1)]<表示 (rSquare);
どちらも機能しませんでした。
K分割検証データセットをランダムに選択することに関するあなたの提案について。 素晴らしいアイデアです。 ただし、NN 間のパフォーマンスを比較できるように、NN 構造の一貫性を維持したいと考えています。 私が読んだ論文のほとんどは、Artificial NN を使用しており、反復中に検証データセットを選択する方法について言及していません。
R2の改善を確認するために試してみます。 すぐに結果をお知らせします。
一番
Re: ニューラル ネットワークを自動化する確かに、それが役に立てば幸いです!Re: ニューラル ネットワークを自動化するどうもありがとう。
Re: ニューラル ネットワークを自動化するありがとう、.@G_M!Re: ニューラル ネットワークを自動化するよくやった、 @SDF1 .
Re: ニューラル ネットワークを自動化するやあ@giMSUと@G_M 、
このスレッドの前半で、R^2 や RASE などを保存するために、何千ものトレーニング セットを実行するときに常に使用するスクリプトのセクションを投稿しました。
として@G_M前述のとおり、レポートのツリー構造に移動して、値を保存する場所を見つけます。 スクリプトの一番下、FOR ループの終了直前で、レポートのツリー構造から値を取得します。
NN フィッティングを自動化する以前のスクリプトを変更し、以前の投稿から適合値 (R2 と RMSE) を抽出する部分を含めました。 他の値が必要な場合は、それらを追加することもできます。 このスクリプトは、各ロケーション ID に適合する NN の結果を含む新しいデータ テーブルを作成します。 また、場所 ID に基づいて各データ テーブルが生成される部分を変更し、データ テーブルが場所 ID に基づいて独自の一意の識別子を持つようにしましたが、最終的には各データ テーブルを閉じるだけです。原則として、FOR ループの最後にある close コマンドをコメント アウトすることで、それらをすべて開いたままにしておくことができますが、大量のデータ テーブルが開いていることになります。
コードを実装する前に、コメントを読み、スクリプトの動作を理解することを強くお勧めします。 スクリプトに慣れると、JMP ライフが永遠に変わります。
余談ですが、常に同じランダムシードが必要ですか? フィットのために空白のままにしておくことをお勧めします。これにより、フィットで実際にランダム性が得られ、より堅牢になります。 また、トレーニング、検証、(およびテスト) セットを含む検証列を作成できる十分なデータがデータに含まれているため、どのモデルが実際に予測に最適であるかを実際に見つけることができます。 :Y 列 ("SoilMoisture(kg.m-2) または (mm)") に基づいて、この検証列を階層化できます。 これも自動化して、:ID で集計した後に各データ テーブルを作成する部分に含めることができます。
データ テーブルで以下のスクリプトを実行すると、次の出力が得られます。

Names Default To Here( 1 ); //keeps variables local, not global
dt = Data Table( "Subset of 765-450" ); //defines your starting data table
Summarize( locs = BY( dt:ID ) ); //creates a list of the different location IDs
<BR />//This FOR loop creates all the different data tables based on location ID and also names them based on location ID
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File Location ID " || locs[j] ) )
);
<BR />//this portion of the code generates the list of data tables that will be used to train the models for each location.
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
<BR />//this portion of the code creates the fit result data table that will record the statistics for each fit, to be reviewed later. Also adds the label column property to the Loc_ID column.
dt_fit_results = New Table( "Fit Results", Add Rows( N Items( dt_list ) ), New Column( "Loc_ID", "Continuous" ) );
dt_fit_results << New Column( "R² Training" );
dt_fit_results << New Column( "R² Validation" );
dt_fit_results << New Column( "RMSE Training" );
dt_fit_results << New Column( "RMSE Validation" );<BR />dt_fit_results:Loc_ID << Label;
<BR />//this FOR loop makes sure that each row of the fit result table also includes the location ID
For( l = 1, l <= N Items( dt_list ), l++,
dt_fit_results:Loc_ID[l] = dt_list[l]:ID[l]
);
//this FOR loop is the fitting routine for each location data table.
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( ), //I took away the random seed, so your fits will be different from mine.
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 1 ) //I only did one tour just for proof of concept, so you'll want to change this
)
);
NNReport = NN << Report;<BR />//These next lines of code are what pull the actual values from the fit report and saves them to the fit results data table.
Train = NNreport["Training"][Number Col Box( 1 )] << Get;
Valid = NNreport["Validation"][Number Col Box( 1 )] << Get;
dt_fit_results:Name( "R² Training" )[i] = Train[1];
dt_fit_results:Name( "RMSE Training" )[i] = Train[2];
dt_fit_results:Name( "R² Validation" )[i] = Valid[1];
dt_fit_results:Name( "RMSE Validation" )[i] = valid[2];
Close( dt_list[i], no save );
);幸運を!、
DS
Re: ニューラル ネットワークを自動化するこんにちは DS
ご協力ありがとうございます。
私はまだ問題に小さな問題があります。 NN レポートの 1000 個の pdf ファイルを保存しました。 次に、各NNのR2を取得するために多くのpdfファイルを手動で読み取る必要があるため、問題になりました。
スクリプトを実行してそれらを自動的に抽出したいと考えています。 手伝って頂けますか?
心から
おやすみなさい
Re: ニューラル ネットワークを自動化するやあ@giMSU 、
あなたが持っている小さなデータ テーブルと、使用していたスクリプトを投稿していただきありがとうございます。 ちょっと改造して、使えるようになりました。 以下を試してみてください。 データ テーブルのサブセットを作成し、それらのみをフィッティングに使用していたことに気づきませんでした。
スクリプトの修正版を実行して得た出力は次のとおりです。

変更されたスクリプトは次のとおりです。
Names Default To Here( 1 );
dt = Data Table( "Subset of 765-450" );
Summarize( locs = BY( dt:ID ) );
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File" ) )
);
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result") // I actually didn't do this part.
);異なる場所 ID が多数ある場合は、それぞれの結果を一意の ID 文字コードで保存して区別することができます。 おそらく、「保存」行を次のように変更します。
NNReport << Save PDF("E:/Ready_for_ANN/result_LocID_"|| Char(dt_list[i]:ID[1]));お役に立てれば!、
DS
Re: ニューラル ネットワークを自動化するHi @giaMSU,
私は NN フィットを自動化するというアイデアが気に入っており、他のプラットフォームでも同様のことを行ってきました。最適な適合を見つけるために、NN プラットフォームでさまざまな適合パラメーターをテストするために、NN に対して同様のことを実行してみようと思います。
私は非常に似たことをしましたが、異なるモデリングプラットフォーム(ランダムフォレストとブーストツリー)を使用しました。以下に私のコードを含め、主な行の内容を説明します。
ただし、一般的には、新しい場所を選択するたびに新しい情報を NN フィットに供給するわけではありません。実際には、適合は FOR ループ内にある必要があります。私はデータ テーブル内にスクリプト コードとしてこれを入れています。これは、最適な適合を得るために非常に大規模なチューニング テーブルを実行する必要があるためです。この方法で実行すると、コンピューターのメモリが大幅に節約され、さらにあなたも節約できます。この方法では、データ テーブル内で 24,000 行以上の処理を行うことができ、一晩実行できます。
ちなみに、これの元のコンセプトとフィット用ループのアイデアは、gzmorgan0 さんの投稿から得たのですが、元の投稿を思い出せません。いつも使っています。
Names Default To Here( 1 );//keeps all variables local<BR />
dt = Data Table( "My data table" ); //this is where you specify your data table with the :Y and :X columns
dt_pars = Data Table( "tuning table" ); //for me, this is my tuning table that has modified tuning parameters. For you, it might be the "Model Subject File" data table.
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) ); //this just duplicate the above dt because I want to add columns for recording fit parameters.
<BR />//the below portion creates new columns for recording the fit parameters.<BR />dt_results << New Column("Overall In Bag RMSE");
dt_results << New Column("Overall Out of Bag RMSE");
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
<BR />//The FOR loop here is to actually run the fit with each of the different tuning parameters.
For( i = 1, i <= N Row( dt_pars ), i++,<BR /> //these next few lines pulls the NEW fit parameters to put into the model fit. This would be each new row of data (location) for your case
NumTrees = dt_pars:Number Trees[i];
NumTerms = dt_pars:Number Terms[i];
PortBoot = dt_pars:Portion Bootstrap[i];
MinSplpTr = dt_pars:Minimum Splits per Tree[i];
MaxSplpTr = dt_pars:Maximum Splits per Tree[i];
MinSplSz = dt_pars:Minimum Size Split[i];<BR /><BR /> //this next section is a string that will be evaluated below and represents what you would do via a normal GUI in JMP.
str = Eval Insert(
"report = (dt << Bootstrap Forest( //this is the fit method
Y( :Y_Response ), //whatever your response variable is
X(
:X_1, //these are all your x variables that you put in (which you want to be changing each time)
:X_2,
:X_3,
),
Minimum Size Split( ^MinSplSz^ ), //here is where something is changing and the new values are inserted via the ^ ^ and fed to the fit method. Here is where you'd want to do something similar, but above with the :X's
Validation Portion( 0.2 ), //this too can even be a variable and changed each time.
Set Random Seed( ),
Method( \!"Bootstrap Forest\!" ), //this again defines the method
Minimum Splits per Tree( ^MinSplpTr^ ),
Maximum Splits per Tree( ^MaxSplpTr^ ),
Portion Bootstrap( ^PortBoot^ ),
Number Terms( ^NumTerms^ ),
Number Trees( ^NumTrees^ ),
Early Stopping( 0 ),
Go,
invisible
)) << Report;"
); //this closes the Eval Insert() command<BR />
Eval( Parse( str ) ); //this actually runs the fit for each iteration<BR /><BR /> //The below lines, I pull out the relevant fit statistic I want to evaluate from the report and save it to the data table called dt_results. I can then analyze my multiple thousand data points later and not chew up too much RAM.
Overall=report["Overall Statistics"][Number Col Box( 1 )] << Get;
R2 = report["Overall Statistics"][Number Col Box( 2 )] << Get;
RMSE = report["Overall Statistics"][Number Col Box( 3 )] << Get;
report << Close Window;
dt_results:Name("Overall In Bag RMSE")[i]=Overall[1];
dt_results:Name("Overall Out of Bag RMSE")[i]=Overall[2];
dt_results:Name("R² Training")[i] = R2[1];
dt_results:Name("R² Validation")[i] = R2[2];
dt_results:Name("RMSE Training")[i] = RMSE[1];
dt_results:Name("RMSE Validation")[i] = RMSE[2];
);上記の概要を理解して、特定のニーズに合わせて変更できるはずだと思います。
余談ですが、過適合でないことを確認するための適合検証を行うだけでなく、適合データから分離した完全に未使用のテスト データ セットでその予測能力をテストすることも忘れないでください。また、余裕があれば、ツアーの数を 25 以上増やすことをお勧めします。 NN プラットフォームでは、DOE のように、特定のパラメーターのセットに最適な適合を見つけるために、さらに多くの試行が必要になる場合があります。
幸運を!最終的な解決策が見られることを願っています。私もそれに亀裂を入れるかもしれません。
このスレッドを開始していただきありがとうございます。
DS
Re: ニューラル ネットワークを自動化するこんにちは@giaMSU 、
これは非常に実行可能に思えますが、あなたの質問はかなり自由です。コミュニティの協力が必要な障害は何ですか?
私なら、ニューラル ネットのスクリプトから始めて、各場所のスクリプト内のどこを置換する必要があるかを確認します。場所固有の情報を抽出し、ニューラル ネット分析を実行し、レポート/スクリプトを保存する関数または式を定義します。毎回、その関数/式を実行する場所を反復処理します。
Re: ニューラル ネットワークを自動化する@giaMSU 、あなたが計画していることは可能です。ステップ1。 Summarize 関数を使用して、J = 1000 以上の各場所のリストを作成します。ステップ2。 リスト内の J 個の位置にインデックスを付けます。ステップ3。 Select Where 関数と Subset 関数を使用して、j 番目の場所のデータ セットを作成します。ステップ4。 j 番目の位置に対して j 番目のニューラル ネット モデルを実行します。ステップ5。 NN プラットフォーム レポートを希望の形式で保存します。 ステップ6。 最後の場所に到達するまで繰り返します。私はテストしませんでしたが、以下はうまくいくか、それに近いものになるはずです。
//assumes data table is "dt" and location is in a variable called "Location"
Summarize( locs = BY(dt:Location) );
For(
j=1, j<=NItems(locs), j++,
file = dt << Select Where(locs[j] == :Location) << Subset(
file,
Output Table Name("Model Subset File")
);
NN = file << Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
NNReport = NN << Report;
NNReport << Save PDF("Path")
);Re: ニューラル ネットワークを自動化する@G_Mあなたのアプローチが好きです。
のために@giaMSU必要なのは、ニューラル ネットワークの 1 つのケースを実行し、スクリプトをスクリプト ウィンドウ (またはクリップボード) に保存することだけです。 (一番上の赤い三角メニュー、リストの最後のオプション「スクリプトの保存」)
G_M が作成したスクリプトを使用して、この部分を置き換えます。
Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
ニューラル スクリプトを使用すれば、準備は完了、または少なくとも 90% は完了したかもしれません。
Re: ニューラル ネットワークを自動化する助けてくれてありがとう。 2 つの場所のデータセットを使用してスクリプトを作成しました。
まず、JMP 14 Pro で実行された NN から保存されたニューラル スクリプトを使用しました。 それぞれ 6 つのノードと 3 つのノードを持つ 2 つの隠れ層を使用しました。
Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
この部分はうまく機能します。 次に、G_M の提案として For ループを追加します。
dt = Open( "E:/Ready_for_ANN/Subset of 765-450.jmp" );
Summarize(locs=BY(dt:ID))
For (
j=1, j<=NItems(locs),j++,
file = dt << Select Where(locs[j])== :ID << Subset(
file,
Output Table Name ("Model Subject File"))
);
NN = file << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)"),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result")それでは、うまくいきません。
スクリプトからわかるように、For ループは j=1 から j++ までのすべての ID を含むサブセットを作成しました。 次に、このサブセットはニューラル スクリプトによって使用されます。 ただし、ニューラル部分は For ループには含まれません。 それでは、それは私のやりたいことではありません。
1 つの位置データのサブセットを作成し、各ステップでこのサブセットのニューラルを実行したいと考えています。間違っていたら訂正してください。
ここにデータのサブセット (02 個の場所) を添付しました。
問題を解決するのを手伝ってください。
よろしくお願いします。
Re: ニューラル ネットワークを自動化するG_M さん、こんにちは。
あなたのスクリプトを試してみました。 うまくいきますが、私が望んでいたとおりではありません。 スクリプトはすべての場所からデータを抽出してサブセットを作成し、ニューラルを実行しているようです。 02 か所のサブセットでテストしました。 ニューラルは 2 回実行されました。 しかし、彼らの報告は同じです。 したがって、For ループにはいくつかの問題があると思います。 手伝っていただけませんか ? 必要に応じて、このディスカッションに私のスクリプトとデータを添付しました。
ありがとうRe: ニューラル ネットワークを自動化する問題は、Select Where 関数の :ID の周囲に Char 関数を追加する必要があることだと思います。
Select Where(loc[j] == Char(:ID))
Re: ニューラル ネットワークを自動化するスクリプトは正常に実行されるようになりました。
スクリプトに小さな問題があります。 ファイルの名前は「モデル サブセット ファイル」であるため、スクリプトは各ステップで PDF ファイルを置き換えます。 完了すると、フォルダー内にはファイルだけが残ります。 スクリプトが各レポートを一意の名前で記録できるように、ファイル名に場所 ID を追加するのを手伝ってもらえますか?
ありがとう
Re: ニューラル ネットワークを自動化するレポートが書き過ぎているようです。 次のように ID をレポートに連結してみてください。
Save PDF("C:\test\model_"|| Char(i) ||".pdf");Re: ニューラル ネットワークを自動化するこんにちは、G_M
あなたの協力を得て、私はほぼ 1,000 件のニューラル ネットワーク分析を実行しました。 また、NN レポートの PDF ファイルを 1,000 個保存しました。 その後、各 NN の R2 を取得するために多くの PDF ファイルを手動で読み取る必要があるため、問題が発生しました。
追加してみましたRSquare テストを取得するR2 値を表示できるようにスクリプトに追加します。 次に、次を使用してファイルと一緒に保存できます
obj << Save (Get Gen RSquare Test)
スクリプトはまだ実行中ですが、R2 値はどこにも保存されません。 価値が見えない。
この問題について手伝ってもらえますか?
どうもありがとう。
おやすみなさい
Re: ニューラル ネットワークを自動化する@giaMSUしたがって、おそらく私がアプローチする方法は、レポートレイヤーにアクセスし、レポートレイヤーのツリー構造内の適切な表示ボックスから値を取得することです。 レポートの R^2_i 統計を取得すると、値をリストに挿入してリストからデータ テーブルを作成するか、データ テーブルを作成して値を 1 つのデータ テーブルに連結することができます。 スクリプト索引で「ツリー構造の表示」を検索します。
Re: ニューラル ネットワークを自動化するスクリプトを学びましょう。