2

一連のベクトルに対して k 個の最近傍を見つける単一の SPARQL クエリを作成したいと思います。1 つのベクトルの最近傍 100 個の平均ラベルを見つけるには、次のクエリを使用できます。

PREFIX : <ml://>
PREFIX vector: <ml://vector/>
PREFIX feature: <ml://feature/>

SELECT (AVG(?label) as ?prediction)
WHERE {
  {
    SELECT ?other_vector (COUNT(?common_feature) as ?similarity)
    WHERE { vector:0 :has ?common_feature . 
      ?other_vector :has ?common_feature .
    } GROUP BY ?other_vector ORDER BY DESC(?similarity) LIMIT 100
  }
  ?other_vector :hasLabel ?label .
}

単一のクエリで複数のベクトルに対してこれを行う方法はありますか?

4

1 に答える 1

0

私が何かを見落としていない限り、次のvector:0ようにURIを変数に置き換えることでこれを行うことができます:

SELECT ?vector (AVG(?label) as ?prediction)
WHERE {
  {
    SELECT ?vector ?other_vector (COUNT(?common_feature) as ?similarity)
    WHERE { ?vector :has ?common_feature . 
      ?other_vector :has ?common_feature .
      FILTER(?vector != ?other_vector)
    } GROUP BY ?other_vector ORDER BY DESC(?similarity) LIMIT 100
  }
  ?other_vector :hasLabel ?label .
}

?vector?other_vectorが等しくないことを確認するフィルター条件を追加しました。それが必要かどうかはもちろんあなた次第です:)

一致を見つけたいベクトルのリストを制限する必要がある場合は、VALUES句を使用して可能なバインディングを制限できます?vector

VALUES ?vector { vector:0 vector:1 ... } 
于 2013-01-28T22:46:39.057 に答える