数学建模python和matlab_数学建模及机器学习算法(一):聚类-kmeans(Python及MATLAB实现,包括k值选取与聚类效果评估)...

一、聚类的概念

聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。我们事先并不知道数据的正确结果(类标),通过聚类算法来发现和挖掘数据本身的结构信息,对数据进行分簇(分类)。聚类算法的目标是,簇内相似度高,簇间相似度低

二、基本的聚类分析算法

1. K均值(K-Means):

基于原型的、划分的距离技术,它试图发现用户指定个数(K)的簇。

2. 凝聚的层次距离:

思想是开始时,每个点都作为一个单点簇,然后,重复的合并两个最靠近的簇,直到尝试单个、包含所有点的簇。

3. DBSCAN:

一种基于密度的划分距离的算法,簇的个数有算法自动的确定,低密度中的点被视为噪声而忽略,因此其不产生完全聚类。

三、距离量度

不同的距离量度会对距离的结果产生影响,常见的距离量度如下所示:

SouthEast

SouthEast

四、K-Means

在聚类算法中K-Means算法是一种最流行的、使用最广泛的一种聚类算法,因为它的易于实现且计算效率也高。聚类算法的应用领域也是非常广泛的,包括不同类型的文档分类、音乐、电影、基于用户购买行为的分类、基于用户兴趣爱好来构建推荐系统等。

优点:易于实现

缺点:可能收敛于局部最小值,在大规模数据收敛慢

算法思想:

1 选择K个点作为初始质心2 repeat3 将每个点指派到最近的质心,形成K个簇4 重新计算每个簇的质心5 until 簇不发生变化或达到最大迭代次数

这里的重新计算每个簇的质心,更新过程是:首先找到与每个点距离最近的中心点,构成每个中心点划分的k个点集,然后对于每个点集,计算点的均值代替中心点。

如何计算是根据目标函数得来的,因此在开始时我们要考虑距离度量和目标函数。

考虑欧几里得距离的数据,使用误差平方和(Sum of the Squared Error,SSE)作为聚类的目标函数,两次运行K均值产生的两个不同的簇集,我们更喜欢SSE最小的那个:

SouthEast

k表示k个聚类中心,ci表示第几个中心,dist表示的是欧几里得距离。

前面说的我们更新质心是让所有的点的平均值,这里就是SSE所决定的:

SouthEast

因此K-Means算法的实现步骤,主要分为四个步骤:

1、从样本集合中随机抽取k个样本点作为初始簇的中心。

2、将每个样本点划分到距离它最近的中心点所代表的簇中。

3、用各个簇中所有样本点的中心点代表簇的中心点。

4、重复2和3,直到簇的中心点不变或达到设定的迭代次数或达到设定的容错范围。

五、k-means代码实现

本文采用sklearn来实现一个k-means算法的应用,细节的底层实现可见文末第一个链接。

1.首先使用sklearn的数据集,数据集中包含150个随机生成的点,样本点分为三个不同的簇:

1 from sklearn.datasets importmake_blobs2 importmatplotlib.pyplot as plt3

4

5 if __name__ == "__main__":6 '''

7 n_samples:代表样本点的个数8 n_features:表示每个样本由两个特征组成9 center:表示样本点中心的个数(簇)10 cluster_std:表示每个样本簇方差的大小11 '''

12 x,y = make_blobs(n_samples=150,n_features=2,centers=3,13 cluster_std=0.5,shuffle=True,random_state=0)14 #绘点

15 plt.scatter(x[:,0],x[:,1],marker="o",color="blue")16 #以表格的形式显示

17 plt.grid()18 plt.show()

效果

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值