数学的プログラミング:データサイエンス能力を進化させるための大事な習慣(1/3)

入門/解説

1.数学的プログラミング:データサイエンス能力を進化させるための大事な習慣(1/3)まとめ

・数学的プログラミングとは一連の計算タスクを含む数学的概念をコード化する習慣を身につける事
・これを見に付けると発見した数学的特性やアイデアを簡単なコードを書いて素早く検証できるようになる
・数学的パターンを発見する能力と簡単なコードで素早く検証する能力は次世代データサイエンスに重要

2.数学的プログラミングとは?

以下、www.kdnuggets.comより「Mathematical programming —  Key Habit to Build Up for Advancing Data Science」の意訳です。元記事は2019年5月、Tirthajyoti Sarkarさんによる記事です。原文はmathematical programmingで、日本語では数理計画と訳される事が多いのですが、本稿では数学的な考えをプログラミングに持ち込む事の大切さを説いているので、数学的プログラミングと訳しています。確かにこの習慣的が身に付いていると、本来は必要のなかった事を知らずに頑張って実装してしまうような事がなくなるのだろうな、と思います。

以下では、ダーツをランダムに投げる実験をシミュレートすることで、近似的に円周率を計算する方法を示します。これは、数学的プログラミング習慣を身に着けるための小さなステップで、新進気鋭のデータサイエンティストのレパートリーの一つとして重要なスキルであるべきです。

前書き
数学的プログラミング手法の本質は、数学的概念、特に一連の計算タスクを体系的に含んでいる概念をコード化する習慣を身につける事です。

この種のプログラミング習慣は、分析およびデータサイエンスのキャリアにとって非常に役立ちます。データサイエンスは多種多様な数値パターンに毎日遭遇し、それを迅速に理解することが期待されている業務です。数学的プログラミングの能力は、数値解析を行う試作システムを迅速に作成するために役立ちます。試作システムの構築は、データモデルを構築する際の最初のステップです。

いくつかの例
さて、数学的プログラミングとはどういう意味でしょうか?

NumPyやSciPyのようなさまざまなPythonライブラリに既に組み込まれ、最適化された数学関数を使う事とは異なるのでしょうか?

はい、既に数学的関数が用意されているとしても、あなたはゼロから数値計算タスクをコーディングし、数学的プログラミングの習慣を身に着ける事を止めるべきではありません。

以下は雑多な例です。

・ボードにランダムにダーツを投げるシミュレーションを行い、モンテカルロ実験によって円周率を計算します。

・複素数を扱うための全てのメソッドを組み込んだ関数またはクラスを構築する
(Pythonには既にそのようなモジュールがありますが、それを真似る事ができますか?)

・将来の経済環境を複数予測し、、各株式に分散投資した場合の平均収益率を計算する

・ランダムウォークイベントをシミュレートしてグラフ化する

・2つのボールの衝突をシミュレートし、ランダムな始点と方向に従うそれらの軌道を計算する

ご覧のとおり、これらの例は非常に興味深いものであり、現実世界の問題に近いものになります。それゆえ、このテクニックは、離散的または確率的シミュレーションのためのコードを書く能力にも繋がります。

あなたは、インターネット上でいくつかの数学的特性やアイデアを拾い読みした時に大好きなプログラミング言語で簡単なコードを書いて概念を素早く検証できるようになる事を切望しますか?

もし答えがYesなら、おめでとうございます! あなたには数学的プログラミング習慣を習得する素養があります。そしてこの習慣は、あなたが満足のいくデータサイエンスのキャリアを追求する旅路において、あなたを遠くまで連れて行くでしょう。

なぜ数学的プログラミングはデータサイエンスにとって重要なスキルなのでしょうか?

データサイエンスの実践には、数値と数値解析に非常に親しむ事が必要です。しかし、これは複雑な式や方程式の暗記を意味するのではありません。

数字のパターンを発見する能力と簡単なコードを書く事によってアイデアを素早くテストする能力は、新進気鋭のデータサイエンティストには難しい事ではありません。

これは、電子機器エンジニアが実験装置とオートメーションスクリプトを使って、電気信号の隠れたパターンを捉える事と同じことです。

または、スライド上に細胞の断面サンプルを作成し、自分のアイデアをテストするためのデータを収集するために顕微鏡下で自動テストをすばやく実行する能力に長けている若い生物学者を考えてみましょう。

重要な事は、大規模なデータサイエンス業務は、多数の部署にまたがった異なったデータ/業務で構成されている可能性があるということです。(訳注:つまり、常に気軽に検証できるわけではない)

データ収集、テキスト処理、ファイル処理、データベース処理、機械学習および統計モデリング、視覚化、プレゼンテーションなど。

あなたのアイデアを即興で確かめる実験は、確かなスキルに裏付けされたな数学的プログラミング能力以上のものを必要としません。

数学的プログラミングのスキルを伸ばすために必要な全ての必要な要素を正確に特定することは困難ですが、一般的に必要となるスキルのいくつかは、以下です。

・モジュール化プログラミングの習慣

・様々なランダム化手法に関する明確な見解

・線形代数、微積分学、および離散数学の基本的なトピックを読んで理解する能力

・基本的な記述統計および推論統計に精通している事

・離散的および連続的な最適化手法(線形計画法など)に関する基本的な考え方

・好みのプログラミング言語の中核的な数学的ライブラリと関数の基礎的な熟練

medium.comに投稿した「Essential Math for Data Science」では、データサイエンスの基礎として実務的な数学として何を学ぶべきかについて解説しています。

本記事では、ボードにランダムにダーツを投げた結果にモンテカルロ法を使用してpiの近似値を計算する、非常に単純な例を説明することによって、数学的プログラミングを説明します。

(たくさんの)ダーツを投げて円周率を計算する
これは、ボードにダーツを投げるランダムなプロセスをシミュレートすることによって、piの値を計算するための楽しい方法です。

洗練された数学的な分析や公式は使用しませんが、純粋に物理的(しかし確率的)なプロセスのエミュレーションからpiの近似値を計算しようとします。

このテクニックは、モンテカルロ法の主要な使い道になります。その基本概念は、ランダムなプロセスをエミュレートすることです。ランダムプロセスは、何度も繰り返されると、数学的に重要な値の近似値を生成する事ができます。

正方形のダーツボードを想像してみてください。

それから、ダーツボードの中には円が書かれており、円は全ての辺に接触しています。

そして、あなたはダーツボードに向かってダーツを投げます。無作為に、つまり、円の内側に刺さるダーツと、外側に刺さるダーツがあります。しかし、ダーツがダーツボードに刺さらずに落ちてしまう事はないと仮定します。

あなたのダーツ投げが終わった後、あなたは投げられたダーツの総数のうち、円の内側に刺さったダーツの割合を数えます。その数に4を掛けます。その結果、得られる数字はpiになります。あるいは、もし多数のダーツを投げたのであれば、piの近似値となります。

 

3.数学的プログラミング:データサイエンス能力を進化させるための大事な習慣(1/3)まとめ

1)www.kdnuggets.com
Mathematical programming —  Key Habit to Build Up for Advancing Data Science

2)medium.com
Essential Math for Data Science

3)github.com
tirthajyoti/Stats-Maths-with-Python

 

コメント

タイトルとURLをコピーしました