私は edX というサイトでデータサイエンスの講義(MITx:6.00.2x) を受けています。 いま、この講義の半分弱を受け終わりました。
最初、「MITのデータサイエンスの授業は少し難しい」と感じましたが、 慣れてきたら、意外とすいすい進みました。
7月中にデータサイエンスの講義を受け終わるのを目標にしています。
今まで習ったこと
大雑把に言うと、下のような事を学習しました。
- その1
- 最適化問題とナップサック問題
- 決定木と動的計画法
- グラフ問題
- 問題集1
- その2
- 確率論的思考
- ランダムウォーク
- 問題集2
これらの問題をPythonプログラムに書いてシミュレーションしました。
各単元の一番最後の講義には、lab(実験室)のページがあります。 Javascriptで書かれた面白いプログラムがそこで紹介されていました。
ランダムウォークとは
例えば、 ランダムウォーク (random walk) を可視化したプログラムが紹介されていました。 ランダムウォークとは、ランダムにいろんな方向に動く物です。 左に行ったり、右に行ったり、上に行ったり、下に行ったり、斜めに行ったり、・・・。
講義の復習も兼ねて、タートルグラフィックスを使い ランダムウォークするPythonプログラム(簡易版)を作りました。
ボールが1000回くらいランダムに移動したら、上の図のようになります。
labで紹介されてたプログラムは、もう少し手が混んでいます。
オブジェクト指向的なプログラミングに慣れたのは、MITの授業のおかげ
私がオブジェクト指向的なプログラミングに慣れたのは、MITの授業を受けたおかげです。 何度もオブジェクト指向の演習問題を解きましたからね。
データサイエンスの授業でも、当然のようにオブジェクト指向的なプログラミングをしました。 最近、オブジェクト指向的にプログラムを書いたほうが面白い事に気づきました。
Animalクラス という 「抽象的なクラス」を定義して、 その「継承クラス」として Catクラス, Rabittクラス, Dogクラスなどの「具体的なクラス」を定義して遊んで見てください。
私はそのように生物の設計図(クラス)を書いていると、まるで、自分が神になったのかと錯覚しそうになりました。 何かを設計するのは、楽しい事ですね。
私はプログラミングをするとき、できるだけクラスを作ろうと思います。
タートルグラフィックスはオブジェクト指向的なプログラムを書く練習に最適な気がします。 Turtleクラスを継承して独自の「Penクラス」や「移動物体のクラス」を定義してみてください。 結構たのしいです。
Pythonのチュートリアルを見て、クラスの作り方をなんとなく知っていても、 プログラムの細かい違いを理解してなかったら、どこかでつまずきやすい気がします。
MITは、つまづきやすい点を演習問題として、出してたぽいです。 そういうのをデータとして蓄積したら、学習効率の高い教材を作れそうですね。
グラフ理論の問題を解いてるとき、うっかり1単語を読み忘れて…
子供のころ数学のテストで、 重要なただし書きを読み忘れて、100点のつもりが95点になった経験があると思います。 私はよくありました。
大人になると、そういう経験をあまりしなくなりましたが、 英語で新しいことを学習したら、それと似たような事がたまに起こります。
これはグラフ理論の演習問題を解いているときの話です。 unwieghted graph(重みのないグラフ) と仮定されているのに、 勝手に、重みのあるグラフを考えていた事もありました。
私の英語脳はまだ子供のままのようです。 英文を読むのが遅かったり、語彙が少なかったりすると、どうしても近視眼的になる気がします。
頭のCPUの稼働率が高くなり、頭がフリーズした結果、見落としが発生するのでしょう。 でも、読む速さを速くして、かつ語彙を増やすようにすれば、そのうち慣れる気がします。
グラフ理論とは
ちなみに、 グラフ理論 とは、バスや電車の路線図みたいな図を考える学問です。
例えば、駅と駅の間を移動するのに重み(距離や時間など)を定義する事ができます。 すると、最短経路や最短時間を考える事ができます。
もちろん、手計算ではなくて、プログラムを作って、グラフ問題の最短経路を求めました。 最長経路を求めるのも面白そうですよね。(クリティカルパスっていうやつだと思います。)
講義の中で、 深さ優先探索 (Depth-first search)、 幅優先探索 (breadth first search) という探索方法を学習しました。
前半の講義の中で、難しさのピークはグラフ理論だったかもしれません。
さて、1,2日、復習をしたあと、中間テストを受けます。
0 件のコメント:
コメントを投稿
投稿されたコメントは承認後に公開されます。