在PCA模型中添加一个点

时间:2017-09-25 08:27:28

标签: python scikit-learn pca

我正在使用PCA将文档缩小到2分,以便我可以将它们可视化。 我的方法看起来像这样。

  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 个答案:

答案 0 :(得分: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。结果应该是相同的。