コサイン類似性はこの問題を解決する良い方法でしょうか?
はい。良いでしょうが、TF-IDFで
最もよく使われる類似度はJaccard Similarity
とCosine similarity
です。 このシナリオでは、直接Jaccard Similarity
を使用して、必要な結果を得ることができます。
セイ、
A = {director: "Hill Thompson", starring-actor: "Will Smith", release-date: "Dec 1776"}
B = {director: "Hill Thompson", starring-actor: "Will Smith", release-date: "Jan 1996"}
C = {director: "Hill Thompson", starring-actor: "Poop Jenkins", release-date: "Sept 1822"}
D = {director: "Foo Bar", starring-actor: "Poop Jenkins", release-date: "Some date"}
Jaccard Similarity
であろう:
J(A,B) = 2/4 = 0.5
J(A,C) = 1/5 = 0.2
J(C,D) = 1/5 = 0.2
そしてJ(A,B) > J(A,C)
としてK nearest neighbour
方法を選ぶであろうB
第次いでC
。 このような場合、Jaccard similarity
は直感をよく捕捉します。
は、
Cosine Similarity
が優れている方法を示す1つの以上の属性を追加するには:
A = {place filmed : "A", director: "Hill Thompson", starring-actor: "Will Smith", release-date: "Dec 1776"}
B = {place filmed : "A", director: "Hill Thompson", starring-actor: "Will Smith", release-date: "Jan 1996"}
C = {place filmed : "A", director: "Hill Thompson", starring-actor: "Poop Jenkins", release-date: "Sept 1822"}
D = {place filmed : "A", director: "Foo Bar", starring-actor: "Poop Jenkins", release-date: "Some date"}
J(A,B) = 3/5 = 0.6
J(A,C) = 2/6 = 0.33
J(C,D) = 2/6 = 0.33
お知らせ間違っ直感でJ(C,A) = J(C,D)
います。
なぜですか? 場所Aは映画を録画するのに一般的な場所のようです。ただ2つの映画が同じ場所に記録されているからといって、それらが似ていると結論づけることはできません。理想的にはそれはSim(C,D) > Sim(C,A)
です。そのような場合は、Jaccard Similarity
が直観を捕らえることができず、Cosine similarity
がTF-IDF
である場合があります。
この場合、Cosine Similarity
の問題は実装です。 Cosine similarity
はベクター上で定義されています。データが数値でない場合は、ベクトルを作成することは困難です。
ベクトルを作成する1つの方法は、ベクトルboolean
です。
例えば、 ベクトルとして形成されることになる。
vector = [A,HillThompson,FooBar,WillSmith,Poop Jenkins,Dec 1776,Jan 1996, Sept 1822, Some date]
ベクトルは次のようになります
A = {1,1,0,1,0,1,0,0,0}
C = {1,1,0,0,1,0,0,1,0}
D = {1,0,1,0,1,0,0,0,1}
J(C,A) = 5/12
J(C,D) = 5/12
注Jaccard Similarity
はまだ間違った直感を捕捉すること。 TF-IDFが行われていない場合はCosine Similarity
となります。
今TF-IDFを計算する:
IDF(A) = log(1 + 4/4) = 0.30
IDF(HillThompson) = log(1 + 4/3) = 0.37
IDF(FooBar) = log(1 + 4/1) = 0.70
IDF(WillSmith) = log(1 + 4/2) = 0.48
IDF(Poop Jenkins) = log(1 + 4/2) = 0.48
IDF(Dec 1776) = log(1 + 4/1) = 0.70
IDF(Jan 1996) = log(1 + 4/1) = 0.70
IDF(Sept 1822) = log(1 + 4/1) = 0.70
IDF(Some date) = log(1 + 4/1) = 0.70
IF-IDFベクトルは、現在のようになります。したがって、TF-IDF
とCosine similarity
を
Cosine(A,C) = 0.01418/(0.2433 * 0.2433) = 0.2395
Cosine(C,D) = 0.0200/(0.2492 * 0.2850) = 0.2816
:
A = {0.30/4, 0.37/4, 0, 0.48/4, 0, 0.70/4, 0, 0, 0}
C = {0.30/4, 0.37/4, 0, 0, 0.48/4, 0, 0, 0.70/4, 0}
D = {0.30/4, 0, 0.70/4, 0, 0.48/4, 0, 0, 0, 0.70/4}
A = {0.075, 0.0925, 0, 0.12, 0, 0.175, 0, 0, 0 }
C = {0.075, 0.0925, 0, 0, 0.12, 0, 0, 0.175, 0 }
D = {0.075, 0, 0.175, 0, 0.12, 0, 0, 0, 0.175 }
|A| = 0.2433
|C| = 0.2433
|D| = 0.2850
は、コサイン類似度を計算しますD
がもっと似ているという直感を捉えるarはC
からA
まではC
になります。こうして、それはJaccard similarity
よりも優れている私は、PC上ではなく科学的な電卓でそれらを行っているbecuase私は計算を示していることに注意してください。エラーの可能性があります。あなたが見つけた場合に備えて、それを修正してください。
類似性の定義方法は?一致したキー値の数だけで?どのようにネクタイは?主演男優賞:「ウィル・スミス」発売日:「1776年12月」の「監督:「レイ・トンプソン」」はあなたの前回の結果よりも優れていると考えられますか? – shole
ああよい質問ですが、その場合、同じ数の属性を取得したら、両方とも返します –
キーの間に重み/優先順位はありませんか? (例えば、ネクタイの場合、リリース日と一致するディレクターの重さにマッチする)これは値の類似性が重要でないことを意味しますか? (例えば、マッチした数が多い場合、監督:HiLL Thompsonは監督:idcwtfisthisと同じくらい悪いという意味ですか? – shole