Posted on

カンファレンスを最大限に楽しむ方法

Talk Python To Me という PodCast を聞いている中で興味深い話があった。

Talk Python To Me Podcast

Talk Python To Me is a podcast for developers who are passionate about Python. Learn about the language and related technologies.

Episode #161: Django 2.0 の 00:58:20〜のトーク内容で「カンファレンスを最大限に楽しむ方法は?」という質問に対する回答

まず第一に参加できるなら参加しましょう。もし US や北アメリカのカンファレンスに行けない場合は、ローカルで開催されているカンファレンスに参加しましょう。そしてもし参加したら友達とくつろぐのはやめて新しい友だちをつくりましょう。自分の視野を広げるために参加しているのだから。それが簡単でないことはわかります。でもそうすることで新しいアイデアやコネクションをつくることができて新しい視野がひろがります。そして、それができた場合でも自分の知識をみせびらかすようなことはやめて、そのかわりに質問をしましょう。そして私は、カンファレンスに参加してハイヤリングをした立場として分かりますが、知識があるひとよりもむしろ、新しいことを見つけ出して熱心に学ぼうとしている人を雇おうとします。
以前にカンファレンスに参加したことがある人もそうでない人も、カンファレンスのボランティアをやるのもよいです。ボランティアをする中で関係ができあがり、新しいコネクションができます。私はボランティアをすることで自分のキャリアの中で大きな変化を得ることができ、とても良い人で出会うきっかけになりました。恥ずかしいとか思うかもしれませんが、そんなことは誰も気にしてはいません。自分もとても恥ずかしいことをした経験があるけど誰も覚えてはいませんよ。
ソース:https://talkpython.fm/episodes/transcript/161/django-2.0

内容は意訳してる箇所や多少省略してる箇所があるので詳しく知りたい方はソースを見てください。この内容はトークする側ではなく単純に参加する側へ向けた話。
そしてある意味当たり前のような話ではある。ただ、恥ずかしがるとかそういった考えはなんとなく日本的もしくはアジア的なところがあるのかなと思っていたので、アメリカでもこういったことが話されてるんだなっていうところに興味が持てた内容でした。

話し手はこの方

Daniel Roy Greenfeld (@pydanny) | Twitter

