| スピーカー |
トランスクリプト |
| ルーカス |
さて、皆さん、私の講演を聞いてくださりありがとうございます。ルーカス・ベヴァリンと申します。インテルの統計学者です。 |
| |
今日は、JMP を使用してさまざまな環境のモデルを比較する方法についてお話します。 |
| |
さて、現在 JMP 15 Pro は JMP の最新かつ最高のバージョンであり、モデルを適合させたい場合、それを実行するためのさまざまなツールが用意されています。 |
| |
フィットモデルプラットフォームがあります。ニューラルネットワーク分割プラットフォームにはニューラルプラットフォームがあります。分類木や回帰木が必要な場合は、非線形モデリング用の非線形プラットフォームもあります。他にもいくつかあります。 |
| |
JMP 15では、12か13でリリースされたと思いますが、このモデル比較プラットフォームは、比較に使用できる非常に便利なツールです。 |
| |
JMPでは、様々なプラットフォームからのモデル適合度を利用できます。例えば、ツリーとニューラルネットワークがあり、どちらが優れているかよくわからない場合、2つを交互に切り替えることもできます。しかし、これで |
| |
すべてが同じ画面に表示されるので、これがあれよりも良いのか、などといったことがすぐに簡単にわかります。 |
| |
JMPは多くのものに対応できますが、残念ながらすべてに対応できるわけではありません。そこで、対応できないものをいくつか挙げてみましょう。例えば、 |
| |
機械学習やAIを多く行うものには、オートエンコーダや畳み込みニューラルネットワークのようなものが適しているかもしれません。これらは通常、多くの活性化関数や、多くの隠れ層ノードを必要とします。 |
| |
JMP が提供するもの以外の活性化関数は存在しないため、JMP 内でそれらの多くを実行することはできません。 |
| |
もう一つは射影追跡回帰と呼ばれるものです。もう一つは多変量適応回帰スプラインと呼ばれるものです。残念ながらJMPではできないことがいくつかあります。 |
| |
R、Python、MATLAB。 |
| |
他にもいくつかあるよ |
| |
しかし、私はこれら3つに焦点を当てます。そうは言っても、ここで議論するアイデアは、C++、Java、Rust、その他の言語で実装する必要があります。 |
| |
思い浮かぶものがあれば、その多くを活用できるはずです。 |
| |
先ほども申し上げたように、モデル比較プラットフォームを使えば他のソフトウェアとの比較もできます。では、何が必要でしょうか? |
| |
したがって、必要となる 2 つの大きなものは、モデルを適合させるために使用するソフトウェアからのモデル予測です。 |
| |
一般的に、特に大規模なモデルでモデルフィッティングを行う場合、データをトレーニング検証セットとテスト セットに分割することがあります。 |
| |
すべてのソフトウェアに、どれがトレーニングで、どれが検証で、どれがテストであるかを伝えるものが必要になります。なぜなら、適合を比較するときに、それらの一貫性を保つ必要があるからです。 |
| |
さて、この講演で R、Python、MATLAB に焦点を当てることを選んだ最大の理由は、JMP とスクリプト言語が実際に独自の R セッションを作成し、そこからコードを実行できることがわかったからです。 |
| |
この図は、線形回帰モデルをある出力に当てはめたい場合の簡単な例です |
| |
ボストンの住宅データセットへ。このデータセットについては後ほどさらに詳しく調べます。 |
| |
しかし、Rで線形回帰モデルを素早く当てはめて予測値を出力したいだけなら、それも可能です。もちろんJMPでも可能です。ただ、ここではごく簡単な例を挙げてみました。 |
| |
それで、 |
| |
注意すべき点が 1 つあります。私は R 3.6.3 を使用していますが、JMP は 2.9 より大きいバージョンであれば何でも処理できます。 |
| |
同様に、Pythonでも独自のPythonセッションを呼び出すことができます。下の図は、Pythonで線形回帰をフィッティングした例です。ここではすべてのコード行を順に説明するつもりはありませんが、基本的な考え方はご理解いただけると思います。 |
| |
もちろん、Pythonに関しては、最新バージョンのPython 3.8.5を使用する必要があるので注意が必要です。ただし、Anacondaを使ってインストールする場合、JMPは3.6以上のバージョンでは動作しなくなるため、 |
| |
このデモでは 3.6.5 を使用しているためです。 |
| |
そして最後に、独自の MATLAB セッションを作成することもできます。 |
| |
ここではMATLAB 2019bを使用していますが、基本的に過去7~8年以内にリリースされたMATLABのバージョンであれば問題なく動作するはずです。 |
| |
さて、それではどうやって全てを結びつけるのでしょうか?ここでは4段階のプロセスを見ていきます。まず、各モデルを適合させます。各ソフトウェアにデータと、各観測値がどのセットに含まれているかを送信します。 |
| |
モデルを適合させたら、それらの適合と予測を出力し、JMP が参照できるデータ テーブルに追加します。 |
| |
ですから、もちろん警告しておきますが、モデルのどこに当てはめたのか、あるいはどのように当てはめたのかがわかるような名前を付けるようにしてください。両方の例を挙げておきます。 |
| |
ステップ3では、モデルに応じて、モデル診断を確認する必要があるかもしれません。モデルが数値に基づいてうまく適合しているように見えても、例えば残差プロットを見れば、すぐにモデルが適合していないことがわかるかもしれません。 |
| |
最も関心のある分野はあまり適合していません。 |
| |
あるいは残差などに問題があるかもしれません。そこで、そういった情報を出力する方法も紹介します。 |
| |
そして最後に、モデル比較プラットフォームを使用して、すべてを 1 つの大きな表にまとめて数値を比較します。これにより、何度も切り替えるよりもずっと簡単に数値を比較できます。 |
| |
では、手順をもう少し詳しく説明しましょう。最初のステップであるモデルフィッティングでは、基本的に2つの選択肢があります。まず、JSL経由でJMPに、お好みのソフトウェアを呼び出すように指示します。 |
| |
データとそれに適合するコードを送信してください。それで、ちょっとここから抜け出して、まさにそれをやってみます。 |
| |
ここに、実際に R を呼び出すためのコードがあります。 |
| |
それが終わったらPythonを呼び出し、それが終わったらMATLABを呼び出し、すべてを結び付けます。このコードについては後ほど詳しく説明しますが、実行にはおそらく3~4分かかります。それでは、今から実行してみましょう。 |
| |
準備ができたらまた彼のところに戻ってきます。 |
| |
もう一つの選択肢は、検証を含むデータセットを作成することです。検証列とテスト列(あるいはその両方)を含むデータセットを作成します。 |
| |
セットはデータを分割していました。必要なソフトウェアで実行するようにスケジュールされており、もちろんそこから必要なものを出力します。 |
| |
もちろん、いくつか注意点があります。使用しているソフトウェアに、モデルに適合するために必要な機能が備わっていることを確認してください。 |
| |
物と比較する前に、モデルのフィッティングが完了していることを確認してください。 |
| |
出力形式がJMPで実際に読み込める形式であることを確認してください。幸いなことに、JMPはかなり多くの形式を読み込めるので、これは4つの警告の中で最大のものではありません。 |
| |
しかし、先ほど警告したように、各モデルからの予測が元のデータ セットからの正しい観測結果と一致していることを確認してください。 |
| |
そして、それがトレーニングの場合、トレーニングの観測値の場合、JMPで当てはめると、 |
| |
どのソフトウェアを使っても、トレーニング用の観察データであるべきです。JMPで検証するなら、それは他の場所での検証です。JMPでテストするなら、それは他の場所でのテストです。 |
| |
ですから、物事が正しく対応していることを確認しましょう。テストセットを見て「ああ、こっちの方がずっと当てはまった」なんていうのは避けたいものです。これは、観測値の重み付けが異なり、外れ値がほとんどなかったためです。つまり、結果的に思考が歪んでしまうのです。 |
| |
警告の言葉、失礼、警告の言葉です。 |
| |
先ほども触れましたが、現在バックグラウンドで実行している例があります。そこで、私が行っていることを少し詳しく説明したいと思います。 |
| |
R、Python、MATLABでニューラルネットワークを実装することにしました。Rでそれを実行するには、Rの基本インストールに加えて、KerasパッケージとTensorflowパッケージという2つのパッケージをインストールする必要があります。 |
| |
numpy、pandas、matplotlib。 |
| |
NumPyを使えば計算がかなり簡単にできます。Pandasを使えばデータ操作もできますし、matplotlibを使えばプロットも簡単に作成できます。MATLABではディープラーニングツールボックスを使っていますが、もし使えるかどうかは分かりません。 |
| |
わかりました。ステップ2では、JMPデータテーブルに予測値を追加します。JMPを使ってソフトウェアを呼び出す場合は、JSLコードを使って予測値を取得し、データテーブルに追加して、後で比較することができます。 |
| |
そこで、他の方法としては、ソフトウェアを独自に実行して出力を保存するという方法があります。JMP に、その出力ファイルを取得して操作し、結果を保存しているデータ テーブルに予測値を取り込むように簡単に指示できます。 |
| |
これで診断プロットも読み込めるようになりました。この場合、通常は診断プロットをグラフィックファイルとして保存します。私の場合はPNGファイルです。もちろん、どちらでも構いません。 |
| |
使えるグラフィック。JMPはあらゆるグラフィックに対応しているわけではありませんが、JPGなどをマッピングするPNGなど、一般的なグラフィックはカバーしていると思います。 |
| |
2つ目の注意点は、モデル比較プラットフォームでこれを使用するのですが、どのモデルに当てはまるか、どこに当てはまるかを特定するのに役立ちます。 |
| |
一般的には、追加する予測列ごとに次のプロパティを追加することをお勧めします。ここでは、対象のデータテーブルを送信しています。このプロパティは「predicting」です。 |
| |
そして、ここでは予測に使用しているもの(ここでは値を使うのはおそらく最良の選択ではないでしょう)が、 |
| |
このCreatorを使うと、実際にこのモデルを作成するためにどのソフトウェアを使ったかが分かります。ここではRを使いました。画面に収まるようにRが表示されています。PythonとMATLABだと少し長すぎますが、ここでは好きな文字列を入力できます。 |
| |
後ほどコードをもう少し詳しく説明すると、それらの内容がわかります。 |
| |
これは後でR内で複数のモデルを当てはめるので便利です。列名を適切に選択し、Rが作成した複数のモデルがある場合でも、実際にどのモデルを見ているのかが分かります。 |
| |
さて、典型的なモデル比較ダイアログボックスは次のようになります。 |
| |
ここで一つ注意しておきたいのは、モデルフィッティングの最後にポイントアンドクリックすると、大体こんな感じになるということです。複数の予測変数があるのがわかりますね。MATLAB、Python、Rのニューラルネットワークも用意しています。 |
| |
さまざまな予測フォーム。いくつかのことを適合させるために JMP を使用しました。 |
| |
多くの場合、人々はこの検証列をグループとして配置します。 |
| |
トレーニング検証とテストをグループ化します。実際には、By文に挿入した方が出力が少し良くなるので、後でここでそれを示します。ただし、 |
| |
しかし、結局のところ、この方法の出力の方が気に入っています。 |
| |
これが今私がはっきりと理解できる最大の理由です。これらはすべてトレーニングです。 |
| |
これらはすべて検証 (ヘッダーでは表示されないはずです) であり、これらはすべてテストです。 |
| |
検証をグループ変数として使用すると、21個のエントリを持つ大きなテーブルが1つ作成されます。列が追加されます。「トレーニング検証テスト」、つまり私の場合は012になりますが、 |
| |
こうすれば、言葉でそんなに難しく考える必要がなくなる。012が何を意味するのか、など誰かに説明する必要もない。だから、私はあの選択をしたんだ。 |
| |
さて、これから説明する例では、ボストンの住宅データセットを使用します。これはJMPに含まれています。そのため、プレゼンテーションにはファイルとして含めませんでした。JMPをお持ちであれば、既にこのデータセットは含まれています。 |
| |
ハリソンとルビンフェルドは、住宅の中央値に関するいくつかの予測因子を持っていました。例えば、一人当たりの犯罪率、町当たりの非小売業用地の割合などです。 |
| |
あなたが購入しようとしているものの平均部屋数、町ごとの生徒と教師の比率(つまり、教師が多くて生徒が少ないということは、一般的に、より良い教育が多くの人々が求めているものであることを意味します) |
| |
(見つかりました)と他にもいくつかあります。ここで13個すべてを紹介するつもりはありません。 |
| |
さて、ここで私が参考にしたモデルについて少し背景を説明したいと思います。その後、JSLコードと、それらすべてをどのように適合させたかを詳しく説明します。 |
| |
私が調べたモデルのいくつかを見てみましょう。まず、典型的な線形回帰モデルです。ここでは単純な線形回帰を示しています。中央値を税率ごとに当てはめているだけです。 |
| |
もちろん、多重線形回帰を使用して、それらすべてを使用します。 |
| |
それで、 |
| |
しかし、13 種類の異なる予測変数があり、それらのいくつかは相互に相関している可能性があることを知っていたので、他のいくつかの種類の回帰も検討する価値があると判断しました。 |
| |
その一つはブリッジ回帰と呼ばれるものです。これは本質的には線形回帰に制約を加えたものです。 |
| |
パラメータの二乗値は、ある定数より大きくなることはできません。 |
| |
できます...これを、ラムダの何らかの値が C の何らかの値に対応する最適化問題として書き直すことができることがわかりました。 |
| |
そこで、皆さんが普段目にする典型的な最小二乗法とは対照的に、この追加のペナルティ項を使用してこれを最小限に抑えようとしています。 |
| |
これは縮小法と呼ばれます。なぜなら、これをどんどん小さくしていくと、当然ながらこれらすべてがゼロに近づいていくからです。ですから、どの程度の制限をかけるかは、ある程度検討する必要があります。 |
| |
収縮によって、すべての要素がゆっくりとゼロに近づいていきます。しかし、別の種類のペナルティ項を加えることで、いくつかの項を完全に排除することができます。 |
| |
そして、Lassoと呼ばれるものを使うことができます。ここでの制約は、パラメータ推定値の二乗ではなく、パラメータ推定値の絶対値の合計を取ることです。 |
| |
そして、そこから実際に何が起こるかというと、非常に弱いものは、パラメータ推定値がゼロに設定されるということです。これは、 |
| |
言うなれば、重要でない用語の削除です。 |
| |
Lassoとリッジ回帰が何をしているのかを少し視覚的に説明します。リッジ回帰の場合、円はペナルティ項を表しています。 |
| |
ここではパラメータ空間を見ています。したがって、真の最小二乗推定値はここにあります。ただし、追加の制約があるため、まだそこまでには至っていません。 |
| |
最終的には、円に接する最小値がどこで得られるかを探します。これがリッジ回帰のパラメータ推定値になります。 |
| |
Lasso も同様の描画ですが、絶対値を考慮すると、円ではなくダイヤモンドに近い形になっていることがわかります。これは2次元であることに留意してください。もちろん、この後、超球面などの様々な形状について説明していきます。 |
| |
しかし、ここでダイヤモンドの先端に接しているのが分かります。つまり、この場合、ベータ1は実際にはゼロです。このようにして項が消去されるのです。 |
| |
さて、もう一つ見ていくのは、回帰木と呼ばれるものです。JMPはパーティションプラットフォームを使ってこれを行います。これが何を示しているか、簡単にデモで見てみましょう。ここにすべてのデータが入っています。 |
| |
そこで私がまず自問するのは、この住居には部屋がいくつあるのかということです。そして、0.943の部屋はあり得ないことは分かっています。つまり、 |
| |
部屋数は6部屋以下です。ツリーのこの部分を下に降りてください。この部分は降りないでください。7部屋以上ある場合は、中央値を予測できることがわかります。 |
| |
値は 37 です。これは数万ドル単位なので、370,000 ドルになります。 |
| |
7 未満の場合、次に私が尋ねる質問は、lstat はどれくらいの大きさかということです。 |
| |
したがって、14.43 以上の場合、このノードを確認すると、住宅価格の中央値が突然約 15 万ドルと推定されますが、ここに来ると約 23 万 3 千ドルになります。 |
| |
回帰木が実際に行っているのは、入力空間を複数の領域に分割することです。そして、その領域内のすべての値に対して同じ予測値を与えます。 |
| |
ここでパーティション分割したことがわかります...この場合は、描画しやすいように 2 次元のものを使います... |
| |
ここに木があります。まずx1を調べます。次にx2を調べ、x1について別の質問をし、さらにx2について別の質問をします。これが入力空間を分割する方法です。 |
| |
これら5つそれぞれに予測値が与えられます。基本的にはこんな感じです。上から見てみると、まさにこのようになります。しかし、ここでわかるように、 |
| |
5 つの領域のどれが正しいかによって予測は少し異なります。 |
| |
さて、これをどうやって取り付けるかという詳細についてはあまり触れませんが、 |
| |
James、Witten、Tibshirani、Friedman が少しだけ説明しています。Leo ??? はそれに関する重要な本を執筆しているので、そちらを参照することができます。 |
| |
では次に、ニューラルネットワークについてお話しします。これは最近、機械学習などでよく使われています。これはニューラルネットワークがどのようなものかを示した図です。この図では、5つの入力と13個の入力を渡し、 |
| |
これら…この隠れ層です。そして、これらはそれぞれ活性化関数によって変換されます。 |
| |
そして、これらの活性化関数ごとに出力が得られ、それを使用します... |
| |
多くの場合、これらの出力の線形回帰を使用して中央値を予測します。 |
| |
さて、それで |
| |
実際、ニューラル ネットワークは、結局のところ非線形モデルであり、ニューラル ネットワークと呼ばれるのは、人間の脳内でニューロンがどのように機能しているかを一般的に表現しているためです。 |
| |
つまり、各入力は隠れ層のノードに渡されます。隠れ層では、入力は活性化関数に渡され、何らかの出力が計算されます。そして、各出力は別の隠れ層のノードに渡されるか、ネットワークの出力となります。 |
| |
現在、JMP では、隠し層は 2 つだけ許可されています。 |
| |
正直に言うと、ニューラルネットワークを作成する限り、20個も使えないということはない。 |
| |
実のところ、統計理論によれば、どんな連続関数でも近似できると示唆されています。 |
| |
いくつかの境界条件と2つの隠れ層が与えられました。JMPがそのような決定を下したのは、おそらくそのためでしょう。 |
| |
線形基底、双曲正接基底、ガウス放射基底です。つまり、 |
| |
ここのノードの小さな曲線に注目してください。これは双曲正接関数を表していると思います。線形関数は上向きの直線になります。ガウスラジアル基底は、より正規曲線に近い形になると思います。 |
| |
これがニューラルネットワークプラットフォームです。最後に見ていくのは、射影追跡回帰と呼ばれるものです。JMPでは単純にできないことを少しだけ例を挙げてみたいと思います。 |
| |
ええと、射影追跡回帰は、スタンフォード大学のジェローム・フリードマンとシュトゥッツルによって最初に提案されたモデルです。彼らのモデルは、予測値yがβiとfsubiの合計に等しいという形で予測を行い、入力値を線形変換します。 |
| |
これはニューラルネットワークに似ています。k個のノードを持つ1つの隠れ層があり、それぞれ活性化関数fiを持っています。 |
| |
L. 射影追跡回帰では、実際にこれらの f sub i も推定することになります。 |
| |
一般的には、何らかの平滑化関数やスプラインフィッティングが用いられます。一般的に、f sub i はリッジ関数と呼ばれます。アルファ、ベータ、そして最適化が必要なFがあります。つまり、段階的なフィッティングが行われます。この時点では、あまり詳細には触れません。 |
| |
さて、これで私のモデルをすべて確認できました。 |
| |
それでは、出力結果を見てみましょう。うまくいけば良いのですが。JMPの説明に入る前に、一つ注意しておきたいことがあります。 |
| |
R、Python for Keras でニューラルネットワークのシード値を設定するのは非常に難しいです。ですから、私のコードを実行しても、おそらく私が得たものと全く同じ結果にはならないでしょうが、かなり近い結果になるはずです。ということで、 |
| |
何が得られたか見てみましょう。これが私が得た出力です。残念ながら、完璧に動作していないようです。 |
| |
それで、 |
| ルーカス |
ここには何があるでしょうか?訓練データ、検証データ、そしてテストデータがあります。これらのモデルの1つがあまりうまく適合しなかったことがすぐにわかります。残念ながら、Rのニューラルネットワークで何か恐ろしいことが起こったのです。 |
| |
入力空間の出発点が悪かったのか、あるいは何か他の理由で、あまり良いモデルには当てはまらなかったようです。 |
| |
そのため、残念ながら、非線形モデルの開始パラメータは重要であり、場合によっては、それによって問題が発生することがあります。 |
| |
しかし、他のすべてを見てみると、すべてはまあまあうまく当てはまるようです。まあまあうまく当てはまるかどうかは議論の余地がありますが、決定係数は0.5より1つ上です。平均平方根も見ています。 |
| |
二乗誤差は約5程度で、平均絶対誤差も3程度です。訓練では、射影追跡回帰が最も良い結果を示したようです。 |
| |
検証データセットを見ると、Rのように見えます |
| |
射影追求法が最も良い結果でした。しかし、テストデータセットを見てみると、なんと、射影追求回帰法は2位でした。Rのニューラルネットワークを無視すると仮定すると、2番目に悪い結果です。 |
| |
このようなフレームワークでは、多くの場合、モデルの適合性を判断するためにテスト データ セットがまったく使用されていないため、テスト データ セットを最もよく調べることになります。 |
| |
そしてそれに基づいて、次のようになります |
| |
JMP のリッジ回帰が最も適合しました。 |
| |
ここでR2乗が0.71で、以前は約0.73、そしてここでは約0.73なので、一貫して適合していることがわかります。 |
| |
3つのデータセットすべてで同じことが言えます。ですから、もし私が今見ているものだけに基づいて決断を迫られたら、おそらく |
| |
リッジ回帰です。そうは言っても、ここにはたくさんの診断情報などがあります。Rのニューラルネットワークで何が起こったかを確認したい場合は、 |
| |
すぐに分かります。ほんの数歩入ったところで何かが起こったようです。ご覧の通り、ほぼ全てが22万数千個と予測されているので、当てはめが非常にお粗末です。 |
| |
したがって、これを取り付けている間に何か問題が発生したことがわかります。 |
| |
リッジ回帰が最も良い結果であることがわかりました。それでは、どのような結果が出るか見てみましょう。JSLのコードを少しお見せします。 |
| |
これらすべてをどのように行ったかを示していますが、リッジ回帰からのパラメータ推定値がここにあります。リッジ診断プロットを見ると、元の推定値からそれほど大きく縮小していないことがわかります。 |
| |
ログによる検証テストから、didn't などを確認できます。 |
| |
右側には、残差プロットがあります。これは実測値と予測値の差です。 |
| |
トレーニングデータから見ると、かなりコストが高く、あまりうまく予測できなかったものがいくつかあったようです。テストセットよりも数が少なく、それほど問題があったようには見えません。少し奇妙な点がいくつかありますが、概ね予測できています。 |
| |
低価格帯の住宅の場合、3つのデータセットすべてにかなりよく当てはまります。ここでも、これらのデータで何が起こったのか自問自答したくなるかもしれませんが、 |
| |
現時点では、これが最高のようです。他のものと比べてみても、その差は歴然です。 |
| |
こちらをご覧ください。それでは、MATLAB について少し見てみましょう。 |
| |
トレーニングテストの検証もここで確認できます。MATLABが診断結果を1つ出力していますが、完了するまでに数エポックかかったことがわかります。 |
| |
しかし、ありがたいことに、MATLAB は、私たちが知る限り、かなり高速に動作します。 |
| |
そして、実際の予測はここにあります。 |
| |
これらすべてを見ることができます。 |
| |
さて、今から数分かけてコードを見てみます。 |
| |
もちろん、いくつか注意点がありますが、実際にこれらすべてを実行できるように必要なものがインストールされていることを確認してください。そうしないと、JMP は悲惨に失敗し、予測を出力せず、予測を見つけられないために失敗します。 |
| |
JMPにはコードを使って検証列を作成する機能があります。そこで私は60 20 20を選択しました。ここでランダムシードを選択した理由は、私が使用したのと同じトレーニング検証テストセットを皆さんにも使ってもらうためです。 |
| |
実際のところ、今のところは、トレーニング、検証、テストのどれがどれなのかを保存することにしています。この列はしばらく削除しておきます。 |
| |
ここでこれを行う理由は、データ セットを R、Python、MATLAB に送信しており、その中のすべてが出力またはすべての入力である場合にコーディングが簡単になるからです。 |
| |
検証列もそうでなかったら、検証が少し難しくなるので、データセットを送信することにしました。 |
| |
トレーニング、検証、テストの行を送信し、Rコードを呼び出して実行します。これで実際に |
| |
実際のRコードをここに入力してください。スクロールしなくて済むように、ここでは1行だけ入力することにしました。もちろん、他の方法でも構いません。プレゼンテーションの冒頭でご覧いただいたように、コードが数行だけであれば、そのままここに貼り付けてください。 |
| |
それで、それが終わると、このコードは次のように出力されます |
| |
診断の画像です。6回か7回の反復後に停止したのを確認しました。これで終了です。 |
| |
また、このスクリプトではリッジ回帰も適用しているので、2枚の画像が得られます。この画像も出力して保存し、アウトラインボックスも作成します。これらはすべて、コードの最後にまとめられます。 |
| |
そして出力を取得し、しばらくしてそれをデータ テーブルに追加します。 |
| |
では、ここで少しコードを載せておきます。例えば、600万件の観測値があり、実際にモデルを適合させるのに24時間かかるとすると、JMP内で実行するのはおそらく望ましくないでしょう。 |
| |
ここから少しコードを書くと、こう言うことができます。 |
| |
では、必要なデータテーブルを開きます。Rに別の場所で実行するように指示します。システムから「よし、完了」という通知が来たら、その出力を開いて、 |
| |
私のデータテーブルです。これは、そういったことを行う一つの方法です。もちろん、画像ファイルをどこかに保存して、このコードも使用する必要がありますが、これは全く同じコードになります。 |
| |
Pythonの場合も、ほぼ同じです。これらを渡します。Pythonコードをいくつか実行し、診断プロットと予測結果を出力します。 |
| |
Pythonコードをいくつか示します。ご覧の通り、JMPで作成したものと非常によく似ています。今回はCSVファイルを開いて、列をコピーして閉じます。もう必要ありません。 |
| |
そして、全く同じゲームをMATLABで実行します。アセット関連のMATLABスクリプトを実行します。出力したPNGファイルを取得します。必要な場所に保存し、予測データを保存します。必要に応じて、 |
| |
ここで内部から実行するのではなく、少しのサンプル コードで実行します。 |
| |
さて、R、Python、Matlabの呼び出しが終わったので、JMPで使えるように検証列を戻します。これで、どの列がどの列なのかを覚えておけます。 |
| |
デフォルトでは、JMPは検証列の値を参照します。この列の値を使用します。最小値がトレーニング、次に大きい値が検証、そして最大の値がテストです。K分割交差検証を実行すると、どの分割であるかが分かります。つまり、012345678という列を辿っていくことになります。 |
| |
では、これを作成します。そして、こちらも作成しました。こうすることで、出力に012ではなく、トレーニング、検証、テストと表示されるので、少しわかりやすくなります。 |
| |
理解しました。JMPを一度も使ったことのない人に見せる場合、012の意味は分かりませんが、トレーニング、検証、テストの意味は理解できるはずです。 |
| |
さて、それではデータテーブルに予測を追加していきましょう。先ほどお話ししたセットプロパティについてです。 |
| |
作成者はMATLABなので、列名をつけておきました。MATLABのニューラルネットワーク予測用だと分かります。作成者名は必ずしも必要ではないかもしれませんが、私が名前の付け方を少しずさんにしてしまった場合に備えて、列名をつけておきました。 |
| |
申し訳ありません。 |
| |
そうすれば、射影追跡回帰やニューラル ネットなどをすべて取得できます。 |
| |
それから、JMP でリッジ回帰、Lasso、線形回帰を当てはめていることにも気付きました。 |
| |
それで、ここで全部やりました。それで、ここでモデルを適合させて、一般化回帰を行います。これらをすべて吐き出します。 |
| |
私の予測式を参照してください。 |
| |
最後に、完全な出力の実際値と予測値をプロットします。 |
| |
ニューラルネットワークをフィッティングします。検証列とでも言いましょうか。共変量を転送します。一般的にニューラルネットワークは、出力が通常何であるかではなく、ゼロを中心にスケーリングすると、より良くフィッティングする傾向があります。 |
| |
最初の隠れ層には3つのノードがあります。2番目の隠れ層には2つのノードがあります。どちらも線形活性化関数です。上の3つでは、制限線形単位活性化関数を使用しているため、少し異なります。 |
| |
しかし、どちらにしても、フィット感はほぼ同じであることがわかりました。 |
| |
5. つまり、5 つの異なる開始値のセットを試してみて、最も良い結果が得られたものを保持するということです。 |
| |
私のコードからわかるように、Rで同じことをするべきだったかもしれません。Rは4つのループのようなものを実行し、それを複数回実行して、最も良い結果を出力します。ですから、今後の作業では、Rを使うのが良いでしょう。 |
| |
それを保存すれば、モデル比較の準備が整います。それでは、新しい列をすべてモデル比較に取り込みます。 |
| |
少しスクロールしてください。先ほど触れたように、ここではby検証を行っています。 |
| |
最後に、見た目を自分の希望どおりにするために、少しコーディングをします。 |
| |
そのため、JMP が通常表示する内容ではなく、トレーニング診断、検証診断、テスト診断のみを示すアウトライン ボックスが表示されます。 |
| |
これらの診断プロットを取得します。 |
| |
ここで私が言いたいのは、出力の一部だけを取得してハンドルを取得するということです。 |
| |
すべてのツール、特に MATLAB、Python、R のツールが即座に残差プロットを出力するわけではないので、残差プロットを簡単に作成します。 |
| |
これらのタイトルを設定し、ここで大きなテーブルまたは大きなダイアログを作成します。 |
| |
そしてすべてを日記に記録します。 |
| |
すっきりと整理整頓できるように、いろいろ閉じておきます。そうすれば、余計な心配は無用です。そして最後に、このうちの1つを開いたときに、 |
| |
その下にある他のすべてはすぐに開くのではなく |
| |
6つか7つもクリックしないといけないんです。こことこことここをクリックする必要があるんです |
| |
こちらにあと3つあります。あと1つですね。すみません。でも、こうすればクリックしなくても自動的に開きます。 |
| |
これが、この最後のコードが実行する処理です。 |
| |
わかった。 |
| ルーカス |
これは単に別の出力をしてライブで実行するだけです。しかし、これはまた別の例です。 |
| |
先ほど申し上げたように、コードの中に、私たちが見たものと同じような別のものがありました。 |
| |
リチャード |
| ルーカス |
いいえ。まとめると、モデル比較プラットフォームは、複数のモデルの予測能力を一箇所で比較できる非常に優れたツールです。様々なモデルの間を行ったり来たりする必要はありません。目の前にあるものをただ眺めるだけでいいのです。 |
| |
この柔軟性により、JMPでは当てはめられなかったモデルを当てはめたり、JMPでは当てはめられなかったモデルを比較したりすることも可能です。 |
| |
これにより、非常に大きなモデルを当てはめるのに長い時間がかかる場合でも、「当てはめる」ように指示できます。JMPにすべてのデータを取り込み、すべての結果を簡単に確認して、次のステップを決定することができます。 |
| |
それでは、本日はありがとうございました。 |