2017-09-25 2 views
0

Ich verwende PCA, um Dokumente auf 2 Punkte zu reduzieren, damit ich sie visualisieren kann. Meine Methode sieht so aus.Hinzufügen eines Punktes zu einem PCA-Modell

pipeline = Pipeline([('tfidf', TfidfVectorizer())]) 

    X = pipeline.fit_transform(sent_list).todense() 


    pca = PCA(n_components = 2).fit(X) 


    data2D = pca.fit_transform(X) 

Dann habe ich ihnen bin Plotten matplotlib mit plt.scatter (data2D [: 0], data2D [: 1], c = label_colour)

I 2 neue Punkte hinzufügen möchten, und sehen wo sie in das Modell fallen. Bis heute habe ich die Anfangspunkte in die Trainingsdaten am Ende aufgenommen und ein X über die letzten beiden Positionen im Array gezeichnet, aber ich bin mir nicht sicher, ob dies eine wahre Reflektion ihres Wertes ist. Jede Einsicht wäre großartig.

Antwort

1

Sowohl TfidfVectorizer und PCA behalten die Reihenfolge der Zeilen nach der Transformation, also was Sie tun, im Wesentlichen richtig scheinen (das heißt, die letzten Zeilen in den sent_list zu den letzten Zeilen in dem data2D Array abgebildet werden).

Wenn jedoch die neuen Datenpunkte das Modell nicht beeinflussen sollten, sollten Sie zuerst das Modell mit den Originaldaten anpassen und dann die neuen Daten mit dem bereits angepassten Modell transformieren. Zum Beispiel:

# Fit the model with original data 
vect = TfidfVectorizer() 
X = vect.fit_transform(sent_list) 

svd = TruncatedSVD(n_components = 2) 
data2D = svd.fit_transform(X) 

# Transform new data with fitted model 
X_new = vect.transform(new_data) 
data2D_new = svd.transform(X_new) 

Aus Performance-Gründen ist es wahrscheinlich besser, TruncatedSVD für Sparse-Matrizen zu verwenden, anstatt die Daten von Verdichtungs- und Anwendung PCA. Die Ergebnisse sollten identisch sein.

Verwandte Themen