フリーランチ食べたい

Python/機械学習/データ解析/ソフトウェア開発などなど

【Coursera】 実践的な機械学習の知識が得られる「How to Win a Data Science Competition」「Bayesian Methods for Machine Learning」がオススメ

f:id:mergyi:20190114152007p:plain

業務で機械学習する方にオススメなCourseraの2コース

オンライン学習サービスのCourseraで下の2つのコースを去年末から受講しており、最終課題に少し時間がかかってしまったのですが、無事どちらも修了することができました。

せっかく受けたので、どんなコースだったか、何がオススメかを簡単に書こうと思います。

受けたコース1: How to Win a Data Science Competition: Learn from Top Kagglers

Course Link

Kagglerから実践的な機械学習のテクニックを学ぶコースです。rebuild.fmでhigeponさんが受講した話をしているので、興味ある方はぜひこちらも聞いてみることをオススメします。

rebuild.fm

機械学習の数学的な面やアルゴリズムではなく、どうやって精度の高いモデルを作るか、どうやってCompetitionで勝つか、というかなり実践的な内容になっており、他のよくある機械学習コースでは学べないことが学べると思います。

注意点としては、既に機械学習の基本的なモデルやメトリクスなどについて知識があることが前提になっているので、そうでない方は本で勉強したり同じくCourseraのMachine Learningコースを受講することをオススメします。

オススメポイント: 講師がKaggle Master/GrandMaster揃い

このコースのオススメは講師が実際にKaggleで活躍されている方ばかりということでしょう。「普段自分がどうやってCompetitionに望んでいるのか」「どういう点で苦労して工夫したのか」を伝授してもらえます。

f:id:mergyi:20190114154957p:plain

Dmitry Ulyanov | Kaggle

f:id:mergyi:20190114154938p:plain

Alexander Guschin | Kaggle

f:id:mergyi:20190114155014p:plain

Mikhail Trofimov | Kaggle

他にも講師の方はいますがメインとしてはこの3人が教えてくれたと思います。

内容

各週の内容を簡単にまとめたいと思います。

  • Week1: 機械学習のモデルの種類やそれぞれの特徴について簡単にウォークスルー/復習
  • Week2: EDA/Validation/Data Leakagesについて
    • Data LeakagesについてはKaggleではとても重要な知識で、かつ自分でモデルを構築する際のValidation時にもとても役に立ちますが、Data Leakagesについて書かれている本などは自分は読んだことがなく、このコースで詳しくしれて良かったです。
  • Week3: Metrics最適化/Mean Encoding
    • Mean EncodingもData Leakagesと同じく機械学習の実装ではかなり大事な考え方なのですが、意外と解説されている内容が多くなく、このコースでは正しいValidation方法も合わせて教えてくれます。
  • Week4: Hyperparameter最適化/Matrix factorizations/t-SNE/Ensembling
    • EnsemblingではBagging/Boosting/Stackingに関して実装も交えての解説があります。
  • Week5: 実際のCompetitionから学ぶ/最終課題
    • 最後の週のWeek5は内容は多くなく最終課題に時間を割くよう想定されています。
  • 最終課題
    • 最終課題は実際のKaggle CompetitionにSubmitしてそのレポートを提出するものです。
    • ポイントはピアレビューがあり、受講者同士で採点を行います。
    • 対象のCompetition: Predict Future Sales | Kaggle
      • このCourse専用に作られたものです。

受けたコース2: Bayesian Methods for Machine Learning

こちらのコースはベイズ統計学機械学習への応用を理論的/実践的に勉強できるコースです。

オススメポイント: 数式とコードの両面から理解できる

このコースのオススメは1つのテーマについて数式とコードの両方で勉強できることだと思います。 Step by Stepでアルゴリズムを教えてもらったあとにその週の課題で実装するので、触って理解することができます。

f:id:mergyi:20190114163134p:plain
透明なホワイトボード?で解説してくれるのがかっこいい

下が課題で提出するコードの一部です。( YOUR CODE HERE) に答えを入れます。

def E_step(X, pi, mu, sigma):
    """
    Performs E-step on GMM model
    Each input is numpy array:
    X: (N x d), data points
    pi: (C), mixture component weights 
    mu: (C x d), mixture component means
    sigma: (C x d x d), mixture component covariance matrices
    
    Returns:
    gamma: (N x C), probabilities of clusters for objects
    """
    N = X.shape[0] # number of objects
    C = pi.shape[0] # number of clusters
    d = mu.shape[1] # dimension of each object
    gamma = np.zeros((N, C)) # distribution q(T)

    ### YOUR CODE HERE
    
    return gamma

