首页 > 编程语言 >【聚类算法】

【聚类算法】

时间:2024-08-12 21:55:27浏览次数:13  
标签:plt Means kmeans 算法 聚类 数据

聚类算法是一种无监督学习方法,用于将数据集中的数据点自动分组到不同的类别中,这些类别也称为“簇”或“群”。聚类的目标是让同一簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不相似。聚类算法广泛应用于多种领域,如数据挖掘、模式识别、图像分析、信息检索等。

聚类算法的基本概念

  • 无监督学习:聚类算法不需要事先标记数据点的类别标签,而是根据数据本身的相似性来分组。
  • 相似性度量:聚类算法依赖于某种相似性或距离度量来决定数据点之间的相似程度。常用的度量包括欧氏距离、曼哈顿距离等。
  • 目标函数:大多数聚类算法都会尝试最小化某种目标函数,例如簇内的平方误差和(SSE)。

常见的聚类算法

  1. K-Means

    • K-Means 是一种原型聚类算法,它通过迭代地将数据点分配到最近的质心来形成簇,并重新计算每个簇的质心,直到质心不再显著变化为止。
    • 在 Python 的 scikit-learn 库中,可以通过 KMeans 类实现 K-Means 聚类。
  2. 层次聚类

    • 层次聚类构建一个树状图(称为树状图或 dendrogram),显示数据点是如何逐渐合并成簇的。
    • 这种算法可以是凝聚型(自底向上)或分裂型(自顶向下)。
    • 层次聚类中,簇间距离的度量可以是单连接(最近邻)、完全连接(最远邻)或平均连接(簇间平均距离)。
  3. DBSCAN

    • DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度的聚类算法,它将密集区域划分为簇,并可以在数据中发现任意形状的簇。
    • DBSCAN 不需要预先指定簇的数量,并且可以识别噪声点。
  4. 谱聚类

    • 谱聚类利用图论中的谱方法来发现数据中的簇。
    • 它通过构建数据点之间的相似性图,然后通过图拉普拉斯矩阵的特征向量来寻找最优划分。
  5. Gaussian Mixture Models (GMM)

    • GMM 是一种基于概率的聚类方法,假设每个簇服从高斯分布,并通过最大似然估计来学习这些分布的参数。
    • GMM 使用期望最大化 (EM) 算法来优化模型参数。

聚类算法的应用

  • 用户画像:基于用户的活动或偏好进行聚类以了解用户群体。
  • 广告推荐:根据用户的兴趣或行为进行聚类以提供个性化推荐。
  • 搜索引擎优化:将搜索查询聚类以提高搜索结果的相关性。
  • 图像分割:用于图像处理和计算机视觉任务中的对象识别。
  • 异常检测:识别数据中的异常或离群点,如信用卡欺诈检测。

聚类算法的选择

选择合适的聚类算法取决于数据的特性和具体的应用需求。例如,如果数据集包含噪声或异常值,DBSCAN 可能比 K-Means 更合适。如果数据集中的簇是任意形状的,DBSCAN 或谱聚类可能更适用。在实际应用中,可能需要尝试几种不同的聚类算法,并使用评估指标(如轮廓系数、Calinski-Harabasz 指数等)来确定最佳的聚类结果。

当然可以!让我们考虑一个具体的聚类算法案例——使用 K-Means 对客户进行细分。在这个案例中,我们将探讨如何使用 K-Means 算法对顾客进行分类,以便更好地理解他们的购买行为并提供个性化的服务。

案例背景

假设你是一家零售公司的数据分析师,你的任务是对顾客进行细分,以便公司能够更好地理解不同类型的顾客,并据此制定营销策略。

数据准备

首先,你需要收集一些关于顾客的数据。这可能包括但不限于:

  • 年龄
  • 性别
  • 购买频率
  • 平均购买金额
  • 最近一次购买的时间

为了简化案例,我们只考虑两个变量:购买频率和平均购买金额。

实施步骤

  1. 数据收集与预处理

    • 收集历史交易数据。
    • 清洗数据,处理缺失值和异常值。
  2. 特征工程

    • 提取特征:购买频率和平均购买金额。
    • 如果需要,可以进行标准化或归一化处理。
  3. 模型训练

    • 选择 K-Means 算法。
    • 确定 K 的值(簇的数量)。可以通过肘部法则(Elbow Method)或其他方法来确定最优的 K 值。
  4. 模型评估

    • 分析聚类结果,确保聚类是有意义的。
  5. 应用结果

    • 将聚类结果应用于市场营销策略。

示例代码

下面是一个简化的 Python 示例,使用 scikit-learn 库来执行 K-Means 聚类。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 创建示例数据
data = {
    'Frequency': [1, 3, 5, 6, 8, 9, 12, 14, 15, 18, 20, 22, 24, 25, 28, 30],
    'AverageAmount': [100, 150, 120, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800]
}
df = pd.DataFrame(data)

# 数据标准化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)

# 选择 K 的值
k_values = range(1, 11)
inertias = []
for k in k_values:
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(scaled_data)
    inertias.append(kmeans.inertia_)

# 绘制肘部曲线
plt.figure(figsize=(10, 5))
plt.plot(k_values, inertias, marker='o')
plt.title('Elbow Curve')
plt.xlabel('Number of Clusters')
plt.ylabel('Inertia')
plt.show()

