2016-10-12 4 views
0

Ich brauche einige Daten zu konvertieren, die ich in diesem Format in ein Begriff Dokument-Matrix haben: http://pastebin.com/u1A7v1CVConverting DictVectorizer zu TfIdfVectorizer

Wesentlichen Jede Zeile stellt ein Dokument als word_label_id und Frequenz dargestellt. Die Wörter, die jedem word_label_id entsprechen, befinden sich in einer anderen Datei.

Ich möchte dies in eine Term-Dokument-Matrix konvertieren, so dass ich die Daten vektorisieren und clustern kann.

Ich habe es geschafft, die Daten in ein Wörterbuch zu konvertieren und DictVectorizer verwenden, um eine One-Hot-codierten dünn besetzten Darstellung zu bekommen, weil jemand vorgeschlagen, dass ich dies tun, auf folgende Weise:

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) 

Das, was die Ausgabe aussieht ist wie:

(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 

Ich weiß nicht, was das bedeutet und wie man es interpretiert. Entspricht dies der Sparse-Matrix, die Sie in scikit-learn aus TfIdfVectorizer erhalten?

Meine nächsten Schritte in diesem Datensatz sollen Feature-Auswahl und k-Means Clustering sein. Ich weiß nur nicht, wie man das DictVectorizer oder das data Wörterbuch verwendet, um fortzufahren.

Antwort

1

Die Ausgabe des DictVectorizer ist eine SciPy-Sparse-Matrix, genau wie Sie es von TfIdfVectorizer gewohnt sind. Sie können mit der Feature-Auswahl und den k-means Clustering-Schritten fortfahren.