2017-06-09 7 views
0

私はアイテムを持つデータセットを持っていますが、ユーザー評価はありません。

アイテムには機能(〜400機能)があります。

フィーチャ(行の類似性)に基づいてアイテム間の類似性を測定したいと考えています。

私が使用するかを知っている(およびその使用方法)行の類似性を測定するためにないfowllowing

itemID | feature1 | feature2 | feature3 | feature4 .... 1 | 0 | 1 | 1 | 0 2 | 1 | 0 | 0 | 1 3 | 1 | 1 | 1 | 0 4 | 0 | 0 | 1 | 1
ようなバイナリ行列にアイテム特徴を変換します。

私は、アイテムXに対して、トップkの類似アイテムを取得したいと考えています。アイテム機能に基づいた類似点

サンプルコードは非常に

答えて

1

何を探してるんですが類似性尺度と呼ばれ理解されるであろう。簡単なgoogle/SOの検索では、2つのベクトル間の類似性を得るためのさまざまな方法が明らかになります。私はあなたがすべての項目の最上位k個関連商品を望むことに気づいhttp://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/

from math import * 

def square_rooted(x): 
    return round(sqrt(sum([a*a for a in x])),3) 

def cosine_similarity(x,y): 
    numerator = sum(a*b for a,b in zip(x,y)) 
    denominator = square_rooted(x)*square_rooted(y) 
    return round(numerator/float(denominator),3) 

print cosine_similarity([3, 45, 7, 2], [2, 54, 13, 15]) 

から撮影:ここではコサイン類似度についてpython2でいくつかのサンプルコードです。それを行う最善の方法は、k最近隣の実装です。できることはknnグラフを作成し、クエリのグラフから同様の上位k個のアイテムを返すことです。

このための素晴らしい図書館はnmslibです。ここではコサイン類似度とHNSW方法についてKNNクエリfrom the libraryのためのいくつかのサンプルコードです(あなたは、いくつかの利用可能な方法のいずれかを使用することができますがHNSWはあなたの高次元データのために特に効率的である。):

import nmslib 
import numpy 

# create a random matrix to index 
data = numpy.random.randn(10000, 100).astype(numpy.float32) 

# initialize a new index, using a HNSW index on Cosine Similarity 
index = nmslib.init(method='hnsw', space='cosinesimil') 
index.addDataPointBatch(data) 
index.createIndex({'post': 2}, print_progress=True) 

# query for the nearest neighbours of the first datapoint 
ids, distances = index.knnQuery(data[0], k=10) 

# get all nearest neighbours for all the datapoint 
# using a pool of 4 threads to compute 
neighbours = index.knnQueryBatch(data, k=10, num_threads=4) 

の終わりにコードは、各データ点に対するKトップ隣人はneighbours変数に格納されます。あなたはあなたの目的のためにそれを使うことができます。

+0

返信いただきありがとうございます。 – user123

+0

は、これらの番号([3、45、7、2]、[2、54、13、15])を取得したことを知りたいだけですか? – user123

+0

サンプルデータです。任意の2つのベクトル間の類似度を得るためにあなたのデータベクトルに入れてください。また、私が追加したリンクに移動してみてください。彼らは多くの関連情報を含んでいます – fzk

関連する問題