【问题标题】:scikit-learn clustering: predict(X) vs. fit_predict(X)scikit-learn 聚类:predict(X) 与 fit_predict(X)
【发布时间】:2016-09-03 13:40:21
【问题描述】:

在 scikit-learn 中,一些聚类算法同时具有 predict(X)fit_predict(X) 方法,如 KMeansMeanShift,而其他只有后者,如 光谱聚类。根据文档:

fit_predict(X[, y]):    Performs clustering on X and returns cluster labels.
predict(X): Predict the closest cluster each sample in X belongs to.

我不太明白这两者的区别,他们似乎和我一样。

【问题讨论】:

  • 预测返回的结果是否与 kmeans.labels_ 相同或更准确?

标签: python-3.x machine-learning scikit-learn


【解决方案1】:

为了使用“预测”,您必须首先使用“拟合”方法。所以使用“fit()”然后使用“predict()”与使用“fit_predict()”绝对是一样的。但是,在您需要知道模型的初始化参数而不是使用“fit_predict()”的情况下,仅使用“fit()”可能会受益,在这种情况下,您只会获得运行模型的标记结果数据模型。

【讨论】:

  • 这并不能完全回答这个问题。他们在问“为什么KMeans 有一个predict 方法,但SpectralClustering 没有......我实际上无法解决这个问题......也许这是一个错误/缺失的功能?我的理解是,作为 scikit-learn API 设计的一部分,所有分类器都应该有一个 fit 和一个 predict 方法 ...
  • 是的,你是对的。我的回答更倾向于“我不太了解两者之间的区别,它们似乎与我相当。”部分。
  • 那么...我们对@maxymoo 的问题有答案了吗?
【解决方案2】:

fit_predict 通常用于无监督机器学习转导估计器。

基本上,fit_predict(x) 等价于fit(x).predict(x)

【讨论】:

  • 从 comp-sci 的角度来看 fit() 会影响您的对象/模型的状态是/否?其中predict() 将使用现有模型来标记输入数据(并且不会对对象/模型进行任何更改,是/否?
【解决方案3】:

在这里添加答案可能已经很晚了,只是将来有人可能会受益

我可以在 kmeans 中使用 predict 而在 dbscan 中只有 fit_predict 的原因是

  • 在 kmeans 中,您会根据所考虑的集群数量获得质心。因此,一旦您使用 fit() 训练了数据点,您就可以将其用于 predict() 一个新的单个数据点以分配给特定的集群。

  • 在 dbscan 中,您没有 centroids ,根据您定义的 min_sampleseps (被视为邻居的两点之间的最小距离),会形成集群。该算法返回所有数据点的集群标签。这种行为解释了为什么没有 predict() 方法来预测单个数据点。其他用户已经解释了 fit() 和 fit_predict() 之间的区别 -

在另一种空间聚类算法中,hdbscan 为我们提供了使用approximate_predict() 进行预测的选项。值得探索。

再次基于我探索的源代码的理解。任何专家都可以强调任何差异。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2021-11-22
    • 2015-02-20
    • 2013-11-27
    • 2020-07-25
    • 2015-11-20
    • 2019-04-15
    • 2015-03-28
    • 2013-02-04
    相关资源
    最近更新 更多