この形式のデータを用語ドキュメント マトリックスに変換する必要があります: http://pastebin.com/u1A7v1CV
基本的に、各行は word_label_id と頻度で表されるドキュメントを表します。各 word_label_id に対応する単語は、別のファイルにあります。
これを用語ドキュメント マトリックスに変換して、データをベクトル化し、クラスター化できるようにしたいと考えています。
データをディクショナリに変換し、DictVectorizer を使用してワンホット エンコードされたスパース表現を取得することができました。
data = []
with open('../data/input.mat', 'r') as file:
for i, line in enumerate(file):
l = line.split()
d = dict([(k, v) for k, v in zip(l[::2], l[1::2])])
data.append(d)
v = DictVectorizer(sparse=True, dtype=float)
X = v.fit_transform(data)
出力は次のようになります。
(0, 1312) 1.0
(0, 2704) 1.0
(0, 3322) 1.0
(0, 3492) 1.0
(0, 3506) 1.0
(0, 3660) 1.0
(0, 3674) 1.0
(0, 3813) 1.0
(0, 4782) 1.0
(0, 4827) 1.0
(0, 5208) 1.0
(0, 5721) 1.0
(0, 6105) 1.0
(0, 6907) 1.0
(0, 7252) 1.0
(0, 7615) 1.0
(0, 7890) 1.0
(0, 7891) 1.0
(0, 7906) 1.0
(0, 7935) 1.0
(0, 7954) 1.0
(0, 7962) 1.0
(0, 7986) 1.0
(0, 8000) 1.0
(0, 8012) 1.0
: :
(8579, 50731) 1.0
(8579, 51298) 1.0
(8579, 51686) 1.0
(8579, 51732) 1.0
(8579, 52439) 1.0
(8579, 52563) 1.0
(8579, 52621) 1.0
(8579, 52980) 1.0
(8579, 53013) 1.0
(8579, 53018) 1.0
(8579, 53155) 1.0
(8579, 53180) 1.0
(8579, 53317) 1.0
(8579, 53739) 1.0
(8579, 54114) 1.0
(8579, 54444) 1.0
(8579, 54489) 1.0
(8579, 54922) 1.0
(8579, 55074) 1.0
(8579, 55164) 1.0
(8579, 55311) 1.0
(8579, 55741) 1.0
(8579, 56010) 1.0
(8579, 56062) 1.0
(8579, 56946) 1.0
これが何を意味し、どのように解釈するのかわかりません。TfIdfVectorizer
これは、scikit-learn で得られる疎行列と同等ですか?
このデータセットの次のステップは、特徴選択と k-means クラスタリングです。DictVectorizer
またはdata
辞書を使用して続行する方法がわかりません。