適合率, 再現率, SQL破門, Jaccard (2013/01/23)


適合率と再現率

まじこの用語は意味が解らないからやめてほしい.

これは, 精度と網羅性の事である. 精度というのは, 出した結果のうち正しいやつの割合だ. 網羅性は, 正しい奴をどれくらいピックアップできたか, という.

どっちかだけだとダメなのは, つまりこういう事だ. 精度は上がれば上がるほど当然良いわけだが, だからといって最強に強まったモロ鉄板チャンピオンデータをピンで用意して, 100%正確です, ってのはほとんどの場合意味がない. なんでかというと, 普通は正解が一個ってことはなくて, たくさんあるわけで, つまり大部分が漏れてるから.

そこでどれくらい漏れたか, という話が必要になるので, 網羅性を考慮する. これが再現率という用語の意味するところだ. 「正解を全部特定できてます!」 「おお!そりゃすげぇ!」

ふたをあけてみたら, ゴミばっかり, だって全部吸い込んでるんだから.

ということで, 吸い込んだうちどれくらいアタリなのかは精度, どれくらい吸い込んでるかが網羅性. どっちもないと, 話にならない. 英語では それぞれ precision と recall というらしい. precision はそのままですが, recall は俺のプアな英語では意味がいまいちわかりません. というわけで, わしは精度と網羅性で憶えてます.

sql 入門

select * from table;

これしか知らない俺が, sql をやってみる, という企画だ. とりあえずはじめに, mysql のドキュメントにオマケでついてる tutorial をやってみる.

やってみると sql というのは言語ふうではあるのだが, よくあるプログラミング言語とはかなり違ってて, 勉強するのはかなり大変だ, という事がこれでわかった.

何か情報を取得するのは常に

select

と言わねばならない. いつも言わねばならないのなら, なくしてほしいところだ. 情報を取得する以外には, 更新する文もある. そう, sql というのは基本的に文つまり ステイトメントを書くことになっている. それは sql をうけつけるプログラム(sql server)に対する指令である. 文の他に式もでてくる. 式は条件の中や select の引数として書くことができる.

変数というのは基本的に出てこない. 出てくるのはほとんどがリテラルか予約語である. だから, 特にリテラルのための記法というものはない. このあたりの割り切りがなかなか鋭いが, やりすぎのような気もする.

たくさん出てくるデータがリテラルの表現の中のどこにどう格納され, どう処理されるのか, といった事はよく分からないので, なぜその表現を書くとその結果になるのか, という事が見当がつきにくい. たとえば

select max(hoge) from table;

これで項目 hoge の最大のものを探すことができる. なぜこれでいいの? max じゃなかったやつらはどこに行っちゃったの?

基本的な構成要素は何であり, 組み合わせのルールはどうなっておるのか, 的なところがさっぱり解らないまま, それっぽいステートメントを web から探してくるセンスだけ身についてきた.

それとは別に, どうも, SQLはまえから順に処理されるので, 処理対象を早く効率的に刈り込めるような順番に並べて書くと良いらしい, という事が解ってきた. 評価順を仮定したコーディングは教科書的にはよくないとされているが, それと真逆をいくコンベンションである.

途中で処理対象が膨れるような事をやるとメモリを使い切ってサーバプロセスが死んだりする. まぁこのあたりは普通のプログラミングと同じですが, データのサイズや次元が明示的には見えないので, 考えなくて良い利点もあるものの, こういうのは裏腹なわけで, うっかりすると破滅的な事になりがちです.

普通の SQL だけでは業務に全く足りないので, 最近は自然言語拡張なんかも使っています.

ということで SQL 入門は唐突ですがこれにて終わります. 実際には, shell からバッチでコードを投げるか, Ruby の MySQL2 ライブラリを使っています. ActiveRecord はインストールしただけで全然使っていません. 自然言語処理拡張なクエリを書けるのかどうか, とかを調べたり対応させるのがめんどくさいからです. 全然使わないまま ActiveRecord のバージョンが上がってしまいました. はぁはぁはぁ

Jaccard 指数

あらゆるこいつは役に立つ. 二つの集合があったとき, その類似度を

$$\frac{|(A \cap B)|}{|(A \cup B)|}$$

で計算するのである.

これのいいところは, 距離の条件, つまり

を満たすところで, 数学的に実に素性がよろしい. もうこいつ無しでは夜も昼もあけぬありさまである. む. つまりさっきの式は類似度であり, かつ, 値は 1以下になるので, 1 - Jaccard の値が距離空間条件を満たす. ですな.


記事リストへ