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

Scikit learn predict()方法在scikit learn的kmeans实现中有什么用途?,scikit-learn,k-means,Scikit Learn,K Means,有人能解释一下在scikit learn的kmeans实现中,predict()方法的用途吗?缔约国声明其用途如下: 预测X中每个样本所属的最近聚类 但是,我也可以通过在fit\u transform()方法上训练模型来获得输入集X的每个样本的集群编号/标签。那么predict()方法有什么用呢?它应该为看不见的数据指出最近的集群吗?如果是,那么如果执行维度缩减度量(如SVD),如何处理新数据点 这里有一个例子,但我仍然不认为它真的有帮助 predict()方法的用途是什么?它应该为看不见的数据

有人能解释一下在scikit learn的kmeans实现中,
predict()
方法的用途吗?缔约国声明其用途如下:

预测X中每个样本所属的最近聚类

但是,我也可以通过在
fit\u transform()
方法上训练模型来获得输入集X的每个样本的集群编号/标签。那么
predict()
方法有什么用呢?它应该为看不见的数据指出最近的集群吗?如果是,那么如果执行维度缩减度量(如SVD),如何处理新数据点

这里有一个例子,但我仍然不认为它真的有帮助

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\u transform
fit\u predict
这样的方法是为了方便而存在的
y=km.fit\u 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\u predict()
    .fit\u transform()
  • 当链接多个模型(如降维和聚类)时,在拟合和测试期间以相同的顺序应用它们

假设我有一些文本数据,我在其TDM上执行SVD,并拟合kmeans模型。我想在新的文本数据上使用这个模型。我可以用相同的词汇表获得新数据的TDM,但我想如果我应用SVD,这将是一个问题。新特性虽然大小相同,但可能不一定对应于以前的分解。如果我理解正确,predict()方法通过测量具有簇形心的欧几里德距离来确定簇,那么如果特征在语义上不对应,那么测量距离就没有意义,即模型的特征和新数据的特征。如果使用SVD的
transform
方法,则不会在看不见的数据上再次训练模型。它应用与培训期间相同的转换。但是,我以前从未使用过文本数据,不知道在SVD中输入的内容是否可以在数据集之间保持一致。