u++の備忘録

東大・松尾研の社会人向けデータサイエンティスト育成講座を修了した

昨年11月から受講していた、東大の社会人向けデータサイエンティスト育成講座を修了しました。

東京大学グローバル消費インテリジェンス寄付講座:第2期 Data Science Online Course
http://gci.t.u-tokyo.ac.jp/dsonline/

講座の概要

講座のHPより抜粋。

・大量のデータを自由自在に解析・分析し、隠れた関係性を発見する。そんなスキルを身につけた「データサイエンティスト」に対する需要は、工学分野だけならず、医療・経済・経営・ライフサイエンスなど非常に多くの分野で高まる一方です。
・本コースでは、あらゆる分野で武器になるデータの解析・分析スキルのコアとなる機械学習およびビッグデータを扱う技術、分析結果を効果的に可視化する技術の基盤を網羅的に身につけ、一人前のデータサイエンティストとして活躍する入り口に立つことを目指します。

受講の仕組み

  • 全14回の講義+最終課題の構成
  • 毎週月曜日に講義資料が公開され、各自が講義資料を読んで各回の課題に取り組む
    • 締切:公開から1週間
    • 受講時間の目安:1回4時間(実際は最大でも1時間程度しかかかりませんでした)
  • 受講料無料、定員120人(エントリーシートGithub・ブログなどで選抜)
    • 今回は約800人の応募があったそうです
  • ブラウザ上からアクセス可能なフルスタックのLinux+Python開発環境が提供されました

カリキュラム

第1回(11/6):データサイエンティスト講座概要とPythonの基礎
第2回(11/13): Numpy、Scipy、Pandas、Matplotlibの基礎
第3回(11/20):記述統計学と単回帰分析
第4回(11/27):確率と統計の基礎
第5回(12/4): Pythonによる科学計算の基礎(NumpyとScipy)
第6回(12/11): Pandasを使ったデータ加工処理
第7回(12/18): Matplotlibを使ったデータ可視化
第8回(12/25):データベースとSQLの基礎
第9回(1/8): データベースの応用(高度なSQL処理と高速化)
第11回(1/15):機械学習の基礎(教師あり学習)
第12回(1/22): 機械学習の基礎(教師なし学習)
第13回(1/29): モデルの検証方法とチューニング方法
第10回(2/5):ドキュメント型DB(MongoDB)
第14回(2/12): データサイエンスティスト中級者への道
※ 都合により第10回が後ろ倒しに

感想

既にPythonを用いたデータ分析経験が多少あったので、学習内容自体はそこまで難易度は高くありませんでした。ただし独学で断片的な知識になってしまっている面もあったので、体系的な知見を蓄積できたという点で、学ぶべきことが多かったと思っています。講義内容が非公開なので、あまり具体的なことには言及できませんが、業務の合間を縫って無事に修了できて良かったです。

決定株分類器のPython実装

『イラストで学ぶ機械学習』のp.93-96を読み、p.96のMATLABサンプルコードを参考に、Pythonで実装した。

bookclub.kodansha.co.jp

f:id:upura:20180304161928p:plain

# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

CLASS_NUM = 2
N = 50
np.random.seed(seed = 32)
x = np.random.randn(N, CLASS_NUM)
y = 2 * (x[:,0] > x[:,1]) - 1

if __name__ == "__main__":
    d = int(np.ceil(np.random.rand() * CLASS_NUM)) - 1
    xs = np.sort(x[:,d])
    xi = np.argsort(x[:,d])
    el = np.cumsum(y[xi])
    eu = np.cumsum(y[xi[::-1]])
    e = eu[(N-1):0:-1] - el[:(N-1)]
    ei = int(np.max(np.abs(e)))
    c = np.mean(xs[ei:(ei+1)])
    
    if d == 0:
        X0 = np.linspace(-3, 3, N)
        Y0 = X0*0 + c
    else:
        Y0 = np.linspace(-3, 3, N)
        X0 = X0*0 + c        

    plt.xlim(-3, 3)
    plt.ylim(-3, 3)
    plt.plot(x[y==1,0], x[y==1,1], 'bo')
    plt.plot(x[y==-1,0], x[y==-1,1], 'rx')
    plt.plot(X0, Y0, "k-") 
    plt.show()

「ぜん息の子どもと親の負担を減らす」クラウドファンディングに寄付した

先日、朝日新聞デジタルで下記の記事を見かけた。

www.asahi.com

小児ぜん息を持ち、アトピーにも苦しめられた幼少期を送っていた者として、何かの縁だと思い、ちょっとした寄付をした。

しょうもない額(3000円)だったのだが、個人単位で対応している丁寧な返信メールを頂き、今日領収書が届いた。クラウドファンディングも目標達成したらしい。

