在 scikit-learn 中,一些聚类算法同时具有
predict(X)
和 fit_predict(X)
方法,例如 KMeans 和 MeanShift,而其他聚类算法仅具有后者,例如 SpectralClustering。根据医生的说法:
fit_predict(X[, y]): Performs clustering on X and returns cluster labels.
predict(X): Predict the closest cluster each sample in X belongs to.
我不太明白两者之间的区别,它们似乎对我来说是等同的。
为了使用“预测”,您必须首先使用“拟合”方法。因此,使用“fit()”然后使用“predict()”与使用“fit_predict()”绝对相同。但是,在需要知道模型的初始化参数的情况下,仅使用“fit()”可能会受益,而不是使用“fit_predict()”,在这种情况下,您将仅获得运行模型的标记结果。数据模型。
fit_predict
通常用于无监督机器学习转导估计器。
基本上,
fit_predict(x)
相当于fit(x).predict(x)
。
在这里添加答案可能已经很晚了,只是将来有人可能会受益
我可以在 kmeans 中进行预测而在 dbscan 中只进行 fit_predict 的原因是
在 kmeans 中,您根据考虑的簇数量获得质心。因此,一旦您使用
fit()
训练了数据点,您就可以使用它来 predict()
一个新的单个数据点以分配给特定的集群。
在 dbscan 中,您没有质心,根据您定义的
min_samples
和 eps
(被视为邻居的两点之间的最小距离),形成簇。该算法返回所有数据点的聚类标签。这种行为解释了为什么没有 Predict() 方法来预测单个数据点。 fit() 和 fit_predict() 之间的区别已由其他用户解释 -
在另一种空间聚类算法中,hdbscan 为我们提供了使用
approximate_predict()
进行预测的选项。值得探索。
这又是我根据我探索的源代码的理解。任何专家都可以强调任何差异。
像KMeans这样的方法可以在拟合后预测任何数据的目标。其他方法如SpectralClustering不知道未知数据可能属于哪里。仅当数据是拟合的一部分时,它们才能预测数据。这就是为什么只有一个方法fit_predict(data)。
示例:dbscan 查找聚类和异常值。如果测试新的数据点,则该数据点可能会将集群桥接在一起。 dbscan 必须重复拟合过程才能找出答案,预测 是不够的。