打印
[技术讨论]

【洞幺邦】K-means聚类分析在实例中的应用

[复制链接]
1268|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1K-means聚类算法基本理论

1.1 基本定义

亦称为k均值聚类算法,其评价指标为各基本粒子间的距离。当两个对象间距离越近,则认为其相似度就越大。最终将整个粒子群体划分为具有多个独立中心的“簇”。

1.2 算法核心思想

K-means聚类是一种迭代求解的聚类分析算法,通过随机设置聚类中心,计算各粒子距离并划分其类别。其中,聚类中心以及分配给它们的对象就代表一个聚类,每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件从而完成整个算法过程。

1.3 多种常用代码形式

使用方法:

      Idx=Kmeans(X,K)

      [Idx,C]=Kmeans(X,K)

      [Idx,C,sumD]=Kmeans(X,K)

      [Idx,C,sumD,D]=Kmeans(X,K)

      […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)

各输入输出参数介绍:

       X :N*P的数据矩阵

       K: 表示将X划分为几类,为整数

       Idx :N*1的向量,存储的是每个点的聚类标号

       C: K*P的矩阵,存储的是K个聚类质心位置

      sumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和

      D N*K的矩阵,存储的是每个点与所有质心的距离

      […]=Kmeans(…,'Param1',Val1,'Param2',Val2,…)

1.4 算法优缺点

优点:(1)原理比较简单,实现也是很容易,收敛速度快;(2)当结果簇是密集的,而簇与簇之间区别明显时, 它的效果较好;(3)主要需要调参的参数仅仅是簇数k。

缺点:(1)K值需要预先给定,很多情况下K值的估计是非常困难的;(2)K-Means算法对初始选取的质心点是敏感的,不同的随机种子点得到的聚类结果完全不同 ,对结果影响很大;(3)对噪音和异常点比较的敏感。用来检测异常值;(4)采用迭代方法,可能只能得到局部的最优解,而无法得到全局的最优解。

1.5 计算步骤

在进行不同分段划分时,考虑到采集到的通航环境数据量较大,处理相对较为复杂,因此,本例中将直接选用最经典且能很好适用于大样本数据的K-means聚类算法,该聚类算法计算步骤如下:

① 设定初始聚类种群K,即数据划分后的类别数。一般可通过设定不同的K值,比较聚类后误差平方和的变化趋势来确定,当误差平方和变化趋势出现拐点时,对应的K值即为设定值。

② 随机选取K个对象作为聚类中心,然后计算每个对象与聚类中心的距离,把每个对象分配给距离它最近的聚类中心形成K类。

③ 计算每类数的平均值,并作为下一个聚类中心。

④ 重复(2)、(3)直到满足终止条件。终止条件可以是没有对象被重新分配给不同的聚类或误差平方和局部最小。

K-means聚类算法是一种非监督学习算法,利用该算法时只需要设定K即可,步骤(2)、(3)和(4)均可通过相关软件直接实现。

2 K-means聚类算法在实例中的应用

为了对所学的相关深度学习方法进行有效合理的使用,在本例选择以艘船舶在实际航行过程中通过搭载的通航环境数据采集系统获得的实际营运过程中的相关数据为基础,通过利用K-means聚类算法为工具,对研究对象船舶在整个航线(上海—重庆,其中经过的航区为:上海-南京、南京-池州、池州-武汉、武汉-宜昌、宜昌-丰都、丰都-重庆)中不同区域内的通航环境进行种类划分,为实现船舶的高效管理和有效降低船舶的尾气污染排放问题提供可能性。具体原理为:首先将获得的有效数据进行合理的处理,降低其数据自身的错误影响;然后基于处理后的有效数据为基础,进行归一化处理,以降低各种数据的冗余性,减少数据数量级不同而造成的不必要影响,最后基于K-means聚类相关理论知识进行数据的聚类划分,实现整个航线的不同分段划分,为船舶在实际的航行过程中处于特定的航行区域内时进行相关的航行操作提供理论的指导。

2.1K-means聚类算法实现

基于以上的K-means聚类理论知识,对实际数据进行聚类分析处理。首先进行聚类前分析处理,即进行相关归一化处理,降低各种数据的数量级间的区别,减小数量级因素差别的影响;然后再基于处理后的数据进行聚类分析。

(1)聚类前数据处理。

首先通过查阅相关资料获得船舶实际营运能效数据,然后根据聚类前数据处理的方法,对原始数据进行了数据删除和归一化处理,并将归一化处理之后的数据与自身的权重相乘,完成了聚类前数据的处理,部分处理后的通航环境数据如下表1所示。










(2)K-means聚类。将各个航段初始聚类种群依次设定为1~10分别进行了聚类,利用误差平方和变化趋势确定了各个码头之间初始聚类集群数K,如表4-3所示。在以上操作的基础上,将处理后的上海-重庆的50余万条通航环境数据进行聚类,将聚类结果中的一类数定义为一个航段类别,上海-南京段聚出了4个航段类别,南京-池州段聚出了3个航段类别,池州-武汉段聚出了3个航段类别,武汉-宜昌聚出了3个航段类别,宜昌-丰都聚出了5个航段类别,宜昌-丰都聚出了4个航段类别,航段类别的分布如图1所示。



















a)上海-南京段








b)南京-池州段










c)池州-武汉段










d)武汉-宜昌段










e)宜昌-丰都段










f)丰都-重庆段

图1   基于K-means算法各大航段内聚类结果

根据航段类别的分布可以看出,K-means聚类算法将上海-南京分为231小段,南京-池州分为144小段,池州-武汉分为57小段,武汉-宜昌分为123小段,宜昌-丰都分为50小段,丰都-重庆分为263小段,将整个航线共分为868段。

各个航段类别的通航环境利用各聚类结果的质心还原处理来近似表示,各个区域内航段类别与通航环境的关系如表3所示。










2.2 结果展现

本例中以一艘运行于上海到重庆的船舶航行过程中采集到的通航环境数据为基础,通过利用K-means聚类算法的相关理论知识,进行整个航线的不同航段的划分,其中划分的理论依据是基于数据中各个不同区域内采集到的数据特征出现明显的区别,从而比较符合K-means聚类算法的使用范围,因此,基于算法实现整个通航环境特征的划分,通过以上的数据预处理以及数据的相关归一化处理,最终获得划分后的结果,总结如下:

K-means聚类算法将上海-南京分为231小段,南京-池州分为144小段,池州-武汉分为57小段,武汉-宜昌分为123小段,宜昌-丰都分为50小段,丰都-重庆分为263小段,将整个航线共分为868段。但是其中部分的航段较小,对于船舶的正常航行不适用,因此可以将较小的航段归并到相邻段,最终得到的划分结果为:上海-南京大航段分为10小段,南京-池州大航段分为7小段,池州-武汉大航段分为6小段,武汉-宜昌大航段分为11小段,宜昌-丰都大航段分为12小段,丰都-重庆大航段分8小段,上海-南京整个航程共分为54段。


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

11

帖子

1

粉丝