k-means聚类算法(Python实现)
无监督学习的目标是发现数据本身的内在结构和模式,而不是预测某个特定的输出。换句话说,无监督学习是从未标记的数据中学习的,这使它在处理一些实际问题时具有独特的优势,如聚类、降维和异常检测等。
本节将通过 K-means 算法,具体展示如何在实践中应用无监督学习。
K-means 是一种广泛使用的无监督学习算法,主要用于聚类任务。该算法将样本分为 k 个集群,其中每个集群都由其内部的样本均值代表,这个样本均值通常被称为集群中心或质心。
K-means 算法是通过迭代的方式,尝试找到最佳的划分,使所有集群内部的样本尽可能相似,即质心与其内部样本的距离最小,同时,不同集群之间的样本尽可能不同,即质心之间的距离最大。
下面简单描述 K-means 算法的工作流程。
值得注意的是,由于 K-means 算法的初始集群中心是随机选择的,因此算法的最终结果可能会受到这个初始选择的影响。为了解决这个问题,通常会运行多次 K-means 算法,每次都随机初始化集群中心,并选择结果最好的一次作为最终结果,即所有样本与所在集群中心的距离之和最小。
在 Python 中,用户可以使用 Scikit-Learn 库中的 KMeans 类实现 K-means 算法。下面是一个简单的例子:
注意,X 是包含待聚类的特征,应在编写代码之前就准备好。在调用 fit() 方法时,不需要提供目标变量(标签),因为聚类是一种无监督学习方法,不需要目标变量。
本节将通过 K-means 算法,具体展示如何在实践中应用无监督学习。
K-means 是一种广泛使用的无监督学习算法,主要用于聚类任务。该算法将样本分为 k 个集群,其中每个集群都由其内部的样本均值代表,这个样本均值通常被称为集群中心或质心。
K-means 算法是通过迭代的方式,尝试找到最佳的划分,使所有集群内部的样本尽可能相似,即质心与其内部样本的距离最小,同时,不同集群之间的样本尽可能不同,即质心之间的距离最大。
下面简单描述 K-means 算法的工作流程。
- 指定想要形成的集群数量 k;
- 算法随机初始化 k 个集群中心;
- 在每一次迭代中,算法首先将每个样本分配给最近的集群中心,然后将每个集群的中心更新为该集群内部样本均值;
- 重复进行以上步骤,直到集群中心的变化小于某个预定的阈值,或达到预设的最大迭代次数。
值得注意的是,由于 K-means 算法的初始集群中心是随机选择的,因此算法的最终结果可能会受到这个初始选择的影响。为了解决这个问题,通常会运行多次 K-means 算法,每次都随机初始化集群中心,并选择结果最好的一次作为最终结果,即所有样本与所在集群中心的距离之和最小。
在 Python 中,用户可以使用 Scikit-Learn 库中的 KMeans 类实现 K-means 算法。下面是一个简单的例子:
from sklearn.cluster import KMeans # 创建一个实例,设定集群数量为 3 kmeans = KMeans(n_clusters=3) # 使用 K-means 算法对数据进行聚类 kmeans.fit(X) # 获取聚类结果 labels = kmeans.labels_
- kmeans=KMeans(n_clusters=3):初始化一个 KMeans 聚类器的实例,并将它赋值给变量 kmeans。参数 n_clusters=3 表示在这个 KMeans 模型中会创建 3 个聚类中心;
- kmeans.fit(X):使用数据集 X 训练 KMeans 模型。在这个过程中,KMeans 模型将学习如何根据数据特征,将数据点划分到不同的聚类中;
- labels=kmeans.labels_:获取 KMeans 聚类的结果,即每个数据点被分配到哪一个聚类中。这个结果被保存在变量 labels 中,包括从 0 到 n_clusters-1 的整数。
注意,X 是包含待聚类的特征,应在编写代码之前就准备好。在调用 fit() 方法时,不需要提供目标变量(标签),因为聚类是一种无监督学习方法,不需要目标变量。