【データサイエンティスト養成講座】第2回問題(モンテカルロ法による円周率計算)
こんにちは。
「GCIデータサイエンティスト育成講座演習コンテンツ 公開ページ」の第2回の問題を解いたのでその回答をまとめて置きたいと思います。 GCIデータサイエンティス育成講座の簡単な概要はこちらから。
土日は1日1章くらいのペースで頑張っていきたいものです。
第2回問題を解いてみた
問題概要
モンテカルロ法を用いて円周率の算出を行う。以上。 はい、非常にシンプルですね。
モンテカルロ法というのは、パソコンの力を使ってランダムで大量に点をプロットし、そのうち幾つが条件をみたすか、というふうにごり押しをして割合を求める方法だと解釈しています。(雑) 今回の問題のケースではそこそこの精度が得られましたが、あくまで厳密な定義ではなく推計値にとどまらない手法です。 しかし、そもそも機械学習は完璧な理論ではなく、経験を元にそれらしい値を算出することが目的となっているため、このモンテカルロ法の考え方はかなり近い考え方だと思ってます。
プログラムの考え方
考え方自体はほぼ講義資料に書いてあるため、正直ほとんど書くことはないのですが、自分の勉強のためにも記載しておきます。
- 0~1の乱数をランダムに生成(x,yの2軸を用いるため2つ生成)※計算資源節約のため、円の右上だけ使用
- 上記が半径1の円に含まれているか、含まれていないかを算出し、リストに格納 高校生ぶりに円の方程式を思い出すと、原点からの距離が1以下であればokと…
- 半径1の円に含まれている点の割合を導出
- 半径1の1/4の円の面積と長さ1の長方形の面積の比はπ/4:1となる(講義資料より引用)ため、4倍して円周率を導出
実際書いたコード
最後の円周率のところ×4じゃなくて÷4をしてしばらく悩んでいたのは内緒です。