About Me

My photo
Software Engineer at Starburst. Maintainer at Trino. Previously at LINE, Teradata, HPE.

2017-12-10

Machine Learning Book


同僚にオススメされた「仕事ではじめる機械学習」を読み終わりました。今までもいくつか機械学習系の本を読んで来ましたが、図やグラフが豊富で1番わかりやすかったです。

SVM

  • 線形カーネルとRBFカーネルの2つがある
  • RBFカーネルは線形分離不可能なデータも分類できる
  • 損失関数はヒンジ損失関数はを使う
  • マージン最大化により過学習を抑えることができる
  • 線形カーネルはテキストなどの疎データ、RBFカーネルは画像や音声信号などの密なデータによく使われる

ニューラルネットワーク

  • 非線形なデータを分離できる
  • 学習に時間でがかかる
  • パラメータの数が多いので過学習しやすい
  • 出力層の計算した値をsoftmax関数で正規化を行い確率としてみなせることが多い
  • 活性化関数にはReLUがよく使われる
  • 誤差逆伝播で学習する

k-NN

  • kは投票する個数のことを意味している
決定木、ランダムフォレスト、GBDT
  • ランダムフォレストは利用する特徴量の組み合わせをいくつか用意して性能が良かった学習器複数の予測結果を多数決で統合する
  • GBDTはサンプリングしたデータに対して直列的に浅い木を学習していく
  • 複数の学習結果を組み合わせる手法をアンサンブル学習という
次元削減のための手法は主成分分析やt-SNEが有名

異常検知にはOne Class SVMがある

分類の評価 正解率、適合率、再現率、F値

  • 正解率 正解した数/予測した全データ数
  • 適合率 実際に当たっている数/予測した数
  • 再現率 予測した正解/全データの正解
  • F値 適合率と再現率の調和平均

回帰の評価には平均二乗誤差を使用する

ヒンジ損失

  • 決定境界ギリギリで正解しているデータにもペナルティを与え、マージンを持たせている

配布されているデータのドメインが実際に使うものと異なる場合は、半教師あり学習や転移学習といった手法を用いることができる

A/Aテスト ランダム抽出により均質な2群が得られるはずだが、それを確認し、差がなければ片方に介入する

Eコマースにおける推薦システムの応用シーン

  • 概要推薦 今週の人気商品のような統計情報ベースのおすすめ。利用し始めやたまに利用するユーザーに効果的
  • 利用者評価 ユーザーが︎をつけた評価やコメントを利用して統計情報として見せたりする
  • 通知サービス
  • 関連アイテム評価
  • パーソナライゼーション

人生に何回もないようなイベントではデータが集まりづらいため、PVなど他の指標で代用するなどの仕組みが必要

強調フィルタリング

新規ユーザーや新アイテムに対する推薦データが不足するコールドスタート問題がある。内容ベースフィルタリングなら比較的推薦しやすい。しかし辞書のメンテナンスの必要がある。

テールに従って頻度が少なくなるロングテールな分布になることをジップの法則という。

Uplift Modeling

普通のA/Bテストと異なり母集団を実験群と統制群の2つにわけ、単に反応したかどうかを調べるのではなく、実験群と統制群においてどのような特徴量を持つ標本が反応したのか/しなかったのかを調べる。

  • 無関心 介入行為をしてもしなくてもコンバージョンしないセグメント
  • 説得可能 介入行為があってはじめてコンバージョンに転じるセグメント ←ここを最も発見したい
  • 天邪鬼 なにもしなければコンバージョンするが、介入行為を行うとコンバージョンしなくなるセグメント
  • 鉄板 介入行為をしてもしなくてもコンバージョンするセグメント 鉄板セグメントに対する広告出稿は反応率は良いが単価が低くなる可能性も高いため注意が必要

AUCC(Area Under the Uplift Curve)を使ってUplift Modelingの評価を行う

2017-12-06

Dogical Thinking


