読者です 読者をやめる 読者になる 読者になる

IT関係の個人事業主の徒然なる日記

大まかにIT系と呼ばれる仕事を自営業として営んでいる者の日記です

データマイニングの学習日記

機械学習 日記

興味のない方には退屈な記事かも知れませんが、データマイニングをする上で基礎になるコサイン類似度についてもう少しかみ砕いて説明しようと思います(復習を兼ねてのことです)

まず断っておきますが、私は統計学については大学の講義で通り一遍のぬるい勉強しかしたことがありませんし、中退した私立の大学での専攻は機械工学で統計に関する専門性は、少なくとも学部では身につけておりません。

ここに書くことは私が、今、自営業主となって新しいことを勉強する上で得た知識を反芻し、その知識の定着をはかることと、もう一つは、もしこの学習ノートが他の方が勉強する上での励みや参考に少しでもなればと思っての内容です。

まず、データマイニングを行う際、様々なデータをベクトルで表現することがしばしば行われます。
というのも、コンピュータが扱うことが出来るのはデータそのものというよりも数値であり、コンピューターは本質的に数値計算を行うものだからです。

例えば、前回の学習日記で例に取り上げた、いくつかの気象条件が示された場合、ある人(特定の個人とします)が登山に行くかどうかを予測したい。というニーズがあったとします。

人間であれば、予測する際に色々と条件に関してあーだこーだと考えて、最終的には勘で結論を出しますが、コンピューターは数値計算によってそれを行います。

数値計算をする前提として、条件やその結果を数値の列に置き換えなければなりません。

気象条件として、天気を「晴れ、曇り、雨」の三つに分けたのであれば、それぞれに1,2,3という数字を割り当てます。

前々回に述べたように、晴れ、曇り、雨は足したり引いたり出来ず、増しては掛けたり割ったりも出来ません。ただその順序だけに意味があるか、もしくは順序にすら意味がないか、のどちらかです。

この場合、晴れ、曇り、雨に順序があるとするかどうかは厳密は答えはありませんが、ここでは順序に意味がある順序尺度として扱いましょう。
気温の「暑い、暖かい、涼しい」も順序尺度として扱います。
湿度の「高い、普通、低い」も同じです。
風の有無は、強さを考慮していないので、名義尺度として扱うのがいいかと思います。
ゴルフに行った行かなかったは○か×ですので、これも名義尺度として扱います。

天気については「晴れ=3・曇り=2・雨=1」と数値に変換します。
気温については「暑い=3・暖かい=2・涼しい=1」とします。
湿度は「高い=3・普通=2・低い=1」
風の有無は「ある=1・ない=0」です。

そのように変換して出来た表が、f:id:tyusuke88:20140827002737j:plainになります。
青い枠の外にあるのが、元々の表にあったものを一つ抜き出して、答えを消して、問題にしたものです。

そこで、データマイニングの中でも最も原始的ともいえる、問題になるベクトル(数列)が過去のデータの一つ一つとどの程度似ているか(類似しているか)を数値計算し最も似ているものを探し、その条件で答えがどうであったかということから問題の答えもそれと同じだろう(もしくは近いだろう)推測するという手法があり、その手法によく使われるのがコサイン類似度(Cosign Similarity)です。

まず二つのベクトルを用意し、そのコサイン類似度(二つのベクトルの類似度を数値化したものを求めるのですが、その計算方法はこうです。

ゴルフの気象条件の1行目をベクトルにしたものが
「3,3,3,0」で、
比較対象とする気象条件のベクトルは、
「1,1,3,1」とします。
この二つのベクトルがどの程度似通っているか計算するコサイン類似度では、まず、それぞれの内積を計算します。
「3,3,3,0」と
「1,1,3,1」の内積
それぞれの項目を掛け合わせたものを足し算します。
つまり、(3*1)+(3*1)+(3*3)+(0*1)=内積は15となります。
コサイン類似度は内積を使って、計算します。
具体的には、内積の値(15)÷(√((3^2)+(3^2)+(3^2)+(0^2))*((1^2)+(1^2)+(3^2)+(1^2)))
で答えは0.8333となります。
つまり
「3,3,3,0」と
「1,1,3,1」の
コサイン類似度は0.8333ということです。
また、
「1,1,3,1」と
「1,1,2,1」の
コサイン類似度は、0.9819となり、「3,3,3,0」より、「1,1,2,1」の方がより「1,1,3,1」に近いということが数値によって示された事にになります。
最も見た感じ、「3,3,3,0」と「1,1,3,1」は相当違う気がしますが、数値としてはあまり違っていない印象は受けます。
この辺は、元のデータを正規化しているかどうかでコサイン類似度も変わってくるかと思います。

とりあえず今日はここまで。
退屈ですいません。

機械学習の日記は一旦終了して、次回は日本をおそう電力価格高騰について、日経ビジネス誌を参考に記事を書いてみたいと思います。