2017-09-25 119 views
0

我使用PCA將文檔減少到2點,以便可以將它們可視化。 我的方法看起來像這樣。向PCA模型添加一個點

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

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


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


    data2D = pca.fit_transform(X) 

然後我使用matplotlib plt.scatter繪製它們(data2D [:,0],data2D [:,1],C = label_colour)

我要添加新2點和看他們落在模型中。到目前爲止,我在最後的訓練數據中包含了初始點,並在陣列中的最後兩個位置繪製了一個X,但我不確定這是否是它們的值的真實反映。任何見解都會很棒。

回答

1

兩個TfidfVectorizerPCA保留行的順序改造後,使你在做什麼,似乎基本上是正確的(即在sent_list最後行被映射到最後行data2D陣列)。但是,如果新數據點不應該影響模型,則應首先用原始數據擬合模型,然後使用已擬合的模型轉換新數據。例如:

# 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) 

出於性能方面的原因,可能是更好的使用TruncatedSVD稀疏矩陣,而不是緻密的數據和應用PCA。結果應該是相同的。