興味のない方には退屈な記事かも知れませんが、データマイニングをする上で基礎になるコサイン類似度についてもう少しかみ砕いて説明しようと思います(復習を兼ねてのことです)まず断っておきますが、私は統計学については大学の講義で通り一遍のぬるい勉強しかしたことがありませんし、中退した私立の大学での専攻は機械工学で統計に関する専門性は、少なくとも学部では身につけておりません。ここに書くことは私が、今、自営業主となって新しいことを勉強する上で得た知識を反芻し、その知識の定着をはかることと、もう一つは、もしこの学習ノートが他の方が勉強する上での励みや参考に少しでもなればと思っての内容です。データマイニングを行う際、様々なデータをベクトルで表現することがしばしば行われます。いうのも、コンピュータが扱うことが出来るのはデータそのものというよりも数値であり、コンピューターは本質的に数値計算を行うものだからです。前回の学習日記で例に取り上げた、いくつかの気象条件が示された場合、ある人(特定の個人とします)が登山に行くかどうかを予測したい。いうニーズがあったとします。人間であれば、予測する際に色々と条件に関してあーだこーだと考えて、最終的には勘で結論を出しますが、コンピューターは数値計算によってそれを行います。数値計算をする前提として、条件やその結果を数値の列に置き換えなければなりません。気象条件として、天気を「晴れ、曇り、雨」の三つに分けたのであれば、それぞれに1,2,3という数字を割り当てます。前々回に述べたように、晴れ、曇り、雨は足したり引いたり出来ず、増しては掛けたり割ったりも出来ません。その順序だけに意味があるか、もしくは順序にすら意味がないか、のどちらかです。この場合、晴れ、曇り、雨に順序があるとするかどうかは厳密は答えはありませんが、ここでは順序に意味がある順序尺度として扱いましょう。気温の「暑い、暖かい、涼しい」も順序尺度として扱います。湿度の「高い、普通、低い」も同じです。風の有無は、強さを考慮していないので、名義尺度として扱うのがいいかと思います。ゴルフに行った行かなかったは○か×ですので、これも名義尺度として扱います。天気については「晴れ=3・曇り=2・雨=1」と数値に変換します。気温については「暑い=3・暖かい=2・涼しい=1」とします。風の有無は「ある=1・ない=0」です。青い枠の外にあるのが、元々の表にあったものを一つ抜き出して、答えを消して、問題にしたものです。Similarity)です。二つのベクトルを用意し、そのコサイン類似度(二つのベクトルの類似度を数値化したものを求めるのですが、その計算方法はこうです。「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」は相当違う気がしますが、数値としてはあまり違っていない印象は受けます。この辺は、元のデータを正規化しているかどうかでコサイン類似度も変わってくるかと思います。