# 根据肘部曲线选择 K=3
kmeans = KMeans(n_clusters=3)
kmeans.fit(scaled_data)

# 可视化聚类结果
plt.figure(figsize=(10, 5))
plt.scatter(df['Frequency'], df['AverageAmount'], c=kmeans.labels_, cmap='viridis', s=50, alpha=0.5)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='x', label='Centroids')
plt.title('Customer Segmentation')
plt.xlabel('Frequency')
plt.ylabel('Average Amount')
plt.legend()
plt.show()

结果解释

通过上述代码,我们可以得到一个包含三个簇的客户细分结果。每个簇代表了一种类型的顾客,比如:

  • 低频低消费:可能需要激励措施来增加购买频率和金额。
  • 高频低消费:可能需要提高每次购买的金额。
  • 高频高消费:这些顾客可能是忠诚客户,值得更多的关注和服务。

通过这样的聚类分析,公司可以根据每个簇的特点来制定相应的营销策略,比如定向促销、会员奖励计划等。

这个案例展示了如何使用 K-Means 算法来进行基本的客户细分。在实际应用中,你可以根据需要添加更多的特征,并调整参数以获得更好的结果。
在这里插入图片描述
在这张散点图中,我们可以看到客户被分成了三个不同的群组(簇),每个群组由不同的颜色表示(蓝色、绿色和黄色),而红色的十字则表示每个簇的质心位置。

从图中可以看出:

蓝色簇:代表低频低消费的顾客。
绿色簇:代表高频低消费的顾客。
黄色簇:代表高频高消费的顾客。
每个簇的质心(红色十字)表示该簇客户的平均 Frequency 和 Average Amount。

标签:plt,Means,kmeans,算法,聚类,数据
From: https://blog.csdn.net/m0_52011717/article/details/141143067

相关文章

  • 字符串查找 - 模拟实现strstr 、BF算法 、 KMP算法
    文章目录前言一、模拟实现库函数strstr二、BF算法三、KMP算法总结前言路漫漫其修远兮,吾将上下而求索。一、模拟实现库函数strstrTips:此处采用利用指针+字符串末尾'\0'的判断,当然你可以利用数组的下标;库函数strstr的原型:char*strstr(constchar*str1,......
  • 用Python实现9大回归算法详解——01线形回归算法
    1.线性回归的基本概念线性回归是一种最基本的监督学习算法,用于预测因变量(目标变量)和一个或多个自变量(特征变量)之间的关系。线性回归假设因变量与自变量之间的关系是线性的,即可以用以下形式的线性方程来表示:其中: 是因变量(目标变量)。 是自变量(特征变量)。是截距项,表示当所......
  • 个性化推荐算法需要备案!
    政策要求:根据我国《互联网信息服务算法推荐管理规定》(以下简称《规定》)第六条,具有舆论属性或社会动员能力的互联网信息服务,包括个性化推荐算法,需要进行备案。个性化推荐算法:这种算法根据用户行为和偏好提供个性化内容,如个性化推送类,需要备案。评估自身:个性化推荐算法平台......
  • 2024年新SCI顶刊算法红嘴蓝鹊优化器RBMO优化Transformer模型的多变量时间序列预测
    matlabR2024a以上一、数据集二、2024年新SCI顶刊算法红嘴蓝鹊优化器RBMO红嘴蓝鹊优化算法(Red-billedbluemagpieoptimizer,RBMO)是一种新型的元启发式算法(智能优化算法),灵感来源于红嘴蓝鹊的合作、高效的捕食行为。该成果由ShengweiFu等人于2024年5月发表在SCI顶......
  • KMP算法的两种实现形式
    以leetcode28.实现strStr()为例:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"......
  • 排序算法之总述
    title:排序算法date:2024-7-1815:20:07+0800categories:汇总tags:排序算法时间复杂度汇总description:排序算法(sortingalgorithm)用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用,因为有序数据通常能够被更高效地查找、分析和处理。math:true排......
  • 排序算法之桶排序
    title:桶排序date:2024-7-2518:58:19+0800categories:排序算法tags:排序算法桶排序description:桶排序(bucketsort)是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶,每个桶对应一个数据范围,将数据平均分配到各个桶中;然后,在每个桶内部分别执行排序;最终按......
  • 排序算法之归并排序
    title:归并排序date:2024-7-1915:03:06+0800categories:排序算法tags:排序算法归并排序description:归并排序(MergeSort)是一种基于分治法的有效排序算法。它将一个列表分成较小的子列表,对每个子列表进行排序,然后合并这些子列表以产生一个有序列表。math:true......
  • NDT算法详解与C++实现
    点云匹配在感知环节是一个很重要的信息获取手段,而其中的算法也有几个比较经典了,例如ICP(IterativeClosestPoint,迭代最近点)算法,而本文决定记录学习的是NDT算法,也就是NormalDistributionTransform,正态分布变换算法。什么是正态分布变换算法呢,简言之,就是把空间中的点云进行整......
  • 2024华为OD笔试机试 - 模拟目录管理功能 (python/c++/java D卷C卷真题算法)
    华为OD机试(C卷+D卷)2024真题目录(Java&c++&python)题目描述实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。支持命令:创建目录命令:mkdir目录名称,如mkdirabc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命令无输出......