scikit learn中kmeans实现中predict()方法的用途是什么?

7
有人能解释一下scikit-learn中kmeans实现中predict()方法的用途吗?官方文档将其用途描述为:

预测每个样本在X中属于哪个最近的簇。

但是,我也可以通过在fit_transform()方法上训练模型来获取输入集X每个样本的簇编号/标签。那么predict()方法有什么用呢?如果是用来指出未知数据的最接近的簇,那么如果你执行SVD等降维度量,如何处理新的数据点呢?
这里有一个类似的问题,但我仍然不认为它真正有所帮助。
1个回答

10

predict()方法有什么用途?它是否应该指出未知数据的最接近聚类?

是的,正是如此。

那么如果您执行诸如SVD之类的降维措施,如何处理新数据点?

在将其传递给.predict()之前,对未知数据应用相同的降维方法。以下是典型的工作流程:

# prerequisites:
#    x_train: training data
#    x_test: "unseen" testing data
#    km: initialized `KMeans()` instance
#    dr: initialized dimensionality reduction instance (such as `TruncatedSVD()`)    

# fitting
x_dr = dr.fit_transform(x_train)
y = km.fit_predict(x_dr)  

# ...

# working with unseen data (models have been fitted before)
x_dr = dr.transform(x_test)
y = km.predict(x_dr)

# ...

实际上,像fit_transformfit_predict这样的方法是为了方便而存在的。y = km.fit_predict(x)等同于y = km.fit(x).predict(x)

如果我们将拟合部分写成以下形式,我认为更容易理解:

# fitting
dr.fit(x_train)
x_dr = dr.transform(x_train)

km.fit(x_dr)
y = km.predict(x_dr)

除了调用.fit()之外,这些模型在拟合和处理未见数据时使用的方法相同。
总结:
- .fit()的目的是使用数据来训练模型。 - .predict().transform()的目的是将训练好的模型应用于数据。 - 如果您想在训练期间对模型进行拟合并将其应用于相同的数据,则可以使用.fit_predict().fit_transform()以方便操作。 - 在链接多个模型(例如降维和聚类)时,请在拟合和测试期间按照相同的顺序应用它们。

假设我有一些文本数据,并对其TDM执行SVD并拟合kmeans模型。我想在新的文本数据上使用此模型。我可以获得具有相同词汇表的新数据的TDM,但如果我应用SVD,则可能会出现问题。尽管新特征的大小相同,但它们可能不一定对应于先前的分解。如果我理解正确,predict()方法通过测量与聚类中心的欧几里得距离来确定聚类,那么如果特征不语义对应,即模型的特征和新数据的特征,则测量距离将没有意义。 - Smeet Patel
如果您使用SVD的“transform”方法,则不会在未见数据上重新训练模型。它应用与训练期间相同的转换。但是,我以前从未处理过文本数据,不知道您放入SVD中的内容是否可以在数据集之间保持一致。 - MB-F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接