我正在使用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,但我不确定这是否真实地反映了它们的价值。任何见解都会很棒。
答案 0 :(得分:1)
转换后TfidfVectorizer
和PCA
都保留了行的顺序,所以你所做的似乎基本正确(即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
。结果应该是相同的。