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

Sme*_*tel 8 k-means scikit-learn

有人可以解释一下predict()scikit learn 的 kmeans 实现中方法的用途是什么吗?官方文档说明其用途为:

预测 X 中每个样本所属的最接近的簇。

但是我也可以通过在方法上训练模型来获得输入集 X 的每个样本的簇号/标签fit_transform()。那么方法有什么用呢predict()?它是否应该指出看不见的数据最近的簇?如果是,那么如果执行 SVD 等降维措施,如何处理新的数据点?

这是一个类似的问题,但我仍然认为它没有真正的帮助。

kaz*_*ase 11

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)

# ...
Run Code Online (Sandbox Code Playgroud)

实际上,诸如fit_transform和 之类的方法fit_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)
Run Code Online (Sandbox Code Playgroud)

除了在拟合过程中调用.fit()同样使用的模型以及未见过的数据之外。

概括:

  • 目的.fit()是用数据训练模型。
  • .predict()or的目的.transform()是将经过训练的模型应用于数据。
  • 如果您想拟合模型并将其应用于训练期间的相同数据,为了方便起见,可以使用.fit_predict().fit_transform()
  • 当链接多个模型(例如降维和聚类)时,在拟合和测试期间以相同的顺序应用它们。