k均值聚类

目录

一.k均值简介

二.应用简介

三.算法

四.选择合适的K

五.具体实例


 

 
 

一.k均值简介

  K均值聚类是一种无监督学习,对未标记的数据(即没有定义类别或组的数据)进行分类。 该算法的目标是在数据中找到由变量K标记的组。该算法迭代地工作基于所提供的特征,将每个数据点分配给K个组中的一个。 基于特征相似性对数据点进行聚类。 K均值聚类算法的结果是:
  1.K簇的质心,可用于标记新数据
  2.训练数据的标签(每个数据点分配给一个集群)
  

二.应用简介

  K均值聚类算法用于查找未在数据中明确标记的组。这可用于判别存在哪些类别特征或用于识别复杂数据集中的未知组。一旦运行算法并定义了组,就可以轻松地将任何新数据分配给正确的组。

  这是一种多功能算法,可用于任何类型的分组。具体的一些示例是:

  行为细分:

  • 按购买历史记录细分
  • 按应用程序,网站或平台上的活动进行细分
  • 根据兴趣定义角色
  • 根据活动监控创建配置文件

  库存分类:

  • 按销售活动分组库存
  • 按制造指标对库存进行分组

  分类传感器测量:

  • 检测运动传感器中的活动类型
  • 分组图像
  • 单独的音频
  • 确定健康监测中的群体

  检测机器人或异常:

  • 从机器人中分离出有效的活动组
  • 将有效活动分组以清除异常值检测

  此外,监视跟踪数据点是否随时间在组之间切换可用于检测数据中的有意义的变化。

三.算法

  Κ-means聚类算法使用迭代细化来产生最终结果。 算法输入是簇Κ的数量和数据集。 算法从Κ质心的初始估计开始,可以随机生成或从数据集中随机选择。 然后算法在两个步骤之间迭代:

  1.数据分配步骤:

  每个质心定义一个簇。 在此步骤中,基于平方欧几里德距离将每个数据点分配到其最近的质心。 更正式地说,如果ci是集合C中的质心集合,那么每个数据点x都被分配给一个基于集群的集群。

  其中,dist(·)是标准的欧几里德距离

  2.质心更新步骤:

  在此步骤中,重新计算质心。 这是通过获取分配给该质心簇的所有数据点的平均值来完成的。

  

  该算法在步骤1和步骤2之间迭代,直到满足停止标准(即没有数据点改变,或簇距离的总和最小化,或者达到一些最大迭代次数)。

  保证该算法收敛于结果。 结果可以是局部最优(不一定是最佳可能结果),这意味着用随机化起始质心评估算法需要次运行可以给出更好的结果。

四.选择合适的K

 

  该算法找到特定的K个簇和数据集标签。为了找到数据中的簇数,需要针对一系列K值运行K均值聚类算法并比较结果通常,没有用于确定K的精确值的方法,但是可以使用以下技术获得准确的估计:
  通常用于比较不同K值的结果的度量是我方法是数据点与其聚类质心之间的平均距离。由于增加簇的数量将总是减少到数据点的距离,因此当K与数据点的数量相同时,增加K将总是减小该度量,达到零。因此,该指标不能用作唯一目标。相反,绘制作为K的函数的到质心的平均距离,并且可以使用减小率急剧变化的“肘点”来粗略地确定K.

  存在许多用于验证K的其他技术,包括交叉验证,信息标准,信息理论跳跃方法,轮廓方法和G均值算法。此外,监视跨组的数据点分布可以深入了解算法如何分割每个K的数据。

五.具体实例

   下面进行实例聚类。考虑两个驾驶员功能:平均每天行驶距离以及驾驶员超过限速的平均时间百分比> 5英里/小时。 通常,只要数据样本的数量远大于特征的数量,该算法就可以用于任何数量的特征。数据:https://pan.baidu.com/s/1yT3870M8whYlMiQFC9Qq7Q

密码:wtcm

  1.导入数据并可视化

  

import numpy as np
import pandas as pd   
import matplotlib.pyplot as plt

df=pd.read_table('F:/wd.jupyter/datasets/km_data.txt')
X=np.array(df.iloc[:,1:])
plt.scatter(X[:,0],X[:,1])

数据实例:

 

下图显示了4,000个样本,其中x轴为距离特征,y轴为超速特征。

 

  2.选择合适的K进行算法迭代

  首先,选择k=2,利用 scikit-learn进行计算:

 

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=2).fit(X)

 

  kmeans.labels_. 可以用来查看类别。

  3.可视化结果

  利用kmeans.cluster_centers_来查看两个中心点:

  中心点1:(50.04763438, 8.82875 )

  中心点2: (180.017075,18.29)
查看聚类结果:
y_pred =kmeans.fit_predict(X)
plt.scatter(X[:,0], X[:,1],c=y_pred)
plt.show()

  

  4.重新选择k进行聚类

  选择k=4重复上述步骤

  

kmeans2 = KMeans(n_clusters=4).fit(X)
y_pred2 =kmeans2.fit_predict(X)

