为啥 KMeans 是一个类而不是 sklearn 中定义的函数?

Posted

技术标签:

【中文标题】为啥 KMeans 是一个类而不是 sklearn 中定义的函数?【英文标题】:Why is KMeans a class rather than a function defined in sklearn?为什么 KMeans 是一个类而不是 sklearn 中定义的函数? 【发布时间】:2021-12-21 03:49:24 【问题描述】:

从开发者的角度来看,他们为什么要使用一个类来设计KMeans,然后让人们去初始化它并这样使用它:

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

为什么不是一个函数,让用户可以直接导入和调用它?

【问题讨论】:

如果我不得不猜测是因为 KMeans 不只提供一种功能。在安装了 KMeans 之后,可以调用另一个函数,也许最重要的 predict 使用 KMeans 聚类来预测新数据集。当 KMeans 是一个函数时,您必须拟合 KMeans 并使用该输出根据拟合的输出进行预测。但我很好奇其他人对这个问题的看法,因为我在编写代码时经常挣扎以决定如何在创建类或函数之间进行选择。 【参考方案1】:

这就是scikit-learn 设计模式的工作原理,几乎所有模型都是类,对于每个类,我们都有predictfit 之类的函数。

实际上,对于任何机器学习模型,都必须有一些内部状态,例如 MLP 模型的权重,如果您想以托管方式管理这些状态,那么您的首选应该是类,而不是函数.

【讨论】:

以上是关于为啥 KMeans 是一个类而不是 sklearn 中定义的函数?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中score为啥使用测试数据

为啥 Shapeless 中的 _0 Nat 是一个类而不是一个对象?

sklearn实践:kmeans聚类

为啥 KMeans 集群标签并不总是与 set random_state 相同?

为啥 String 是 Value 类型,尽管它是类而不是结构?

为啥要扩展类而不是遵循协议? [复制]