聚类算法是一种无监督的机器学习技术,它将未标记的数据集分组,使得同一组内的数据点相似度高,而不同组之间的相似度低。简而言之,聚类算法旨在形成数据点的子集或组,这些数据点彼此非常相似,而形成的组或子集或聚类可以明显地区分开。
假设有一个数据集,对其一无所知。聚类算法可以发现对象组,其中每个聚类成员/数据点之间的平均距离比与其他聚类成员/数据点的距离更近。以下是聚类算法在现实生活中的一些实际应用:
以下是一些常见的聚类算法:
K-means聚类是一种无监督学习算法,用于将未标记的数据集分组成不同的聚类/子集。“k”定义了在聚类过程中需要创建的预定义聚类的数量,例如,如果k=2,将有两个聚类;对于k=3,将有三个聚类,依此类推。作为一个基于质心的算法,“均值”在k-means聚类中与数据点的质心有关,每个聚类都与一个质心相关联。
K-means聚类算法主要执行两个任务:确定K个中心点或质心的最优化值,通过重复过程;将每个数据点分配给最近的k中心。聚类是通过将数据点分配给特定的k中心来创建的。
假设有两个变量X1和X2,以下是散点图的步骤:
将继续寻找新的质心,直到没有不相似的点在线条的两侧。现在可以移除假设的质心,最终的两个聚类将如下所示。
K-means聚类算法的性能高度依赖于它形成的聚类。选择最优的聚类数量是一项困难的任务。有多种方法可以找到最优的聚类数量,但这里讨论两种方法来找到聚类的数量或K值,即肘部法则和轮廓系数。
肘部法则是寻找最优聚类数量的最流行方法之一,该方法使用WCSS(聚类内平方和)来计算聚类内的总变化。
WCSS = ∑(Pi in Cluster1)(distance(Pi, C1))^2 + ∑(Pi in Cluster2)(distance(Pi, C2))^2 + ∑(Pi in Cluster3)(distance(Pi, C3))^2
在上述公式中,∑(Pi in Cluster1)(distance(Pi, C1))^2是每个数据点与其质心在Cluster1内的平方距离之和,其他两个项同理。
肘部法则的步骤包括:
例如,可以看到在k=3时有一个尖锐的弯曲,因此最优的聚类数量是3。
轮廓值是衡量一个对象与其自身聚类(凝聚力)相比其他聚类(分离度)的相似度的指标。轮廓值范围从-1到+1,高值表示对象与其自身聚类匹配良好,与邻近聚类匹配度低。如果大多数对象具有高值,则聚类配置适当。如果许多点具有低值或负值,则聚类配置可能聚类过多或过少。
# 导入所需的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 读取数据并查看前5个观测值
# 此处省略了探索性数据分析(EDA)的代码,该数据已经过清洗,适合分析。
# 由于K-means仅对数值数据执行,因此选择数值列进行分析。
# 现在,为了执行K-means聚类,需要找到聚类数量K值,可以使用以下代码,这里使用多个K值进行聚类,然后使用肘部法则选择最佳K值。
# 随着聚类数量的增加,方差(聚类内平方和)会减少。在3或4个聚类时的肘部表示在最小化聚类数量和最小化每个聚类内的方差之间最节俭的平衡,因此可以选择K值为3或4。
# 使用轮廓值方法找到K值。
# 如果观察,得到在n=3时最优的聚类数量,因此最终选择k=3作为K值。
# 使用k=3的值拟合K-means算法,并为聚类绘制热图。