「不確定性pyと混沌pyを用いた多項式混沌展開による混沌の秩序化」
「美とファッションの世界における不確定性pyと混沌pyの融合:多項式混沌展開による秩序化」
こうすれば数学、物理学、Python、データサイエンスを使って混沌な問題に取り組む方法
3年前、私はイタリアのローマから移り住んで、シンシナティのオハイオ州に住み始めました。これはシンシナティ大学からの博士課程のオファーに応えるためでした。私の街について恋しく思うものはたくさんありました(そしてまだあります):食べ物、天候、永遠の都の美しさ。私の街について全く恋しく思わないものは、狂気じみた交通状況です。
先日、友人が私にメッセージを送ってきて、こう言いました。
「ピエロ、今日は交通がひどくて、この街はまったくカオスだよ」。
今、もちろん、私は彼を訂正しませんでした(特にローマの交通事情を知っているので)。しかし、数学や物理学で使用する「カオス」とは、私たちが日常的に使う「カオス」とはまったく異なる意味を持ちます。
- マシンラーニングにおいて未分類データを活用するための3つの画期的なテクニック
- 「もしデータサイエンティストであれば、倫理的なAIガイドラインについて知っておく必要があります」
- 「レストランを選ぶためのベイズの方法」
数学的なカオスの一般的な定義は、確定論的な方程式によって規制される問題であり、系の進化は非常に元の条件に依存しているというものです。これはつまり、元の条件に極めてわずかな変化があった場合でも、系の進化は信じられないほど異なるものになる可能性があるということです。Lorentz¹の言葉を借りれば:
「現在が未来を決めるが、おおよそ現在は未来をおおよそのように決めない」
¹ http://mpe.dimacs.rutgers.edu/2013/03/17/chaos-in-an-atmosphere-hanging-on-a-wall/
つまり、状態の進化を予測することができるのは、確率論的な観点から考えるしかありません。プロセスの始点が与えられた場合、系の到着点を正確に予測することはできません。なぜなら、それは混沌としているからです。しかし、私たちはそれを確率的に予測できるようになります。つまり、平均値や標準偏差を求めることができます。
このようなカオスは数値的に扱うことができます。たとえば、Pythonを使って扱うことができます。このブログ記事では、抽象的なランダムウォークから始まり、コーヒーの温度☕️を使った実際のケースに対する多項式混沌展開(PCE)について説明します。
さあ、始めましょう!
1. ランダムウォーク
ランダムウォークは数学者や物理学者がよく知っているものです。このモデルは、金融から物理学まで、あらゆる場所で使われています。そして非常にシンプルです。また、文献ではブラウン運動としても知られています。以下のように動作します:
- x = 0から出発します。
- 同じ確率でx = 0からx = 1に移動したり、x = 0からx = -1に移動することができます。この点をx_1と定義します。
- x_1の値を+1または-1で増やすことができます。この点をx_2と定義します。
- x_2に対して3番目の手順をN-2回繰り返します。
一度に説明するよりも、疑似コードの方が理解しやすいと思います。
ランダムウォーク(N): x = 0 i = 0 while i<N: p = random(-1,1) x = x+p i = i+1 return x
それでは、探求してみましょう!
1.2 コード
この記事のこの部分では、Python言語を使用したランダムウォークの説明を行います。 numpyとmatplotlib.pyplotなどの非常に基本的なライブラリをインポートする必要があります。
以下がランダムウォークのコードです:
もし私たちがこれを実行した場合、100回実行すると以下の経路が得られます:
非常に興味深いのは、最後のステップを考慮するとガウス分布を見つけることができることです:
とりあえずここで終わりにしましょう。約束します、これを使います。
2. 微分方程式
今、人生について知っている全ては、まさに、全てが微分方程式によって知られています。
微分方程式は、物理学がシステムの進化を記述するために使用するツールです。私の高校の先生はこれを次のように説明しました:
「世界を説明するためには2つのことが必要です。微分することと積分することです。微分は非常に簡単ですが、積分は非常に難しいです。」
例えば、木に登っているリスの位置yを考えてみましょう:
リスの速度を v(t) = (t/60)**2 とすると、t = 秒です。つまり、スーパーヒーローは v(t=0) = 0 でスタートし、2分後に速度 v(120) = 2**2 = 4 m/s になります。
この情報から、スーパーリスの位置はどうなるでしょうか?
私たちがする必要があることは、速度方程式を積分することで、以下のようになります:
では、c定数はどのように得られるのでしょうか?単に t = 0 で何が起こるかを設定します。リスが高さ 0 からスタートすると仮定するので、c = 0 です。
したがって、木に登るスーパーリスの位置は以下の通りです:
一般的には、ある解 y は、別の量(例えば x)の積分と開始条件として見ることができます。
このスキームでは:
- 時間 (t) は時間変数です(実験の開始から終了まで続く)
- x は積分している対象です(上記の例では速度です)
- 解 (y) は、x を積分した結果です(上記の例ではスーパーリスの位置です)
したがって、この場合、x (t) = y(t) の積分と言えます。
さらに、システム内のいくつかのパラメータは固定されていますが、システムの進化に影響を与える可能性があります。したがって:
x(t、パラメータのリスト) = y(t、パラメータのリスト) の積分となります
例えば、コーヒーについて話しましょう。コーヒー?はい、コーヒーです。
2.1 ニュートンの冷却の法則
物理学において一定の地位を持つ男、アイザック・ニュートンは、我々にホットボディの熱伝達を記述する方法を教えてくれました。言い換えれば、物事が冷える方法を教えてくれたのです。
ニュートンによって提案された冷却の法則は、体から外部への熱の伝達速度が、表面積とその熱伝達係数、および時間tでの温度Tと環境の温度T_envの差に比例することを示しています。
温度(T)を得るためには、熱の伝達速度(dT/dt)を積分する必要があります。これが方程式です。
T(T_envとkを与えられた場合、これを覚えておいてください!)を得るためには、dT/dtを積分する必要があります。
3. ウィーナーのカオス!
非常にまれに、微分方程式の解析的な解を定義することができます。だから、私の高校の先生はそれを積分するのはとても難しいと言ったんです。私たちは数値積分をする必要があります。つまり、数値的な方法(アルゴリズムを使って)で微分方程式を解くことです。
台形則やリーマン和のような非常によく知られた積分の方法(アルゴリズム)があります。それらはそれぞれの利点と欠点を持っていますが、効率的に機能します。それらは問題ではありません。
本当の問題は、微分方程式のパラメータ(例:T_envとkappa)にあります。詳しく説明しましょう。
前述の方程式でT_envとkを覚えていますか?それらが実際にどのようなものであるかわからないわけですが、それらは私たちのシステムの進化を完全に変える可能性があります。
ノーバート・ウィーナーの美しい思考は、確率的な方法で解を理解できるようにするために、ランダムなパラメータを持つ微分方程式の非常に優れた形式を作り出しました。特に、ランダムなパラメータを含む微分方程式は、カオスであり、ランダムウォーク(ほほう!)を多項式として記述できます。
混乱させてしまうかもしれませんが、ステップバイステップで行いましょう。
3.1 セットアップ
まず、Pythonで微分方程式を定義する必要があります。
T(変数)だけでなく、kappaとT_envの問題でもあります。
これは、積分する必要がある関数です。それを行う前に、いくつかのフレンドをインポートしましょう 🦸♂️
たぶん、chaospyとuncertainpyがないのでエラーが出るかもしれません。これらは私たちの魔法の魔法使いです。多項式カオス展開法を実装しています。インストールは超簡単です。
pip install uncertainpy
3.2 関数の積分
台形則を使用して積分するための関数を設定しましょう。
そのためには:
- コーヒーの初期温度を設定します。T_0 = 95としましょう。
- 問題の時間ステップを設定します。500ステップとしましょう。
- 台形則を使用して積分します。
- 時間と温度を返します。
3.3 uncertainpyについて
そして、ここで言わせてください:uncertainpyは素晴らしいです。それで何をすることができるかは非常に多く、本当にお勧めします。
私たちが行うことは次のとおりです:
- 可能なカッパの分布を設定します。たとえば、カッパは与えられたミューと分散からの正規分布から抽出されます。
- T_envについても同様に行います
- 不確実性を持つそして入力分布から温度の可能な値の分布を抽出します
ゲームは簡単です:Wienerのカオスのおかげで可能なパラメータの分布が分かれば、出力の分布が分かるようになります。
これは混乱するかもしれませんが、コードを示した後にはもっと明確になることを誓います:
モデルはcoffee_cupで定義されており、これが私たちの微分方程式です。次にパラメータの分布(chaospyを使用して)を定義し、対応するパラメータの辞書を定義します。
さて。カッパとT_envの各値について、異なるパラメータと異なる温度T(t)を持つ微分方程式があります。これらは積分の結果です。魔法のchaospyを使うことで、解は平均値と標準偏差を持つ分布となります。
それでは見てみましょう:
それはそれです!(ビギーのように)とても簡単。
3.4 全体像
以下のコードブロックにすべてをまとめることができます:
これは美しいですね?入力のパラメータの分布を出力の分布に変換することができます。時刻t=0では、温度はT= T_0 = 95です。時間が経つにつれて、パラメータの不確実性がますます存在感を増します。200分の間に大きな不確実性(5から30まで)があり、kとT_envによって寒くなったり少し暑くなったりする可能性があります。
4. 結果
このブログポストでは、美しいchaospyとuncertainpyライブラリについて説明しました。これらのライブラリはWiener Chaos問題を処理するために使用され、ランダムウォークを使用して多項式カオスの形を定義します。この多項式カオスは、パラメータの代わりに分布を使用して微分方程式を処理するために使用されます。我々は以下の順序でこれを行いました:
- 第1章でランダムウォークについて説明しました。
- 第2章で微分方程式について説明しました。特にNewtonの冷却則について説明しました。
- 第3章では、Wienerによるカオスを説明し、多項式カオスを適用しました。
5. 結論
この記事が気に入った場合、機械学習についてもっと知りたい場合、または何か質問がある場合は、次のことができます:
A. Linkedinで私をフォローして私のすべてのストーリーを読むことB. ニュースレターを購読する。新しいストーリーについて最新情報を提供し、修正点や疑問点を送信する機会がありますC. リファードメンバーになると、「月の物語の最大数」がなくなり、最新の技術について私(および数千人の他の機械学習およびデータサイエンスのトップライター)が書くものを読むことができます。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles