【问题标题】:adding a point to a PCA model向 PCA 模型添加一个点
【发布时间】:2018-03-06 03:45:12
【问题描述】:

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

【问题讨论】:

    标签: python scikit-learn pca


    【解决方案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 更好。结果应该是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2011-08-18
      • 2017-02-11
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多