向 PCA 模型添加一个点

adding a point to a PCA model

我正在使用 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,但我不确定这是否真实反映了它们的价值。任何见解都会很棒。

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 更好。结果应该是相同的。