タグ

ブックマーク / coyote-blog.net (2)

  • Spark MLlibでcos類似度の総当たり計算が高速に実行できるDIMSUMがすごい(1)実装編 - Coyote blog

    Spark MLlibでcos類似度の総当たり計算が高速に実行できるDIMSUMがすごい(1)実装編 Nov 9th, 2015 2:10 am 総当たりのcos類似度計算を行う場面の例 item-basedの協調フィルタリング item-basedのアルゴリズムでは、全てのアイテムとアイテムの類似度を計算し、あるアイテムxを購入したユーザAにはアイテムxと類似度の最も高いアイテムyを推薦します。item-basedの計算量はアイテム数$n$に対して$O(n^2)$になるので、アイテム数$n$が大きい($\rm{e.g.} \sim 10^6$)ときは一台のマシンで計算することは難しくなります。 DIMSUMで$O(m L^2)$を$O(n \log(n)/s)$に。 DIMSUMはStanford大のZadehとCarlssonが考案した近似的に総当たりのcos類似度を高速に計算するアル

    todesking
    todesking 2015/11/27
  • Spark MLlibでcos類似度の総当たり計算が高速に実行できるDIMSUMがすごい(2)理論編 - Coyote blog

    $A$: $m \times n$行列($m»n$) $s$: cos類似度の最小値 $L$: 一行の中で非ゼロ要素の最大数 特異値を保存する場合 $A^{\rm T}A$を近似計算する目的 行列Aは($m \times n$)の大きさで、$m$が$n$に比べて非常に大きいとします。$A$を直接固有値分解(SVD)するとき、そのまま行うと$A=U\Sigma V^{\rm T}$となりますが、比較的小さい$n \times n$行列の$A^{\rm T}A$を固有値分解しても、$A^{\rm T}A=V\Sigma^{2} V^{\rm T}$となり、$\Sigma$と$V$は求めることができます。このようにして$A^{\rm T}A$を利用すると固有値分解を小さい計算量で実現することができます。しかしながら、$A^{\rm T}A$の計算量は大きいので、固有値の精度が落ちない範囲で近似計

    todesking
    todesking 2015/11/27
  • 1