plt.scatter(X[:,0], X[:,1],c=y_pred2)

plt.show()

  

  当然,存在许多替代聚类算法,包括DBScan,谱聚类和使用高斯混合模型等等。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jin-liang/p/9521061.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: k均值聚类是一种常用的无监督学习算法,常用于将数据集划分为K个不同的类别。在Matlab中,可以利用k均值聚类算法对数据进行分析和聚类。 首先,需要在Matlab中加载数据集。可以使用Matlab内置的函数`load`或者`readtable`来读取数据。读取之后,应该对数据进行预处理,包括数据归一化和特征选择。 接下来,需要指定k值(即聚类的数目)。k值的选择可以通过试验和结果评估来确定。一般而言,可以通过使用一些启发式方法(如肘部法则或轮廓系数)来估计最佳的k值。 然后,可以使用Matlab内置的`kmeans`函数进行聚类。`kmeans`函数需要传入数据集和k值作为参数。此外,还可以指定其他选项,例如迭代次数、初始聚类中心等。 聚类完成后,可以通过可视化或其他方法来分析聚类结果。Matlab提供了许多可视化工具和函数,例如`scatter`、`plot`和`gscatter`等,它们可以帮助我们更好地理解聚类结果。 最后,对于聚类结果的评估,可以使用一些指标来度量聚类质量,如轮廓系数、互信息等。这些指标可以帮助我们了解聚类的效果,并与其他聚类算法进行比较。 总之,Matlab提供了丰富的函数和工具来支持k均值聚类。结合数据预处理、聚类算法、可视化和评估方法,我们可以在Matlab中进行有效的K均值聚类分析。但是需要注意的是,选择合适的k值和评估指标是进行聚类分析的关键,需要根据具体问题进行调整和选择。 ### 回答2: k均值聚类是一种常用的无监督机器学习算法,用于将数据集划分为k个不同的类别。在Matlab中,可以使用相关的工具箱或编写自定义代码来实现k均值聚类。 首先,需要确定聚类的数量k。然后,选择一组初始的聚类中心点。接下来的步骤是迭代地执行以下两个过程,直到收敛为止: 1. 分配阶段:计算每个数据点与k个聚类中心之间的距离,并将数据点分配给距离最近的聚类中心。 2. 更新阶段:根据分配结果,重新计算每个聚类的中心。这可以通过计算每个聚类中所有数据点的平均值来完成。 在Matlab中,可以使用kmeans函数来执行k均值聚类。该函数的输入参数包括数据集、聚类数量k和一些可选参数,如迭代次数和重复次数。调用kmeans函数后,它将返回聚类标签和聚类中心的坐标。 以下是一个简单的示例,展示如何使用Matlab进行k均值聚类: ```matlab % 载入数据集 load('data.mat'); % 设置聚类数量 k = 3; % 执行k均值聚类 [idx, centers] = kmeans(data, k); % 绘制聚类结果 figure; gscatter(data(:,1), data(:,2), idx); hold on; plot(centers(:,1), centers(:,2), 'k*', 'MarkerSize', 10); hold off; ``` 上述代码中,我们首先加载了一个名为'data.mat'的数据集。然后,我们设置聚类数量为3,调用kmeans函数执行k均值聚类。最后,我们使用gscatter函数将聚类结果绘制在图像上,并以星号标记表示聚类中心。 通过使用Matlab中的k均值聚类函数,我们可以轻松地进行聚类分析,并对数据集进行分类。 ### 回答3: k均值聚类是一种常用的聚类算法,主要用于将一组数据点按照其相似度划分为k个类别。Matlab是一个功能强大的数值计算和科学数据可视化软件,提供了丰富的工具和函数支持k均值聚类。 在Matlab中,可以使用k均值聚类函数kmeans实现聚类分析。该函数的基本语法如下: [idx, C] = kmeans(X, k) 其中,X是包含数据点的n×m矩阵,n表示样本数,m表示特征数;k表示要划分的类别数;idx是一个n×1的向量,表示每个数据点所属的类别;C是一个k×m的矩阵,表示每个类别的质心。 使用kmeans函数进行k均值聚类的步骤如下: 1. 准备数据:将要聚类的数据整理成n×m的矩阵X,确保每个样本的特征在一行内连续排列。 2. 设置k:决定要分为多少个类别。 3. 聚类分析:调用kmeans函数进行聚类分析,将数据矩阵X和类别数k作为输入参数。函数会返回每个数据点的类别和每个类别的质心。 4. 结果分析:根据idx和C的结果对数据进行分析。idx向量表示每个数据点所属的类别,C矩阵表示每个类别的质心。 5. 结果可视化:可以使用Matlab的图形绘制功能对聚类结果进行可视化展示。 需要注意的是,k均值聚类算法对初始质心的选择较为敏感,初步聚类结果可能存在局部最优解。为了得到较好的聚类结果,可以多次运行算法,选取效果最佳的结果。 总之,Matlab提供了方便的k均值聚类函数,可以帮助用户进行数据的聚类分析,并且通过图形化展示结果,更好地理解数据的特征和分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值