The latest Tweets from Daniel Roy Greenfeld (@pydanny). Co-Author Two Scoops of Django (https://t.co/h98NETIALQ), open source coder, husband of @audreyr, former NASA coder. Los Angeles, CA

Posted on

機械学習におけるアルゴリズム

前回のパーセプトロンに引き続きこの勉強会用に仕事ではじめる機械学習を元に機械学習におけるアルゴリズムをまとめる。

AIPy (アイパイ) ハンズオン #3 (2018/07/19 19:30〜)

この勉強会について しばらくは機械学習に特化した勉強会になります。仕事で機械学習などを活用したいけど何からはじめればよいか分からないような方向けのハンズオン形式の勉強会です。ハ ンズオン形式といいつつまず初めは力を養う為に 仕事ではじめる機械学習 の輪読会からはじめます。この会はみんなで集まって意見を交換したり協力したりしながら一気 …

※不適切な内容である場合はすぐに取り下げます。

そもそもどのアルゴリズムを選ぶべきか

機械学習にはどんな種類があるか

  • 分類(Classification):正解となる離散的なカテゴリ(クラス)と入力データの組み合わせで学習し、未知のデータからクラスを予測する
  • 回帰:正解となる数値と入力データの組み合わせで学習し、未知のデータから連続値を予測する
  • クラスタリング:データを何かしらの基準でグルーピングする
  • 次元削減:高次元のデータを可視化や計算量削減などのために低次元マッピングする
  • その他
    • 推薦:ユーザーが好みそうなアイテムや、閲覧しているアイテムに類似しているアイテムを提示する
    • 異常検知:不審なアクセスなど、普段とは違う挙動を検知する
    • 頻出パターンマイニング:データ中に高頻度に出現するパターンを抽出する
    • 強化学習:囲碁や将棋のような局所的には正解が不明確な環境で、とるべき行動の方針を学習する

アルゴリズムを選定するには以下のフローチャートを参考にするとよい。startからはじめて条件によって分類、回帰、クラスタリング、次元削減のどれを選べばよいかが分かる。

アルゴリズムを選定する、scikit-learnのフローチャート
※その他(推薦、異常検知、頻出パターンマイニング、強化学習)は覗く

参考:scikit-learn algorithm cheat-sheet

分類

  • 教師あり学習の1つ
  • 予測対象はカテゴリなどの離散的な値を予測する
  • メールがスパムかどうかや画像が映っているのがどういった物体かなど
  • クラスの数が2の場合を二値分類、3以上の場合を多値分類という

分類については以下のようなアルゴリズムが存在する

  • パーセプトロン
  • ロジスティック回帰
  • SVM (サポートベクターマシン)
  • ニューラルネットワーク
  • k-NN (k近傍方、k-Nearest Neighbor Method)
  • 決定木、ランダムフォレスト、GBDT (Gradient Boosted Decision Tree)
  • ナイーブベイズ
  • HMM (Hidden Markov Model)

本記事では太字の分類アルゴリズムと回帰(少し)について触れる

ロジスティック回帰

ロジスティック回帰の特徴

  • 出力とは別に、その出力のクラスに所属する確率値が出せる
  • 学習はオンライン学習でもバッチ学習でも可能
  • 予測性能はまずまず、学習速度は早い
  • 過学習を防ぐ為の正則化項が加わっている

特に出力の確率値が出せるという特徴のため、広告のクリック予測にもよく使われている。

実践系の参考記事

ロジスティック回帰の決定境界

  • 決定境界は直線

ロジスティック回帰の仕組み

  • 活性化関数シグモイド関数
  • 損失関数交差エントロピー誤差関数

シグモイド関数

  • 入力が0の時は0.5をとる
  • 値が小さくなるほど0に近づく
  • 値が大きくなる程に1に近づく

シグモイド関数を記述するコード

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

出力yは y= sigmoid(np.dot(w, x)) と表すことが可能で、2値分類時の交差エントロピー誤差関数は、N個のデータに対してyを出力、tを正解ラベル(正しい場合は1、間違っている場合は0とする)、logを底がeの自然対数とすると、次のような書式で表すことができる。

2値分類の時の交差エントロピー誤差関数をコードで書くと以下のようになる

def cross_entropy_error(y, t, eps = 1e-15):
    y_clipped = np.clip(y, eps, 1 - eps)
    return -1 * (sum(t * np.log(y_clipped) + (1- t) * np.log(1 - y_clipped)))

正則化

学習時にペナルティを与えることで境界をなめらかにする(過学習を防ぐ)

SVM (Support Vector Machine)

  • パーセプトロンを拡張したアルゴリズムといわれる

SVMの特徴

  • マージン最大化をすることで、なめらかな超平面を学習できる
  • カーネルと呼ばれる方法を使い、非線形なデータを分離できる
  • 線形カーネルなら次元数の多い疎なデータも学習可能
  • バッチ学習でもオンライン学習でも可能

SVMの決定境界

  • カーネルと呼ばれる方法を使うことで、線形分離可能な問題も非線形分離可能な問題にも適用可能

SVMの仕組み

  • 損失関数はパーセプトロンと同じヒンジ損失
    • 厳密にはパーセプトロンとは横軸の交差の場所が違う

SVMの2つの大きな特徴

マージン最大化

マージンを最大化することで、正則化項と同じように過学習を抑えることができる。マージンの最大化とはマージンが最大になるような超平面の引き方を決めることで既知のデータに対してあそびがうまれる。すなわち、過学習を抑えることができる。

カーネル

線形分離不可能なデータでも、カーネルと呼ばれる関数を使って特徴量を擬似的に追加してデータをより高次元のベクトルにすることで、線形分離可能にする方法
カーネルを使った決定境界の例

ニューラルネットワーク

多層パーセプトロンとお呼ばれ、パーセプトロンを1つのノードとして階層上に重ねたもののこと

ニューラルネットワークの特徴

  • 非線形なデータを分離できる
  • 学習に時間がかかる
  • パラメータの数が多いので、過学習しやすい
  • 重みの初期値に依存して、局所最適解にはまりやすい

ニューラルネットワークの決定境界

  • 直線でない決定境界も取ることが可能

ニューラルネットワークの仕組み

  • softmax関数
  • 活性化関数
    • 近年ではReLU(Rectified Linear Unit)がよく使われている

k-NN

未知の1個のデータが入力された時、そのデータのクラスを近くのk個の既知データの所属するクラスの多数決で決めるという、最近傍探索アルゴリズムの1つ

k-NNの特徴

  • データを1つずつ逐次学習する
  • 基本的に全データとの距離計算をする必要があるため、予測計算に時間がかかる
  • kの数によるがそこそこの予測性能

k-NNの決定境界

  • 直線でない決定境界も取ることが可能

k-NNの仕組み

多く用いられるのは2つの点を結んだ直線の長さであるユークリッド距離だが、あるクラスのデータ郡の平均からの近さでなく、データの散らばる方向をこうりょすることができるマハラノビス距離と呼ばれる距離が用いられることもある
マハラノビス距離

def euclidean_distance(a, b):
    return np.sqrt(sum(x - y)**2 for (x, y) in zip(a, b))

決定木、ランダムフォレスト、GBDT

ツリー型アルゴリズムの代表である

決定木の特徴

  • 学習したモデルを人間が見て解釈しやすい
  • 入力データの正則化がいらない
  • カテゴリ変数やその欠損値(計測漏れなどで値が存在しない)などを入力しても内部で処理してくれる
  • 特定の条件下では過学習しやすい傾向にある
  • 非線形分離可能だが、線形分離可能な問題は不得意
  • クラスごとのデータ数に偏りのあるデータは不得意
  • データの小さな変化に対して結果が大きく変わりやすい
  • 予測性能はまずまず
  • バッチ学習でしか学習できない

決定木の決定境界

決定境界は直線にはならない

決定木の仕組み

教師データから条件式を作り、予測の際には木の根から順番に条件分岐をたどっていき、葉に到達すると予測結果を返すアルゴリズム。不純度と呼ばれる基準を使って、できるかぎり同じクラスがまとまるように条件分岐を学習していく。具体的には情報ゲインジニ係数などの基準を不純度として使い、不純度がさがるようにデータを分割する

線形回帰

教師あり学習の1つで、ある入力データから連続値を予測する。

回帰について各アルゴリズムのおおよその傾向

  • 線形回帰、多項式回帰
  • Lasso回帰、Ridge回帰、Elastic Net
  • 回帰木
  • SVR

それぞれの概要

  • 線形回帰はデータを直線で、多項式回帰は曲線で近似したもの
  • Ridge回帰は学習した重みの2乗を正則化項に、Lasso回帰は学習した重みの絶対値を正則化項に、Elastic Netはその両方を線形回帰に正則化項を追加したもの
  • Lasso回帰やElastic Netは、L1正則化によりいくつかの重みが0になり、特徴を絞り込む性質がある
  • 回帰木は決定木ベースの回帰で、非線形なデータに対してフィッティングできる
  • SVRはSVMベースの回帰で、非線形なデータに対してもフィッティングできる

用語(あとで更新)

  • 活性化関数
    • ステップ関数
    • シグモイド関数
  • 損失関数
    • 交差エントロピー誤差関数

参考記事

Posted on

「PyCon APAC 2018 in Singapore」参加レポートを寄稿した

PyCon APAC 2018 in Singaporeに参加してgihyo.jpさんにてレポートを寄稿した。
今年のレポートはPyCon JPのスタッフと元スタッフメンバーで書いた。カンファレンスのセッションレポートだけでなくカンファレンス参加に関連するコラムも盛り込んでいてめちゃくちゃ読み応えのある内容になったと思う。

Day1レポート

目次

  • Day1
    • PyCon APACとは
    • シンガポールと今年のカンファレンス会場
    • Keynote ~ Tell me your secrets – Privacy in machine learning systems
    • セッション
      • Build a Data-Driven Web App That Everyone Can Use
      • TeaTeaching Computers ABCs: A Quick Intro to Natural Language Processing
      • Better Care and Feeding of Machine Learning Model
    • コラム
      • APACで発表者をしてみて
      • PyCon APACミーティング
    • 終わりに

Day1:プライバシーを機械学習でどう守るか?/機械学習の基礎と応用

こんにちは, taisaです。2018年5月31日(木)~6月2日(土)にかけて行われた「 PyCon APAC 2018 in Singapore 」に参加してきました。本レポートでは最後の2日間に行われたカンファレンスデイの様子やセッション以外の現地滞在の様子などを2回に分けて,当日参加したPyCon JPスタッフや元スタッフのメンバーがお届けします。 PyCon …

Day2レポート

目次

  • Day2
    • keynote
    • セッション
      • Concurrency vs Parallelism
      • Elements of Programming Interviews in Python
      • Streaming data processing pipelines with Apache Beam in Python, naturally!
    • コラム
      • PyCon APACの開催国となったシンガポールについて
      • 海外カンファレンスに参加してみて
      • 2日目の夜について
    • 終わりに

Day2:今すぐ始められる機械学習,”Pythonic”なコードを書くには?

こんにちは, taisaです。第2回となる今回は,「⁠ PyCon APAC 2018 in Singapore 」のカンファレンスデイ2日目の様子をお届けします。⁠キーノート」や「セッション」のレポートの他にも「はじめて海外カンファレンスに参加してみて」や「夜の懇親会について」「⁠シンガポールについて」のコラムもありますので合わせてご覧ください。 (家治亮) 2日目のKeynoteには …

PyCon APACしか参加したことはないけど海外カンファレンスは本当に刺激的でおもしろい。来年が楽しみだし他にも行きたい。

Posted on

2018年 半年の振り返り

2018年も半年を過ぎたので振り返る。

2018年の抱負

今年も去年と同様に2018年の抱負を書く。 2018年の抱負 去年と同様にいろんなことはできないので大目標3つ+サブ目標。これ以外にも細かいものはいくつかあるけど別途まとめる。 CTOとして 機械学習 英会話 サブ目標 引き続きフロントエンド CTOとして …

前置き

自分はあれもこれもできるタイプではないので、1年の抱負のような目標と中長期的な目標をたててそれをたまに見直しつつただこなすだけという方針にしている。やり方は結果的にこうなりたいというのをリスト化して、そこからドリルダウン式で必要なことそれを一つずつクリアしていく感じ。
2018までに立てていた中長期的な目標は、すべての項目をクリアできたので、年初にあらためて書き出してそれをまた同じように実行している。中長期的な目標と1年の目標があって、1年の目標は、主目票、サブ目標、個人活動、プライベートで分けて立てている。

CTOとしての活動

2018年1月からはスタートアップのCTOという立場で新しいスタートを切ることができた。

選択と集中

これは自分にとってもスタートアップにとっても非常に重要。やりたいことが沢山ある中で限られたリソースで如何にやるべきことをやるか。ただ今年の前半は、業務以外に書籍執筆、コミュニティ活動に結構時間を割いたので選択と集中はできなかった。前半で個人活動は一区切りついたので後半は少し抑えて選択と集中をすることにする。

開発速度と品質担保

開発速度と品質担保はフェーズによって全然やり方が違う。0→1のフェーズはとにかくアウトプットして結果を出す必要がある。今は1→10にするフェーズだと思っているのでどう進めるか色々考えた。
この段階を疎かにすると10→100にするフェーズで開発速度や品質に大きくしわ寄せがくるし、一方でやり過ぎると10→100の段階にたどり着けさえしなくなる。なのでバランスをとりながら開発速度と品質が担保できる方法を考えて進めた。どうしても大きく変えなければいけないところとかはあって、既存機能に影響を与えてしまったのは反省点。

チームビルディング

チームビルディングもその時にあったやり方があると思う。去年1年間はスクラムを組んで良さを実感できたけど、今スクラムを組むのは違うと思ってやっていない。ただ、自分がだんだん何やってるのか分からなくなってきたので途中から1人スクラムをはじめた。そして最近、役割だけスクラムっぽい取り組みを入れた体制にした。

新規学習技術は機械学習

去年は、JavaScriptをメインにして活動してある一定の成果が出せたので、今年はかねてから考えていた機械学習をメインにした。そして「AIPyハンズオン勉強会」というのを開催してみんなで一気に学習することにした。
勉強会はこの半年で2回開催できた。これはほんとにやってよかった。次回は7/19に第3回を予定している。こういうのは継続が大事なので続けていきたい。

執筆

年末から書いていた本を無事出版することができた。書籍執筆はすごく面白いのでまた書きたい。

コミュニティ活動

PyCon JP活動

今年もPyCon JPスタッフをやっているけど案の定あまり活動ができていない。それでも前半は時間を見つけて少しやったけどどうしても中途半端になるので後半の活動は抑え気味になると思う。

PyCon APACに参加する

去年に引き続き今年も参加してきた。海外カンファレンスはPyCon APACしか参加したことないけど本当に面白いので機会をつくって他も参加していきたい。今年はgihyoに参加レポート記事を寄稿した。こういったアウトプットができるのもよさの一つ。

英語でコミュニケーションができるように

去年PyCon APACに参加した時と比べると、少しDMM英会話をやったりテック系Podcastを聞いたりしたおかげか、普通に生活する分には英語に対する抵抗感は少し減った。トークについても去年よりは聞き取れた気はするけど、話す人によっては全然聞き取れなかったりするのでなんとも言えない。英語使う機会は今の所ないのでこれからはテック系Podcastを聞くくらいに抑える。テック系PodcastはFull transcriptがあるのでTalk Python To Meをよく聞いている。

ブログ継続

ひとつき2投稿目安だけど半年の時点で9投稿と少し少なめ。

サブ目標

サブ目標は今の所ほぼ未着手。JSの深掘りをする予定。

プライベート

草野球とソフトボールをやる

今年もThe Soulsという草野球チームで野球やってる。今季未だ負け無し。今年は草野球に加えてソフトボールもはじめた。

ハーフマラソンかフルマラソンに出る

4/14にハーフマラソンを走った。フルマラソンは経験あるけどハーフははじめて。数年前にフルマラソン走ったときよりもハーフのタイムは悪かったけどなんとか完走。秋に向けて少しずつ準備する。

楽天バンクと楽天証券を開設したけどそれ以上はまだ何もやっていない。ちなみに楽天証券はマイナンバーの提出が必要。

まとめ

前半のうちに個人活動はきりよくやることができたので後半は事業に注力する。あと今年は飲みに行きまくっていた。それはそれでいろんな業種の人と出会えるから楽しいけど後半は抑える。体調もたまに不安を覚えるので体調管理もちゃんとせねば。