2017-09-25 18 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つの新しいポイントを追加して見たいですそれらはモデルに含まれます。今まで私は最終的にトレーニングデータに初期点を含め、配列の最後の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) 

パフォーマンス上の理由から、代わりにデータを緻密化し、PCAを適用するのでスパース行列に対してTruncatedSVDを使用する方が良いでしょう。結果は同一でなければなりません。

関連する問題