探索 KMeans 算法:强大的聚类模型

KMeans是一种简单但功能强大的无监督学习算法,用于将数据划分为预先定义的K个簇。通过识别数据点之间的相似性和差异,KMeans聚类提供了有价值的见解,可用于客户细分、异常检测、图像压缩等多种目的。

算法步骤

KMeans是一种迭代算法,其主要步骤如下:

初始化:随机选择K个数据点作为初始簇中心。

分配步骤:将每个数据点分配给最近的簇中心,形成K个簇。通常,这一步使用欧氏距离来度量数据点与簇中心之间的距离。

图片[1]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

更新步骤:更新每个簇的中心点,新的簇中心是该簇所有点的均值。

图片[2]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

重复步骤:重复步骤2和步骤3直到簇中心不再变化或变化很小,或者达到预设的迭代次数。

算法特点

目标函数:KMeans试图最小化簇内的方差。

图片[3]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

计算复杂度:KMeans算法的计算复杂度通常是O(n * k * iter * d),其中n是样本数,k是簇的数量,iter是迭代次数,d是每个样本的维度。

选择正确的集群数量

使用KMeans聚类的关键是确定最佳聚类数量K。以下是一些常用的方法:

  • 肘部法:根据成本函数(簇内误差平方和)随K值增加的变化情况找到肘部点。
  • 轮廓系数:计算不同K值的平均轮廓系数,并选择使该系数最大化的一个。
  • 领域知识:根据具体问题或上下文确定合适的K值。

案例分享

加载数据集

我们首先加载一个示例数据集,这里以”商场顾客”数据集为例。

<code>import pandas as pd # 加载数据集 file_path = 'sample_data/Mall_Customers.csv' df = pd.read_csv(file_path) # 显示数据集的前几行 df.head()</code>
图片[4]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

特征选择和数据预处理

我们选择了年龄、年收入和消费分数作为聚类的特征,并对数据进行了标准化处理。

<code>from sklearn.preprocessing import StandardScaler # 选择特征 df_cluster = df[['Age', 'Annual Income (k$)', 'Spending Score (1-100)']] # 数据标准化 scaler = StandardScaler() df_scaled = scaler.fit_transform(df_cluster)</code>

使用肘部法选择K值

<code>from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 应用K-means聚类并使用肘部法选择最佳K值 wcss = [] for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42) kmeans.fit(df_scaled) wcss.append(kmeans.inertia_) # 绘制肘部法图像 plt.figure(figsize=(10, 6)) plt.plot(range(1, 11), wcss) plt.title('The Elbow Method') plt.xlabel('Number of clusters') plt.ylabel('WCSS') plt.show()</code>
图片[5]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

根据肘部法,选择K=5。

应用KMeans并可视化结果

<code>import seaborn as sns # 应用KMeans kmeans = KMeans(n_clusters=5, init='k-means++', random_state=42) kmeans.fit(df_scaled) # 将聚类结果添加到原始数据集 df['Cluster'] = kmeans.labels_ # 根据年收入和消费分数可视化聚类结果 plt.figure(figsize=(10, 6)) sns.scatterplot(data=df, x='Annual Income (k$)', y='Spending Score (1-100)', hue='Cluster', palette='viridis') plt.title('Clusters of Customers') plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.legend(title='Cluster') plt.show()</code>
图片[6]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

解释结果

最后,我们分析生成的簇及其特征,评估聚类的质量。

<code>from yellowbrick.cluster import SilhouetteVisualizer fig, ax = plt.subplots(2, 2, figsize=(15,8)) num_clusters = [3, 4, 5, 6] for i, k in enumerate(num_clusters): km = KMeans(n_clusters=k, random_state=42) q, mod = divmod(i, 2) visualizer = SilhouetteVisualizer(km, colors='yellowbrick', ax=ax[q-1][mod]) visualizer.fit(df_scaled)</code>
图片[7]-探索 KMeans 算法:强大的聚类模型-山海云端论坛

结论

KMeans聚类是一种通用且广泛使用的数据分析和模式识别算法。通过将相似的数据点分组在一起,KMeans聚类提供了宝贵的见解,可以推动决策并揭示数据中隐藏的关系。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容