2016-08-30 6 views
2

そのトピックで は、筆者自身によってメトリックを符号化するが、scipyのダウンロードの余弦を用いてIAM:(ratingsが71869x10000ある)コサインの類似性は「ナノ」値をもたらす。。これは、この質問の反対側です。pt.II

A = ratings[:,100] 
A = A.reshape(1,A.shape[0]) 
books_similarity = np.empty([1, ratings.shape[0]]) 

for book in range(10000): 
    books_similarity[0,book] = -cosine(A, ratings[:,book].reshape(1,A.shape[1]))+1 

それは出力:0、1 1とのNaN(自体のため)。だから私が前に触れたトピックの解決策は私のためではない、なぜなら私はscipyを使っているからだ。私は何をすべきか?

PS:私は、アレイからの "1" を削除して実行します。

m = np.argmax(books_similarity) 
books_similarity[0,m] 

それは "NaNの"

PSS返します:まず、私はその後、漬物ファイルを持っていたCSRにそれをデコードし、しかしを使用numpy。私は、すべてをnp配列として考えるべきでしょうか?入力ベクトルの一方が、その場合にnan全て0 scipy.spatial.distance.cosine戻る場合

答えて

4

コサイン距離が定義されていません。これは、コード内で起こってもよい

In [70]: a 
Out[70]: array([0, 1, 1, 1, 0, 0, 0, 1, 0, 0]) 

In [71]: b 
Out[71]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 

In [72]: cosine(a, b) 
/Users/warren/miniconda3/lib/python3.5/site-packages/scipy/spatial/distance.py:329: RuntimeWarning: invalid value encountered in true_divide 
    dist = 1.0 - np.dot(u, v)/(norm(u) * norm(v)) 
Out[72]: nan 

cosineを呼び出す前に、どちらの入力がすべて0


P.S.であることを確認してください私はAratingsでやっていることを解読しようとはしていませんが、最終的にscipy.spatial.distance.cdistと引数のあるmethod='cosine'を使いたいと思っています。

+1

私のコードではうまくいきません。すべてのvectrosは少なくとも1つの "1"要素を持っています –

+0

'' nan'の結果となるベクトルの特定のペアを見つけることができますか?もしそうなら、それを質問に追加してください。あなたのデータがなければ、私たちができるのは推測だけです。 –

関連する問題