1

ここで混乱を招きたくない。各リストに値を付ける理由は、各リスト内のコンテンツをクラスタリング アルゴリズムの特徴値として使用したいからです。元のアイデアは、会社名のリストを持つ 1000 個のアイテムをそれぞれ持っているというものです。このリストの内容を値に変換したい。そのため、このアイテムの機能の 1 つとして、各リストに各値を添付したいと考えています.. ありがとう.. (これが、ベース リストを使用する理由でもあります..)

Python を使用していくつかのテキストを分析しようとしていますが、今では 1000 個のリストがあり、それぞれに会社名のリストが含まれています。例えば:

list1 = ['google', 'facebook' 'twitter', 'IBM']
list2 = ['microsoft', 'bloomberg', '1010Data']
list3 = ['google', 'microsoft', '1010Data']

これらのリストの類似性を測定したいと思います。list1list2は類似点がありませんが、list1list3list2と にlist3はいくつかの類似点があります。しかし、それをどのように測定するのですか?

最初に、これらのリストのすべての単語を含む 1 つの基本ベクトルを使用することを考えました。ここで、この基本リストは次のようになります。

base_list = ['google', 'facebook', 'twitter', 'IBM', 'microsoft', 'bloomberg','1010Data'] 

そのベクトル値は次のとおりです。

base_vector = [1, 1, 1, 1, 1, 1, 1]

次に、これらの各リストには、単語の出現とその位置の両方に応じたベクトル値があります。(ここではbase_listlist1list2list3はすべてソートされています)

list1 = [1, 1, 1, 1, 0, 0, 0]
list2 = [0, 0, 0, 0, 1, 1, 1]
list3 = [1, 0, 0, 0, 1, 0, 1]

それぞれの違い (または類似点) を base_vector と比較して角度の値を取得したいと考えています。

しかし!大きな問題になる可能性があります

list1 = [1, 1, 1, 0, 0, 0]
list2 = [0, 0, 0, 1, 1, 1]

次に、基本ベクトルとの角度値は同じです!

そして提案?リスト内のコンテンツの類似性を測定する方法について教えてください。つまり、このベクトル メソッドを使用する必要はありません。ブロックされただけです。

ありがとう!

4

2 に答える 2

0

リスト間の余弦類似度numpyを計算するために使用できます。

>>> import numpy as np
>>> list2 = [0, 0, 0, 0, 1, 1, 1]
>>> list3 = [1, 0, 0, 0, 1, 0, 1]
>>> angle = np.dot(list2,list3)/(np.linalg.norm(list2)*np.linalg.norm(list3))
>>> angle
0.66666666666666674

または、 scipyとその空間距離式 (マンハッタン、ユークリッド、ジャカードなど)を使用できます。それらは類似性の指標でもあります。Scipy には余弦類似性もあり、使いやすいようです。

于 2014-11-04T14:54:05.473 に答える