本屋さんで「ニューヨークの魔法のかかり方」を探している時に「犬が伝えたかったこと」という本をたまたま見つけ、表紙の柴犬が可愛くてこの本も一緒に買って家に連れ込みました。
20人による犬に関するエピソードが載っていて、ただ可愛い部分や別れの悲しい部分を強調するのではなく、犬と暮らすというのはどういうことなのかが描かれています。エピソードの合間に正しいしつけの仕方や、犬にまつわる研究も紹介されているんですが、知らないことばかりで新鮮でした。ある研究によると、犬と過ごすと散歩などで必然的に健康的な生活になることから、全ての日本人が犬と暮らした場合、健康保険の国の負担額は4兆円少なくなるそうです。
特に印象に残っているのは、犬は記憶力は相当良いのに予測は苦手という部分です。「〇〇をしたら叱られた」ということは覚えられても、「じゃあ〇〇をやめよう」とはならないそうです。これを逆手にとって、無駄吠えをした時に、叱っても構わないですが、一度口を押さえて吠えなくさせた後に褒めてあげると、「吠えたら叱られた」と学習した後に「吠えなかったら褒められた」という結果を学習するとのことでした。感情だけで動いているように見えて、ある意味ロジカルな感じがして不思議です。
たまにネットでポメラニアンの動画とかを観ていると、この顔は何も考えてなさそう…!という感じがものすごいしますが、この本を読んだ後に思い返して、やっぱり何も考えてなさそう…!!という結論にいたりました。みなさまもぜひ、本屋で見かけたら手にとってみてください。中の挿絵がカラフルで可愛いので書籍版がオススメです🐶

2017-12-02

Hive Study


Hadoopの象本を読み返してみています。2013年に出版された第3版ってことは、hpでデータ系の部署に配属された時に買ったんだっけな〜と朧げな記憶が蘇ります。今日はHiveの部分を重点的に。
Hiveは読み込み時点ではデータを確認せず、クエリの発行時に確認する。これを読み込み時のスキーマ適用と呼ぶ。
compact/bitmapインデックス
compact: 各ファイル内のオフセットではなく、HDFSのブロック番号を保存する。値が近傍の行にまとまっているような場合に効果的
bitmap: 特定の値が現れている行を、圧縮されたビット集合を使って保存数r。通常はカーディナリティの低い列に対して使用する
HiveQLはSQL92への準拠がゴールとして設定されたことはなく、ユーザーの要求を満たせるように機能追加してきた。
管理対象/外部テーブル
管理対象: load data inpathは移動を伴う、dropはメタデータとデータそのものを削除する
外部テーブル: テーブル作成時にlocationのパスをチェックしない、dropはメタデータのみを削除する  
バケット
同じ列でバケット化された2つのテーブルの結合処理は、map側結合として効率的に実装できる。

create table bucketed_users (id int, name string)
clustered by (id) into 4 buckets
;
create table bucketed_users (id int, name string)
clustered by (id) sorted by (id asc) into 4 buckets
;
select * from bucketed_users
tablesample(bucket 1 out of 4 on id)
;

複数テーブルへのinsert

from s1
insert overwrite table t1
 select c1, count(c1)
 group by c1
insert overwrite table t2
 select c2, count(c2)
 group by c2
;   

空テーブルの複製

create table t1_new like t1
;

ソート
sort by: reducer毎にソートされたファイルを生成する distribute by: 特定の行がどのreducerに行くのかを制御する

from records2
select year, temperature
distribute by year
sort by year asc, temperature desc
;

関数の確認

show functions
;
describe function length
;

map結合 1つのテーブルがメモリに収まるほど小さければ、小さい方のテーブルをmapperのメモリに読み込んで結合処理を行うことができる。

select /**+ MAPJOIN(things) */ sales.*, things.*
from sales
 join things on (sales.id = things.id)
;

ビュー
生成時点ではディスクにマテリアライズ化されず、ビューの参照時点で、ビューのselect文が実行される。
ユーザー定義関数
UDF: 1つの行を受け取り、1つの出力行を生成する
UDAF(User-Defined Aggregate Function): 複数行を受け取り、1つの出力行を生成する
UDTF(User-Defined Table-generating Function): 1つの行に対して処理を行ない、複数行を出力する
UDFを作成する際はorg.apache.hadoop.hive.ql.exec.UDFをextendsし、最低限evaluateメソッドを実装する必要がある Hiveへの登録するにはjarファイルとしてパッケージ化し、add jarおよびcreate temporary functionを実行する
add jar /path/to/hive-examples.jar
create temporary function strip as 'com.hadoopbook.hive.strip'

(UDAFの作成方法はUDFと異なる部分もあるが割愛)