2012-01-14 8 views
2

私は複数のプロジェクトオブジェクトを持つサイトを持っています。各プロジェクトは、(例えば)があります。特定の加重基準に基づいて '類似の'オブジェクトを計算するアプローチ

  • 複数のタグ
  • 複数のカテゴリ
  • サイズ
  • 複数の種類
  • など

私はにメソッドを記述したいと思います上記の基準に基づいてすべての「類似の」プロジェクトを取得する。私は簡単に上記のそれぞれの類似のプロジェクト(つまり、同様のサイズのプロジェクトやカテゴリを共有するプロジェクトなど)を簡単に取得できますが、私はもっと知的になりたいと思っています。上記のうちの少なくとも1つを共通して有するプロジェクトである。

理想的には、共通のタグを持つプロジェクト、つまりサイズが近いプロジェクトほど「類似していない」という基準を重み付けしたいと思います.2つのタグが共通するプロジェクトは、共通のタグを持つプロジェクトと同様です。

これを行うにはどのようなアプローチが可能でしょうか?

答えて

4

これを処理する一般的な方法(少なくとも機械学習では)は、類似性を測定するメトリックを作成することです - Jaccard metricは、タイプ、カテゴリ、タグなどがあるので、ここでは良い一致のようです。本当に数字ではありません。

メトリックを取得したら、メトリックが三角不等式(d(a、b)< d(x、y))に従うならば、KDツリー、vp-treeまたは別のメトリックツリー構造を使用して、 a、c)+ d(c、b))

+0

@)oel:幾何学はどこで手に入りましたか? – Bytemain

+0

@David:あなたがここで何を意味するのか分かりませんか?このジオメトリは本質的にメトリックの副産物となります。 – Joel

+0

私は、Jaccardメトリックを使用する場合、実際に考慮するそれぞれのプロパティのメトリックを取得するとします。この時点では、2つの選択肢があります。つまり、すべてのメトリックを1つにまとめることで、そのメトリックの重大度を決定する必要がある時点で、 、またはパレートセット(またはパレートフロンティア)を計算し、その縮小セットから選択することができます。 – Fortunato

0
  1. 各カテゴリで100の値から開始します。
  2. ペナルティを適用します。同様に、kBのサイズの違いごとに-1、または他のプロジェクトで見つからないタグ​​ごとに-2です。それぞれのカテゴリで0..100という値になります。
  3. カテゴリの「重み」にカテゴリの値を掛けます(サイズの類似性に1、タグの類似性を3、タイプの類似性を2と掛け合わせます)。
  4. 加重値を加算します。
  5. 重み係数の合計(この例では1 + 3 + 2 = 6)で除算して全体の類似度を0..100にします。

最初のO(n^2)未満のプロジェクトの比較を減らす(つまり、各プロジェクトを互いに比較する)可能性は、状況に大きく依存します。あなたのソフトウェアの本当の要点かもしれません、またはnが低い場合は、まったく必要ではないかもしれません。

1

問題は、明らかにこれを解決する方法が無限であることです。

まず、(...、タグの類似性、カテゴリの類似性、記述の類似性を)あなたの属性ごとに類似度を定義する

その後、例えば、一般的なスケールを使用するために、これらすべての類似性を正常化しよう0〜1であり、0が最も類似しており、値は同様の分布を有する。

次に、各フィーチャにウェイトを割り当てます。例えば。タグの類似性は、記述の類似性よりも重要である。

最後に、類似類似度の合計を個々の類似度の加重和として計算します。

任意の重みを明示的に割り当てることができるので、単一の属性の類似性にはさまざまな選択肢があり、個々の値を正規化する無数の方法があります。等々。

重みを学習する方法があります。 アンサンブルメソッドを参照してください。しかし、体重を知るためには、良い結果が得られたかどうかをユーザーに知らせる必要があります。あなたはそのようなトレーニングデータを持っていますか?

関連する問題