2017年3月10日金曜日

CourseraのMachine Learningコースを修了しました

最近オンライン学習なるものにハマっております。
巷ではMOOCs(Massive Online Open Cources)なんて呼ばれています。
今回は、Courseraというプラットフォームでスタンフォード大学が提供している
Machine Learningのコースを修了したので、所感を書きたいと思います。


なぜオンライン学習だったか

理由はひとつ。怠け者だったからですね!
動画を通じて授業を受け、
提出期限がある課題やテストを提出する。。。
この学校と自習の間のようなスタイルが、
いつでも勉強できる→いつまでも勉強しない
方程式が成り立っていた私にはぴったりでした。

また、スタンフォード大学の講義を受けられる
これだけでもワクワクしますよね!
それではこのコースの特徴を紹介します!


何を学んだか

詳しくはこちら!
https://www.coursera.org/learn/machine-learning#syllabus

線形回帰
ロジスティック回帰
ニューラルネット
サポートベクターマシーン
k-meansクラスタリング
主成分分析
異常値検知
などなど


受講は無料

受講自体は無料です。
79ドル(2017年1月現在)を支払うことにより、
コース修了時に大学が公式に証明する修了証が発行されます。
なお、修了証は履歴書にも書くことができるようです。

私はスタンフォード大学の修了証が欲しいという、よこしまな理由で
修了証を発行してもらいました!
















動画は日本語の字幕付き

動画には日本語の字幕が付いているため、
英語に自身がない人も大丈夫です。
ただし、プログラミング課題と確認テストの説明は英語です。


直感的な説明

ほぼ全ての数式について直感的な説明をしてくれます。
偏微分などの数学が出ますが、その意味について
図解してくれるので、非常にわかりやすいです。


各動画に理解度チェッククイズ

各動画の内容が理解できているかどうか、
チェッククイズが出題されます。
間違えてもペナルティなどはありません。


毎週課題の提出とテストがある

各単元において、確認テストとプログラミングの課題があります。
確認テストは80%以上で合格。8時間に3回受けることができ、
3回失敗しても、8時間後に再受験ができます。

プログラミングはMatlab/Octaveによる
アルゴリズム実装です。
実装と言っても、半分以上は既にコード化されており、
必要なコードを補う形式です。

Matlabは有償ですが、Octaveは無料なので
私はOctaveで課題を行いました。

基本的な操作は講義に含まれていますし、
言語体系がシンプルなので、使用経験がなかった
私でも問題なくこなすことができました。


所感

「データをどのように学習するか」についての説明は、
今まで私が聞いた(見た)中で一番わかりやすかったです。
このレベルの講義が無料で受講のは、
ある意味革命的と感じるほどです。

今後、自動翻訳の精度がさらに向上すれば、
言語や地域などの障壁を越えて、
教育機会が均等に近づくのではないでしょうか。

今後はUdacityのMachine Learning Engineer Nanodegreeを受講する予定です。
https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009

最先端の教育を、国境を越えて提供してくれる方々に感謝!

データの抽出条件をIF文のように利用する方法

今回は主にレポーティングツールを利用する際に直面する問題について
対処法の一例をご紹介したいと思います。


抽出条件を変えるだけで複数のプログラム、レポートをまとめる事ができるが、
環境や条件などの理由から、SASのマクロ機能やストアドプロシージャなどが利用できない!
というケースが意外とよくあります。

・使用するレポーティングツールでは、ストアドプロシージャが使用できない。
・SASのマクロを使える人がいないため、今後のメンテナンスを考えて使わないでください。

といったケースが、経験上ありました。



例えば、以下のようなケースが該当します。

店舗を指定して売上を出力するレポートがあります。
そのレポートには以下の抽出条件があります。

    where TENPO = "店舗"
        and YYYYMM = "年月"
※斜体は実行時に入力するパラメータとします。

店舗の条件を削除すれば、全ての店舗情報が取得できる!と考えることができます。
実は、ここで以下の問題が起きます。

  SASのマクロやストアドプロシージャを利用せず、上記の抽出を行わないようにしてください。
  条件には外部からパラメータとして、任意の数字文字が与えられるとします。
  また、データにはあらかじめ全店を集計したレコードは存在しないとします。

難しく書きました。
この問題はSASのマクロを利用すれば以下のように簡単にかけます。

  ・全店か、支店の条件かを判断するフラグ(&ZENTEN)を用意して
    以下のようなプログラムを記載すれば対処できます。

  where
    %if(&ZENTEN = 0) %then %do;
      TENPO = "店舗" and
    %end;
  YYYYMM = "年月"


今回の問題は、マクロを使用せずに行ってください。というものです。
ストアドプロシージャ、SASのマクロ機能が利用できれば簡単に回避できる問題も
利用できなくなるだけで意外と頭を悩ませるものです。


回答例
  ・全店か、支店の条件かを判断するフラグを用意して、下記のようなプログラムを記載します。

where
  ( (全店フラグ = 1                               ) or
    (全店フラグ = 0 and TENPO = "店舗") ) and
  YYYYMM = "年月"

全店フラグが1の場合、全店を取得する場合は店舗の条件を無視したい。
逆に全店フラグが0の場合、店舗を取得する場合は店舗の条件を適応したい。
その為上記のような記載方法になっています。

・全店フラグに1を入れて実行した場合、実行される場合の条件式は以下のようになります。

  ( (1 = 1                               ) or
    (1 = 0 and TENPO = "店舗") )

つまり

  ( (真                               ) or    真の条件のみなので、こちらは適応されます。
    (偽 and TENPO = "店舗") )     偽かつ店舗条件なので、こちらは適応されません。

その為、店舗の条件を無視することができました。


・全店フラグに0を入れて実行した場合、実行される場合の条件式は以下のようになります。

  ( (0 = 1                               ) or
    (0 = 0 and TENPO = "店舗") )

つまり

  ( (偽                               ) or    偽の条件のみなので、こちらは適応されません。
    (真 and TENPO = "店舗") )     真かつ店舗条件なので、こちらは適応されます。

その為、店舗の条件を適応することができました。


上記の書き方をすれば、SASのマクロや、ストアドプロシージャを利用しなくても、
IF文のように利用することができます。
どうしても困ったときの対処方法としていかがでしょうか。

ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...