基于Kmeans算法的城市聚类

目录

一、 背景

二、 设计平台及技术理论

2.1.设计平台——Jupyter Notebook

2.1.1 交互性:

2.1.2可视化:

2.1.3文档性:

2.1.4多语言支持:

2.1.5方便分享:

2.1.6生态系统丰富:

2.2.技术理论

2.2.1kmeans算法

2.2.2算法缺陷

2.2.3算法改进

2.2.2Python库的使用

2.2.3.1 Numpy

2.2.3.2 Pandas

2.2.3.3 Matplotlib

2.2.3.3.4Matplotlib

三、 前期准备

3.1导入所需Python库

3.2获取API使用权限

四、 实际操作

五、 总结

  • 背景

现在旅游业蓬勃发展,人们经常出行旅游感受祖国大好风光,那么如何最短距离的有规划性的选择目的地以及周边地区进行旅游,是各大旅游商们需要解决的问题。机器学习中通过Kmeans算法可以有效地将城市进行聚类,从而给出一定范围内最适合的旅游地点进行推送。

KMeans聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。

先假定有游客想要选择来新疆旅游,但他对新疆不太了解,已知新疆各城市的城市名,要求利用经纬度坐标进行KMeans聚类分析。

因为kmeans是无监督学习中一种聚类算法,换句话说:喂给该算法模型都是无label的数据,杂乱无章,而本实验采用的数据集没有label所以本实验采用kmeans算法。

  • 设计平台及技术理论

2.1.设计平台——Jupyter Notebook

2.1.1 交互性:

Jupyter Notebook提供了交互式的编程环境,可以即时运行代码并查看结果,方便调试和实时反馈。

2.1.2可视化:

Jupyter Notebook支持丰富的数据可视化功能,可以直接在Notebook中展示图表、图片、动画等,便于数据分析和展示。

2.1.3文档性:

Jupyter Notebook可以直接嵌入文本、公式、图表等内容,方便编写和分享代码文档,适合教学、报告和研究。

2.1.4多语言支持:

Jupyter Notebook支持多种编程语言,包括Python、R、Julia等,可以在同一个Notebook中混合使用不同语言编写代码。

2.1.5方便分享:

Jupyter Notebook可以导出为HTML、PDF、Markdown等格式,方便分享和展示成果。

2.1.6生态系统丰富:

Jupyter Notebook有丰富的扩展和插件,可以满足不同需求,例如数据处理、机器学习、深度学习等。

总之,Jupyter Notebook具有交互性强、可视化丰富、文档性好、多语言支持等优点,适合数据分析、科学计算和教学等领域的使用。

2.2.技术理论

2.2.1kmeans算法

K-Means聚类算法是一种基于向量距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此它把得到紧凑且独立的类簇作为聚类的最终目标。

综上所述,K-Means算法划分的k个聚类具有以下特点:各聚类内部的元素尽可能的紧凑,而各聚类之间的元素尽可能的分开

K-Means算法的基础是最小误差平方和准则,K-Means算法具体流程如下:

(1)从n个样本对象任意选择k个对象作为初始聚类中心;

(2)根据在步骤 (1) 中设置的k个聚类中心,计算每个对象与这k个中心的距离;

(3)经过步骤 (2) 的计算,所有对象与这个k个中心的距离就计算出来了,接着把所有对象与离它最近的中心归在一个类簇中;

(4)重新计算每个类簇的中心对象的位置;

(5)重复步骤 (3) 和 (4),直到类簇聚类方案中的对象归类几乎不发生变化为止。

2.2.2算法缺陷

(1)种子点的个数要事先确定,但是我们一般很难估计它的个数。

(2)K-Means算法需要初始种子点,并且随机种子会影响计算结果。

(3)需要不断地计算调整后的类簇中心,当数据量很大时,这个计算所需的时间就会很大。

2.2.3算法改进

K-Means++算法是改进后的K-Means算法,具体算法流程如下:

(1)从数据集的点中随机选择一个点作为种子点;

(2)计算数据集中的每一个点到种子点的距离D(x);

(3)选择D(x)较大的点作为新的种子点;

(4)重复步骤 (2) 和 (3)直到新的种子被选出来。

2.2.2Python库的使用

2.2.3.1 Numpy

NumPy是一个用于数值计算的Python库,它提供了多维数组对象和用于处理数组的各种函数。NumPy还提供了大量的数学函数,用于线性代数、傅立叶变换、随机数生成等。由于NumPy的数组运算速度快且内存占用低,因此它被广泛应用于科学计算、数据分析、机器学习等领域。因此NumPy是Python数据科学生态系统中不可或缺的部分,为处理大规模数据和进行复杂计算提供了强大的支持。

2.2.3.2 Pandas

Pandas 是一个基于 Python 的数据分析库,提供了快速、灵活、简单的数据结构,使数据操作更为便捷。Pandas 提供了许多功能,包括数据清洗、数据重塑、切片和索引、合并和连接、时间序列分析等。它广泛应用于数据科学、机器学习、金融分析等领域。Pandas 的灵活性和强大功能使得它成为数据分析领域的重要工具之一。

2.2.3.3 Matplotlib

Matplotlib是一个用于创建静态、交互式和动态可视化的Python库。Matplotlib可以创建折线图、散点图、直方图、饼图、等高线图、3D图等多种类型的图表。它还支持自定义图表的样式、颜色、标签和图例等元素,使用户能够创建具有吸引力和信息丰富的图表。同时Matplotlib还与许多其他Python库和工具集成,如NumPy、Pandas等,使用户能够轻松地将数据导入到图表中,并进行数据分析和可视化。Matplotlib是一个功能强大且灵活的可视化工具,适用于各种数据分析和可视化需求。

2.2.3.3.4Matplotlib

scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和Matplotlib等python数值计算的库实现高效的算法应用,并且涵盖了几乎所有主流机器学习算法。

  • 前期准备

3.1导入所需Python库

 

3.2获取API使用权限

进入官网–>腾讯地图

进入开发文档–>地址坐标相互转换

文档中请求链接,请求参数,返回参数都很清晰,这里直接把调用代码写上来。

(开发者需要先注册获取API使用权限)

  • 实际操作

4.1通过腾讯地图将给定的一组数据集进行城市名转化为经纬度,这里给出八个新疆地区的城市名,计算后得到它们的经纬度坐标

4.2将得到的经纬度进行数据处理并进行欧几里得距离计算,求每个点之间的距离

4.3初始化质心的矩阵并随机给出质心

4.4这里实现了k-means聚类算法的Python函数。k-means是一种非常常见的无监督学习方法,用于将数据集划分为k个集群。并且构建出模型

4.5这里将给出的Kmeans聚类结果进行绘制

4.6第一个数据集给出后,Kmeans算法结果

第4.7第二次次数据集给出25个城市名后,通过生成的模型给出的结果

4.8将得到的经纬度进行数据处理并进行欧几里得距离计算,求每个点之间的最短距离

通过Kmeans算法进行聚类,给定K 值,标记样式,给定颜色,并且将得到的结果进行可视化

这里是将新疆部分城市名转化经纬度坐标后通过Kmeans算法聚类后得到的可视化图形

给定K值为3

通训练集过多次聚类

取较为稳定的图形展示