この例だとE-Stepで何をしているか、を数式で理解し、その後E-Stepを自分で実装することになります。人によると思いますが、自分は、自分の手で実際に動かさないと腹落ちしない性格なのでこの課題がとてもありがたかったです。

内容

内容を簡単にまとめます。

  • Week1: ベイズ統計学の基礎/共役事前分布
  • Week2: EMアルゴリズム
  • Week3: 変分推論/LDA
  • Week4: MCMC
  • Week5: VAE(Variational Autoencoder)/最終課題
    • こちらの最終課題はLearn from Top Kagglersほど重くはなく通常の課題がピアレビューになったような形です。

Coursera全体として

ここからはこのコースに限らないのですが、Courseraのオススメポイントを書きたいと思います。

オススメポイント1 毎週課題が出る

他のオンライン学習サービスと比べてCourseraが良いと思うのは、毎週課題が出ることです。 「デールの円錐」という学習の分類図がありますが、この図が示すとおり、「見て聞く」のと「やってみる」のとでは大きな理解の開きがあります。これは完全に私見ですが、もしオンラインで勉強したいものがあるときは、絶対に課題のあるオンライン学習サービスを利用したほうが良いです。それもクイズのようなものだけではなくコードを提出して評価してもらえるものが良いと思います。

https://camo.qiitausercontent.com/5dacb9b9bde5e8eeb07f85430de2943f4915c501/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137333939362f63343164616236372d666431382d643133352d323562302d3730363330306361306364342e706e67 「エンジニアとしてこの先生きのこるために」より引用

Courseraに関しては、JupyterHubを使って環境構築を何もせずにNotebook上で課題を解くことができ、またそのまま提出できるので本当によくできているなと思います。(ちなみにローカルでも課題は解く&提出することができます。)

f:id:mergyi:20190114164424p:plain

オススメポイント2 達成した証明として修了証がもらえる

2つ目のオススメポイントは修了証がもらえます。些細と言えば些細なんですが、自分はアイテムを集めるようなゲーム感覚で受講していて、結構楽しいです。

f:id:mergyi:20190114152346p:plain

修了証はLinkedinのプロフィールなどに追加可能で、自分が今まで修了したコースは全て追加しています。 Courseraを受け始めて1年半くらいですが、10個修了したようです。これの影響かはわかりませんが、LinkedInから結構有名な企業からオファーが来たりします。

https://www.linkedin.com/in/yutaro-ikeda-8b1015147/

f:id:mergyi:20190114151831p:plain
linkedinのプロフィール

また、自分はForkwell Portfolioの「Certification 資格」にも追加しています。ポートフォリオサイトとしてはメインで使っていますね。LinkedInと違ってうまく連携されているわけではなくフリーテキストに無理やり入れている感じなので、こういうオンライン学習サービスの修了証に対応してくれたらいいなーと密かに願っています。笑

portfolio.forkwell.com

お金は?時間は?

ここまで良いことだけ書いてきましたが、コストについても書いておこうと思います。

料金

上記の2つのコースはどちらも、Advanced Machine LearningというSpecialization(コースのまとまり)に所属しており、Advanced Machine Learningが$50くらい/monthで受けられます。自分は2コース合わせて3ヶ月かかったので合計16000円くらいでした。元が取れるくらいには勉強できたと思っています。

www.coursera.org

時間

大体ですが、1週間で動画視聴&クイズ2時間、課題2時間で合計4時間くらいはかかったと思います。 最終課題はさらに時間がかかっているので、多分2コース合わせて合計60時間くらいですね。 土日に進めることを考えれば無理な時間ではないとは思いますが、ある程度の覚悟は必要です。

受けるなら誰かと何人かで参加がいいかも

higeponさんもTwitterで言っていたのですが、難易度は正直難しかったです。 友達と知り合いと受けた方が良いと思います。

言語

言語は英語オンリーです。字幕もありますし、コードや図があるので、自分のような英語がそれほど得意でない人間でもなんとか理解できましたが、全く英語に自身が無い方はやめておいた方がいいかもしれません。

最後に

  • どちらのコースも簡単ではなくコストもかかりましたが、それに見合うだけの学習ができました。
  • また、終わったときの達成感も今までのオンライン学習コースの中で一番大きかったです。
  • 何か勉強する題材を探している方はぜひチェックしてみてください。