ほんの飲み会代くらいだが、僕が今健全に楽しくお酒を飲めるのも幼少期の医療のおかげなので、感謝しかない。なんか偽善っぽい投稿だけど、まあ良いか。

f:id:upura:20180303174941p:plain

f:id:upura:20180303175023j:plain

【遊戯王デュエルリンクス】無課金&社会人だけど全キャラのレベルMAX達成した

無料でこんなに楽しめるし、神ゲーだと思う。あと就活生各位には自分の時間が確保できる仕事を強くおすすめしたい。

Why People Think "AI" Can Do Everything?

f:id:upura:20171021073837p:plain

Japanese version:

upura.hatenablog.com

Definition

In this article, "experts" is defined as the following, and "general" as not experts.

  • "experts" are those who have the knowledge that the term "artificial intelligence (AI)" is used as a collective concept of various technical elements.

Background

Recently, I had a lot of chances to talk with someone outside the company. I often talked to them about fashionable "AI", but in almost all cases the talk did not mesh well. I will illustrate and verify the result of my thinking what the reason is.

Misunderstanding that one "AI" is doing everything

The figure at the beginning shows a summary. From the conclusion, I think that there must be a misunderstanding that one "AI" is doing everything.

Researchers / developers (=experts) deliver many deliverables to the world by using various kinds of techniques like speech recognition, image recognition and natural language processing. People (=general) often know them through media such as TV, newspaper and SNS. In that case, labels "artificial intelligence (AI)" are often affixed to arbitrary deliverables. As a result, it seems that all deliverables are understood to be done by (only one) AI.

Due to such misunderstandings, the excessive discourse "human being VS artificial intelligence (AI)" spreads out

Conclusion

Conscious of this composition, I feel that communication with a lot of people will be smooth. There are various ways ... correct the understanding or give up talking seriously.

東大・中川先生の最終講義に行って来た

上のツイートで書いた通り、僕が「機械学習」に惹かれるキッカケとなった中川先生が本年度で定年退職されるとのことで、昨日開催の最終講義に参加してきました。

f:id:upura:20180302080648j:plain

150ページ以上にも及ぶスライドで2時間講演されました。通常の最終講義だと、先生が博士課程辺りからご自身のことを振り返る形式が一般的かと思っていましたが、中川先生は(従来主眼を置いていた自然言語処理には一切触れず)近年の研究テーマである「プライバシー✕機械学習」周辺の議論を怒涛のごとく展開されていたのが印象的でした。上の講義資料は、今後の社会を生きていく中で、たびたび読み返す一冊になる気がしています。

聴講者も、例えば杉山将先生やPFN岡野原副社長など、産官学から錚々たるメンバーが詰めかけていました。100人以上入るであろう工学部2号館1階213講義室が満席で、中川先生のこれまでの幅広い貢献が感じられました。

ふと、当時の講義資料をもう一度読み直そうかなとも思ったり。

統計的機械学習入門 | 中川研究室

[追記 180304]

資料が公開されました。

www.slideshare.net

2変数関数の極小値・極大値・鞍点の求め方

はじめに

先日話題になっていた下記の記事を読んで、大学1年次に勉強した極小値・極大値・鞍点の求め方を復習しようと思った。
qiita.com

例題と解法

下記サイトから引用。
mathtrain.jp

例題

 f(x,y)=x3+2xy+y2−x極値をできる限り求めよ。

解法(方針)

  1. 極値のための必要条件として偏微分=0を解き、候補の組を得る
  2. ヘッセ行列を導出する
  3. 候補の組をヘッセ行列 Hにそれぞれ代入し、形状から極小値・極大値・鞍点のいずれであるかを判定する

(詳細は引用の範囲を超えるので、上記リンクへ)

解説

下記の書籍の「6.3.2 2変数関数の極値問題」から抜粋。

www.shoeisha.co.jp

テイラーの公式を n=3まで展開し、以下を導く(ただしは Hはヘッセ行列、 R(x,y)は剰余項)。

 f(x,y) - f(x_0,y_0) = \frac{1}{2}H
\left(
\begin{array}{rr}
x-x_0 \\
y-y_0 \\
\end{array}
\right)+R(x,y)

ここで、候補の組 (x_0,y_0)をヘッセ行列 Hに代入した際に常に H>0であれば、(剰余項を無視すると)常に f(x,y) - f(x_0,y_0)>0であるため、その組 (x_0,y_0)は極小値である。同様に常に H<0であれば、その組 (x_0,y_0)は極大値である。どちらとも言えなければ、鞍点である。

剰余項を考慮した場合の議論は上の書籍参照。