K-means聚类算法实现及应用
- 格式:doc
- 大小:30.00 KB
- 文档页数:11
kmeans算法代码摘要:1.K-means 算法简介2.K-means 算法的基本原理3.K-means 算法的代码实现4.K-means 算法的应用示例5.总结正文:一、K-means 算法简介K-means 算法是一种聚类算法,用于将一组数据分成K 个簇(cluster),使得每个数据点与其所属簇的中心点(均值)距离最小。
该算法是由J.MacQueen 在1967 年提出的,是数据挖掘和机器学习领域中常用的聚类方法之一。
二、K-means 算法的基本原理K-means 算法的基本原理可以概括为两个步骤:初始化中心点和迭代计算。
1.初始化中心点:在数据集中选择K 个数据点作为初始中心点,可以随机选择,也可以通过一定策略进行选择。
2.迭代计算:根据当前中心点,将数据集划分为K 个簇,每个数据点与其所属簇的中心点距离最小。
然后计算每个簇的中心点,并重复上述过程,直到中心点不再发生变化,聚类结果稳定。
三、K-means 算法的代码实现下面是一个简单的Python 实现,使用numpy 库进行计算:```pythonimport numpy as npdef kmeans(data, K, max_iters=100):# 初始化中心点centroids = data[np.random.choice(data.shape[0], K,replace=False)]for _ in range(max_iters):# 根据中心点划分簇labels = np.argmin(np.sum((data[:, np.newaxis] - centroids) ** 2, axis=2), axis=1)# 计算新的中心点new_centroids = np.array([data[labels == k].mean(axis=0) for k in range(K)])# 判断收敛条件,中心点变化小于1e-4 时停止迭代if np.linalg.norm(new_centroids - centroids) < 1e-4:breakcentroids = new_centroidsreturn centroids, labels# 示例数据data = np.random.rand(100, 2)# 进行K-means 聚类,K=2,最大迭代次数为100centroids, labels = kmeans(data, 2, max_iters=100)print("聚类结果:", labels)print("簇中心点:", centroids)```四、K-means 算法的应用示例K-means 算法广泛应用于数据挖掘、机器学习、图像处理等领域。
kmeans色彩聚类算法
K均值(K-means)色彩聚类算法是一种常见的无监督学习算法,用于将图像中的像素分组成具有相似颜色的集群。
该算法基于最小
化集群内部方差的原则,通过迭代寻找最优的集群中心来实现聚类。
首先,算法随机初始化K个集群中心(K为预先设定的参数),然后将每个像素分配到最接近的集群中心。
接下来,更新集群中心
为集群内所有像素的平均值,然后重新分配像素直到达到收敛条件。
最终,得到K个集群,每个集群代表一种颜色,图像中的像素根据
它们与集群中心的距离被归类到不同的集群中。
K均值色彩聚类算法的优点是简单且易于实现,对于大型数据
集也具有较高的效率。
然而,该算法也存在一些缺点,例如对初始
集群中心的选择敏感,可能收敛于局部最优解,对噪声和异常值敏
感等。
在实际应用中,K均值色彩聚类算法常被用于图像压缩、图像
分割以及图像检索等领域。
同时,为了提高算法的鲁棒性和效果,
通常会结合其他技术和方法,如颜色直方图、特征提取等。
此外,
还有一些改进的K均值算法,如加权K均值、谱聚类等,用于解决
K均值算法的局限性。
总之,K均值色彩聚类算法是一种常用的图像处理算法,通过对图像像素进行聚类,实现了图像的颜色分组和压缩,具有广泛的应用前景和研究价值。
kmeans的聚类算法K-means是一种常见的聚类算法,它可以将数据集划分为K个簇,每个簇包含相似的数据点。
在本文中,我们将详细介绍K-means算法的原理、步骤和应用。
一、K-means算法原理K-means算法基于以下两个假设:1. 每个簇的中心是该簇内所有点的平均值。
2. 每个点都属于距离其最近的中心所在的簇。
基于这两个假设,K-means算法通过迭代寻找最佳中心来实现聚类。
具体来说,该算法包括以下步骤:二、K-means算法步骤1. 随机选择k个数据点作为初始质心。
2. 将每个数据点分配到距离其最近的质心所在的簇。
3. 计算每个簇内所有数据点的平均值,并将其作为新质心。
4. 重复步骤2和3直到质心不再变化或达到预定迭代次数。
三、K-means算法应用1. 数据挖掘:将大量数据分成几组可以帮助我们发现其中隐含的规律2. 图像分割:将图像分成几个部分,每个部分可以看做是一个簇,从而实现图像的分割。
3. 生物学:通过对生物数据进行聚类可以帮助我们理解生物之间的相似性和差异性。
四、K-means算法优缺点1. 优点:(1)简单易懂,易于实现。
(2)计算效率高,适用于大规模数据集。
(3)结果可解释性强。
2. 缺点:(1)需要预先设定簇数K。
(2)对初始质心的选择敏感,可能会陷入局部最优解。
(3)无法处理非球形簇和噪声数据。
五、K-means算法改进1. K-means++:改进了初始质心的选择方法,能够更好地避免陷入局部最优解。
2. Mini-batch K-means:通过随机抽样来加快计算速度,在保证精度的同时降低了计算复杂度。
K-means算法是一种常见的聚类算法,它通过迭代寻找最佳中心来实现聚类。
该算法应用广泛,但也存在一些缺点。
针对这些缺点,我们可以采用改进方法来提高其效果。
实验设计过程及分析:1、通过通信企业数据(USER_INFO_M.csv),使用K-means算法实现运营商客户价值分析,并制定相应的营销策略。
(预处理,构建5个特征后确定K 值,构建模型并评价)代码:setwd("D:\\Mi\\数据挖掘\\")datafile<-read.csv("USER_INFO_M.csv")zscoredFile<- na.omit(datafile)set.seed(123) # 设置随机种子result <- kmeans(zscoredFile[,c(9,10,14,19,20)], 4) # 建立模型,找聚类中心为4round(result$centers, 3) # 查看聚类中心table(result$cluster) # 统计不同类别样本的数目# 画出分析雷达图par(cex=0.8)library(fmsb)max <- apply(result$centers, 2, max)min <- apply(result$centers, 2, min)df <- data.frame(rbind(max, min, result$centers))radarchart(df = df, seg =5, plty = c(1:4), vlcex = 1, plwd = 2)# 给雷达图加图例L <- 1for(i in 1:4){legend(1.3, L, legend = paste("VIP_LVL", i), lty = i, lwd = 3, col = i, bty = "n")L <- L - 0.2}运行结果:2、根据企业在2016.01-2016.03客户的短信、流量、通话、消费的使用情况及客户基本信息的数据,构建决策树模型,实现对流失客户的预测,F1值。
kmeans聚类算法应用实例K-Means聚类算法应用实例一、K-Means聚类算法简介K-Means聚类算法是一种基于凝聚属性的迭代算法,它旨在将数据集中的样本点分类划分到指定数量的簇中,以达到相关性最强的分组效果。
算法的核心思想是,寻找代表簇中心的聚类中心,并根据距离聚类中心的远近,将样本分类到不同的簇中。
K-Means聚类的目的是要求出最优的聚类中心,使得样本集可以被完美划分成K个簇。
二、K-Means聚类算法的应用实例(1)客群分析K-Means聚类算法可以帮助分析客户行为及消费习惯,自动归类用户构成不同客群,如:高价值客户,积极向上的客户,偶尔购买的客户,交易历史较短的客户,低价值客户等,使企业更明确地识别其客户,选择最佳的沟通方式,创造出最大的收益。
(2)市场营销用户的社会属性,行为属性和品牌属性等,都可以利用K-Means算法对用户进行分类,进而分析用户喜好,细分市场,在不同市场中采取不同的营销战略,从而从更佳的维度去理解市场消费行为,深入分析和把握客户的行为,改善企业的市场营销效果。
(3)图像聚类K-Means聚类算法也可以用于图像处理中的相似图像聚类,以减少用户在查看数据时需要处理太多图像。
它旨在将图像划分为几个集群,使得每个簇中的样本相似度最高。
K-Means聚类算法可以用于解决视觉识别任务中的分类问题,提高图像识别系统的正确率以及效率。
(4)故障诊断K-Means聚类也可以用于故障诊断,将系统参数情况分类,来区分出系统的故障,当某一参数的值远低于正常值时,可以准确的将其分类为异常值,从而确定系统存在什么故障,从而可以有效降低系统故障率,提高系统稳定性和可靠性。
三、四、K-Means聚类算法的优缺点(1)优点a. K-Means算法效率高,计算量少;b. K-Means算法易于实现,调参相对容易;c. K-Means算法执行简单,可轻松融入现有系统;d. K-Means具有 translation invariant, scale invariant等特性,可解决非线性问题;(2)缺点a. K-Means算法的缺点是受初始聚类中心的影响较大,其结果可能受噪声干扰;b. K-Means算法可能收敛到局部最佳解;c. K-Means算法不能解决不同量级聚类间隔差异大的问题;d. K-Means算法对异常值存在敏感性,容易影响到聚类结果。
k-模型的原理和应用原理k-模型,也称为k-means聚类模型,是一种常见的无监督学习算法。
其基本原理如下:1.初始化:选择要生成的k个聚类的初始中心点。
2.聚类过程:将每个样本点分配到离其最近的中心点,并更新聚类的中心点。
3.重复步骤2,直到满足停止准则(比如中心点不再变化)或达到最大迭代次数。
k-模型的核心思想是将样本点根据其特征进行分组,使得同组内的样本点之间的距离尽可能小,而不同组之间的距离尽可能大。
应用k-模型在各个领域中都有广泛的应用,以下是一些常见的应用场景:1.图像分割:通过将图像中的像素点聚类为不同的区域,从而实现图像的分割。
这对于图像处理、目标检测等应用非常有用。
2.客户细分:通过对客户的消费行为、偏好等进行聚类,可以将客户分为不同的细分群体,从而为市场营销、销售策略等决策提供参考。
3.文本挖掘:通过对文本进行聚类,可以将相似的文档归为一类,从而进行文本分类、情感分析等任务。
4.基因表达聚类:在生物信息学中,通过对基因表达数据进行聚类,可以帮助研究者发现潜在的基因功能、疾病等相关信息。
5.市场篮子分析:通过对顾客购物篮中的物品进行聚类,可以发现物品之间的关联性,进而实现商品推荐、交叉销售等目标。
6.无人驾驶:k-模型可以用于对车辆行驶轨迹进行聚类,从而识别出不同类型的驾驶行为,为无人驾驶系统提供决策依据。
7.虚拟现实:通过对虚拟现实中场景中的物体进行聚类,可以实现更加真实的场景仿真,提高用户体验。
k-模型的优点•算法简单,易于实现和理解。
•可扩展性强,适用于大规模数据集。
•在处理高维数据方面表现良好。
•无监督学习,不需要标注样本即可训练模型。
k-模型的缺点•需要事先确定要生成的聚类个数k,而且对初值敏感。
•对异常值较为敏感,可能导致聚类结果不准确。
•无法处理非凸形状的聚类。
总结k-模型作为一种常见的聚类算法,具有广泛的应用场景。
通过对各个样本点进行分组,可以实现多领域的数据分析、决策等任务。
python中kmeans函数用法《Python中kmeans函数的用法》引言:K-means是一种常用的聚类算法,通过将数据集分成k个簇,使得每个数据点都属于最近的质心(簇中心)。
在Python中,我们可以使用scikit-learn库中的k-means函数来实现这个算法。
本文将详细介绍Python中k-means函数的用法,步骤包括:导入库、数据准备、使用k-means聚类、结果分析等。
一、导入库:首先,我们需要导入所需的库。
在Python中,我们可以使用sklearn.cluster库中的KMeans函数来实现k-means算法。
此外,还需要导入numpy、matplotlib等库来处理数据和可视化结果。
下面是导入库的示例代码:pythonimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans二、数据准备:在应用k-means算法之前,我们需要准备用于聚类的数据。
通常情况下,我们将数据存储在一个二维数组中,每一行代表一个样本,每一列代表一个特征。
在本文中,我们将使用一个简单的示例数据集来进行说明。
下面是数据准备的示例代码:pythonX = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])三、使用k-means聚类:在准备好数据后,我们可以开始运用k-means算法进行聚类。
首先,我们需要创建一个KMeans对象,然后使用fit方法来对数据进行训练。
下面是使用k-means聚类的示例代码:pythonkmeans = KMeans(n_clusters=2)kmeans.fit(X)在上述示例代码中,我们创建了一个包含2个簇的KMeans对象,并对数据集X进行训练。
根据需要,您可以将n_clusters参数设置为您想要的簇的数量。
k-means聚类算法研究及应用
K-means聚类算法研究及应用
一、简介
K-means聚类算法是一种非监督学习算法,它是一种广泛应用在模式分类和无监督式学习的数据挖掘技术。
它使用了基于距离的聚类算法,以相似性作为衡量子簇类别的标准,任务是将样本(属性)空间中的数据分为K个不同的类,使聚类的误差平方和最小化:通常假设样本由簇中心所处的子空间所构建,每个子空间由一个簇中心控制,因此K-means算法常常被形象地称为“均值聚类”算法。
二、原理
K-means聚类算法是一种迭代算法,它的基本思想是:首先,随机选取若干个“簇中心”,然后将其他的数据点根据其与“簇中心”的距离,归到最近的“簇中心”所代表的簇中。
然后根据新聚集的簇,重新更新这些“簇中心”;如此不断迭代,最终计算得到一组稳定的“簇中心”,这组“簇中心”所代表的簇就是最后的结果了。
三、应用
1、生物信息学:K-means聚类算法用于基因芯片和定量PCR,以及蛋白质表达数据。
2、计算机视觉:K-means用于图像分割,聚类,像素重新分配等。
3、自然语言处理:K-means用于文本聚类,文档分类,文本挖掘等方面。
4、机器学习:K-means用于各种拟合问题,比如参数估计,探索异常
值等等。
四、总结
K-means聚类算法是一种简单高效的聚类算法,它可以有效地将数据空间分割成几个簇,属于非监督学习算法,它的核心在于划分数据空间,对数据的模式分类和无监督式学习有较好的应用,如生物信息学、计
算机视觉、自然语言处理、机器学习等领域。
K-means算法是一种常用的聚类分析方法,其应用场景广泛,包括数据挖掘、图像处理、文本分析等领域。
以下是一个简单的K-means算法应用实例,用于对一组二维数据进行聚类分析:
1.准备数据:首先,需要准备一组二维数据,这些数据可以是随机生成的,也
可以是从实际数据集中抽取的。
在本例中,我们使用随机生成的数据。
2.初始化聚类中心:选择K个初始聚类中心,这些中心点通常是随机选取的。
在本例中,我们选择三个初始中心点。
3.分配数据点到聚类中心:根据每个数据点到各个聚类中心的距离,将每个数
据点分配到最近的聚类中心所在的簇中。
在本例中,我们使用欧氏距离作为距离度量标准。
4.更新聚类中心:根据每个簇内所有数据点的平均值,重新计算每个簇的聚类
中心。
在本例中,我们计算每个簇内所有数据点的平均值,并将其作为新的聚类中心。
5.重复步骤3和4:重复步骤3和4,直到聚类中心不再发生变化或者达到预
设的迭代次数。
在本例中,我们迭代10次。
6.结果展示:最终得到的聚类结果可以通过图形化方式展示出来。
在本例中,
我们将每个簇用不同的颜色表示,并绘制出聚类结果图。
通过以上步骤,我们可以得到K-means算法的应用实例。
在实际应用中,需要根据具体的数据集和问题选择合适的参数和方法,并对结果进行合理的解释和分析。
kmean计算聚类中心点K-means是一种常用的聚类算法,用于将数据集分成多个类别,并找出每个类别的聚类中心点。
在本文中,我们将讨论K-means算法的原理、应用和优缺点。
一、K-means算法原理K-means算法是一种迭代的聚类算法,其基本步骤如下:1. 初始化:随机选择K个数据点作为初始聚类中心点。
2. 分类:将数据集中的每个数据点分配到与其最近的聚类中心点所属的类别。
3. 更新:根据每个类别中的数据点,重新计算聚类中心点的位置。
4. 重复步骤2和步骤3,直到聚类中心点的位置不再改变,或者达到预定的迭代次数。
二、K-means算法应用K-means算法在数据挖掘和机器学习领域被广泛应用,例如:1. 客户细分:根据客户的消费行为和偏好,将客户分成不同的群体,以便进行个性化的营销策略。
2. 图像压缩:通过将相似的像素点归为一类,用聚类中心点来代替这些像素点,从而实现图像的压缩。
3. 文本分类:将文本数据根据语义和主题进行分类,以便进行信息检索、情感分析等应用。
4. 基因表达谱聚类:将基因表达谱数据分成不同的基因簇,以便研究基因的功能和相互作用。
三、K-means算法优缺点K-means算法具有以下优点:1. 简单而高效:K-means算法的原理和实现都相对简单,计算效率较高。
2. 可解释性强:K-means算法的结果易于理解和解释,每个聚类中心点代表一个类别。
3. 可扩展性好:K-means算法适用于大规模的数据集,并且可以通过并行化和分布式计算来加速处理。
然而,K-means算法也存在一些缺点:1. 对初始聚类中心点敏感:初始聚类中心点的选择可能导致不同的聚类结果,需要多次运行算法来选择最佳结果。
2. 需要预先指定聚类数量:K-means算法需要事先确定聚类的数量K,而这个值可能不容易确定。
3. 对离群点敏感:离群点的存在可能会对聚类的结果产生较大的影响,导致聚类中心点偏离实际的数据分布。
K-means聚类算法的实现及应用内容摘要本文在分析和实现经典k-means算法的基础上,针对初始类中心选择问题,结合已有的工作,基于对象距离和密度对算法进行了改进。
在算法实现部分使用vc6.0作为开发环境、sql sever2005作为后台数据库对算法进行了验证,实验表明,改进后的算法可以提高算法稳定性,并减少迭代次数。
关键字 k-means;随机聚类;优化聚类;记录的密度1 引言1.1聚类相关知识介绍聚类分析是直接比较各事物之间性质,将性质相近的归为一类,将性质不同的归为一类,在医学实践中也经常需要做一些分类工作。
如根据病人一系列症状、体征和生化检查的结果,将其划分成某几种方法适合用于甲类病的检查,另几种方法适合用于乙类病的检查,等等。
聚类分析被广泛研究了许多年。
基于聚类分析的工具已经被加入到许多统计分析软件或系统中,入s-plus,spss,以及sas。
大体上,聚类算法可以划分为如下几类:1) 划分方法。
2) 层次方法。
3) 基于密度的算法。
4) 基于网格的方法。
5) 基于模型的方法。
1.2 研究聚类算法的意义在很多情况下,研究的目标之间很难找到直接的联系,很难用理论的途径去解决。
在各目标之间找不到明显的关联,所能得到的只是些模糊的认识,由长期的经验所形成的感知和由测量所积累的数据。
因此,若能用计算机技术对以往的经验、观察、数据进行总结,寻找个目标间的各种联系或目标的优化区域、优化方向,则是对实际问题的解决具有指导意义和应用价值的。
在无监督情况下,我们可以尝试多种方式描述问题,其中之一是将问题陈述为对数分组或聚类的处理。
尽管得到的聚类算法没有明显的理论性,但它确实是模式识别研究中非常有用的一类技术。
聚类是一个将数据集划分为若干聚类的过程,是同一聚类具有较高相似性,不同聚类不具相似性,相似或不相似根据数据的属性值来度量,通常使用基于距离的方法。
通过聚类,可以发现数据密集和稀疏的区域,从而发现数据整体的分布模式,以及数据属性间有意义的关联。
2 k-means算法简介2.1 k-means算法描述k-means 算法接受输入量k,然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高,而不同聚类中的对象相似度较小。
聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”来进行计算的。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。
一般都采用均方差作为标准测度函数。
k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
2.2 k-means算法实现步骤在原始的k-means算法中,由于数据对象的分类被不断地调整,因此平均误差准则函数在每次迭代过程中的值必定在不断减小。
当没有数据对象被调整时,e(e指每个对象到该类中心的距离平方之和)的值不再变化,说明算法运行结果已经达到最优,同时算法运行结束。
(1)给定大小为 n 的数据集,令 i =1,选取 k 个初始聚类中心 z j(i),j =1,2,3,...,k ;(2)计算每个数据对象与聚类中心的距离d(xi,zj(i));其中 i=1,2,3,…,n,j=1,2,3,…,k,如果满足xi 到wk的聚类中心距离最小则xi∈wk;(3)令i=i+1,计算k个新的聚类中心;j=1,2,3,…,k以及平均误差准则函数e的值(4)判断:若 e(i+1)=e(i)则算法结束,否则i=i+1,返回继续执行(2)步。
从上面步骤可以看出,该算法的特点为调整一个数据对象后就修改一次聚类中心和准则函数e的值,当考察完n个数据对象后,一次迭代运算完成,新的聚类中心和e值也计算出来了。
如果在一次迭代前后,e的值没有变化,说明算法已经收敛,即使用准则e作为算法是否结束的依据。
在迭代的过程中,e值逐渐减小,直到它的最小值为止。
在算法的每次迭代过程中,把每一个数据对象分到离它最近的聚类中心所在的簇。
3. k-means算法初始类中心的选择3.1 经典k-means算法初始类中心选择方法先从需要聚类的所有对象中随机选取一个对象作为第一个初始聚类中心,然后从剩下的记录中随机选出下一个初始类中心,如此依次得到所有初始聚类中心,这样避免的类中心的重复。
c++语言实现如下:m_numcluster指要聚类的数目,m_object[]保存记录对象,index_cluster[]保存初始类中心在m_object[]中的下标。
3.2 改进k-means算法类中心选择方法本文列出了2种选择初始类中心的优化方法:远距离优化法和最大密度优化法。
3.2.1初始类中心的选择——远距离改进法在k-means算法中,选择不同的初始聚类中心会产生不同的聚类结果且有不同的准确率.研究的目的就是如何一开始就可以快速,尽可能准确的找到数据在空间分布上的初始聚类中心,从而对数据进行划分.在用欧氏距离作为相似性度量的k-means算法中,相互距离最远的数据对象比随机取的数据对象更具有代表性,它们属于不同聚类的可能性比较大.如果能够寻找到是个相对距离最远的数据对象,它们分别代表了k个不同的数据集合,那么就可以找到与数据在空间分布上相一致的初始聚类中心.为了找到与数据在空间分布上相一致的、相似程度较大的数据集合。
找最远距离的两个对象步骤如下:确定需要划分簇的个数k,计算数据对象两两之间的距离;找出距离最远的两个数据对象,形成两个独立的数据对象a1 和a2;计算数据对象a1 ,a2。
与数据对象集合u中每一个样本的距离,找出在u中与a1 ,a2同时最远的数据对象,将它作为数据对象a3。
重复上面的过程,直到确定了ak个数据对象为止,形成k个初始聚类中心.根据排列组合可知,求距离语句的频度为cn2 =n(n-1)/2,则其时间复杂度为o(n2);如果对时间效率有要求,显然是不妥的。
我们不用找最远的两个数据对象,我们只要找到最终不聚到一个类中的两个数据对象。
试验中我采用的是找两个相距较远(尽可能使其最终不再一个类中)的数据对象作为前两个初始聚类中心,这是一种更高效的方法:先找出边界上的对象(拿二维数据对象举例来说,即是用一个矩形框刚好将所有数据对象围住,如图1所示,三维数据对象是用矩形体刚好把所有数据对象框住),得到k个点,从k个点中找最远的两个点。
一般情况边界点数目k远远小于n个(n为所有聚类对象数目),如下图1:图1边界对象展示先遍历一遍所有数据对象找到出现过的最小的和最大的横纵坐标,再遍历一遍所有数据对象保存下边界数据对象,再求边界数据对象的最远距离,若边界数据对象是k个,关键语句执行频度为2n+ck2,则其时间复杂度为o(n);由此可见,当数据量很大时,第2种初始化类中心方法效率高很多。
在找到两个相距较远的数据对象作为聚类中心后,找接下来的据类中心,我们很容易想到3种方法:(1)找到离已知类中心最近距离最大的数据记录;(2)找到离已知类中心最远距离最小的数据记录;(3)找到离已知类中心最远距离最大的数据记录;但其中只有第一种是合适的,第二种和第三种都是不合理的。
我们找接下来的初始类中心,是希望这个记录与已知的类中心相比具有一定的独立性,最后聚类完成后属于不同的类簇中。
3.2.2初始类中心的选择——密度最大改进法3.2.2.1 邻域和密度的说明我们可以认为每一个聚类对象也就是数据记录都有一个邻域,邻域中的数据记录代表一个对象在所有对象中的位置,它可以体现该对象周围数据记录的密集程度,若一个对象的周围团结的很多其他对象,我们则认为这个对象的密度很大,相反,则认为其密度很小。
3.2.2.2 密度的求法对于数据记录,我们大多时候直接根据距离来归类,所以我们通过统计以该对象为中心,半径为r(r大小可据情况而定)的区域中记录的数目来计算该对象的密度。
当一个聚类对象的密度很大时,其周围的其他对象肯定很密集,其最终成为收敛的聚类中心或就在收敛类中心附近的概率就会很大,这样聚类过程中,把类中心渐渐合理化的迭代过程就会减少。
可以避免最大距离改进法中较远散落点的缺陷。
4.实验及结果分析比较本文选取了两个数据集分别对上述算法进行了测试。
第一个数据集是一些二维点的集合,这些点可以通过我开发的k-means聚类程序手动生成,如5所示;第二个数据集是从数据库中的学生考试成绩的集合,如表2所示。
4.1实验一分析(1)聚类效果图2、图3、图4分别展示了某次随机聚类、远距离优化聚类、最大密度优化聚类的结果(求密度时r=30)。
从中可以看出,在随机的情况比较好的时候,其聚类结果与优化后相似。
但是随机聚类是不稳定的,有些时候,随机聚类会出现效果不稳定的结果,如下图是随机聚类中出现不稳定结果的展示:(2)迭代次数下表是十次试验中各种聚类方法迭代次数比较,我们可以看出对于上图中的数据对象,最大密度优化法效果最优,远距离优化法次之,随机聚类最差。
上表计算结果:随机聚类平均迭代次数为6.5;远距离优化法迭代次数为3;最大距离优化法迭代次数为4。
可知远距离优化法和最大密度优化法都能带来较大的时间效率,随机聚类的时间开销较大。
4.2实验二分析(1)聚类效果下表是本次试验的聚类对象此表表示的意义是:根据english,math,cs这三门成绩聚类,class字段表示随机聚类的结果,class_youhua表示最大密度优化法聚类后的结果,average表示平均成绩。
如表2所示,实验处理的对象是数值型(只对3门成绩处理),次试验中我们选择的邻域半径为10。
按此方法,求得图10中各个记录的密度如下表:由表三可知记录14 的密度最大为5,故将选为第一个初始类中心。
(2) 聚类效果的比较我们先认为将平均成绩分为5类:[85,100]为第一类,[70,85)为第二类,[55,70)为第三类,[40,55)为第四类,[0,40)为第五类。
聚类结果的效果有图10中class和class_youhua两个字段体现,这两个字段中的数字代表某一类,但不是每次0都是代表成绩最好的那一类,4代表最差的那一类,也许是每次代表不同的意义,但我们可以简单地看出其代表的好坏意义。
例如本次实验中,对于随机聚类成绩由好到坏代表的依次是0、4、1、2、3,根据统计的平均成绩,0代表的成绩区间为[93,97.3],4代表的成绩区间为[76,82],1代表的成绩区间为[68.6,77.6],2代表的成绩区间为[49.6,62],3代表的成绩为44;对于最大密度优化聚类成绩由好到坏代表的已依次是0、4、2、3、1,0代表的成绩区间为[84.6,97.3],4代表的成绩区间为[76,82],2代表的成绩区间为[62,72],3代表的成绩56,1代表的成绩区间为[44,51.6]。