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

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

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

・数学的プログラミングの本質は数学的性質やパターンをプログラムでテストする事
・この習慣は次世代のデータサイエンティストのためのグッドプラクティスの開発に役立つ
・プログラミング技法の習得と数学的概念の理解を意識して両立させた後に開ける世界

2.数学的プログラミングの本質

以下、www.kdnuggets.comより「Mathematical programming —  Key Habit to Build Up for Advancing Data Science」の意訳です。元記事は2019年5月、Tirthajyoti Sarkarさんによる記事です。

単純なコード、豊かなアイデア
この手法の背後にある理論とコードは非常に単純に見えます。しかし、この単純な演習の背後には、かなり興味深いアイデアがいくつか隠されています。

・関数型プログラミングアプローチ
ダーツ投げプログラムは、分割せずに一連のプログラムとしてコーディングできます。しかし、今回は各タスクを実際の人間の行動を模倣した単純な関数に分割しています。

(1)ダーツを投げる
(2)ダーツの着地座標を調べ、それが円の内側に着地したかどうかを判別する
(3)ダーツ投げ任意の回数繰り返す

大規模なプログラムでも高品質のコードを書くためには、この種のモジュール化されたプログラミングスタイルは有益です。

・創発的振る舞い(創発:個々の性質を単純に総和した以上の性質が、全体として現れる現象)
このコードのどこにも、円または円の性質を含む式は使用されていません。どういうわけか、piの値はボードにランダムにたくさんのダーツを投げて端数を計算するという集団的な行動から生まれます。

・頻度主義者による確率の定義
確率の定義には2つの広いカテゴリーと、2つの激しいライバル陣営が存在します。ベイズ統計学を信奉するベイジアン(Bayesian)陣営 vs 頻度論を信奉する頻度主義者(Frequentist)陣営です。

頻度主義者として考え、確率をイベントの頻度として(ランダム試行の総数の割合として)定義するのは簡単です。このコーディング演習では、確率のこの特定の概念が、ランダム試行を何度も繰り返すことによってどのように現れるかを見ることができます。

訳注:ベイズ統計学は迷惑メール判定処理に使われる事で有名な手法です。例えば「普通のメール」と「『出会い』や『激安」などの単語が文中に含まれているメール」では後者の方が迷惑メールの確率が高いと考えられますが、ベイズ統計ではこういった主観的な情報を確率の計算に組み込む事ができます。

・確率シミュレーション
ダーツを投げる関数は乱数発生器を使用しています。現在、コンピュータで生成された乱数は、完全な乱数ではありませんが、実用的な目的のためには、ほぼ乱数と見なすことができます。

このプログラミング演習では、Pythonのrandomモジュールの乱数生成関数を使用しました。この種のランダム化手法の使用は確率的シミュレーションの中心となる考えです。これはデータサイエンスの実践の場で使用される強力な方法です。

・シミュレーションと視覚化を繰り返して主張をテストする
多くの場合、データサイエンスでは、確率過程と確率モデルを扱います。これらは、多数のシミュレーション/実験に基づいてテストする必要があります。従って、それらを厳密ではなく近似的に考え、データモデルまたは科学的主張の妥当性を統計的に正しい方法でテストする事が不可欠です。

まとめ(そして読者への挑戦)
数学的プログラミングの習慣を身に付けることが何を意味するのかを説明しました。本質的には、プログラミングの観点から、あなたが心の中で思いついた数学的性質やデータパターンをテストする事です。この単純な習慣は、次世代のデータサイエンティストのためのグッドプラクティスの開発に役立ちます。実例として、単純な幾何学的恒等式、確率的シミュレーションの概念、および頻度主義者による確率の定義を用いて実証しました。

もっと他の課題に挑戦したいなら下記課題に挑戦してみてください。

「ランダムウォークイベントをシミュレートしてpiを計算できますか?」

この楽しい演習のコードをフォークしたい場合は、「tirthajyoti/Stats-Maths-with-Python」のリポジトリをフォークしてください。

ご質問やご意見がありましたら、お問い合わせください。また、作者のGitHubリポジトリでPython、R、またはMATLABの他の楽しいコードスニペットと機械学習リソースをチェックすることもできます。私と同じように、機械学習やデータサイエンスに情熱を注いでいる場合は、LinkedInで繋がりに私を追加するか、Twitterでフォローしてください。

Tirthajyoti Sarkarは、Semiconductorのシニアプリンシパルエンジニアで、ディープラーニング/機械学習ベースの設計自動化プロジェクトに取り組んでいます。

3.数学的プログラミング:データサイエンス能力を進化させるための大事な習慣(3/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