PostGIS 中的 K-Means 聚类操作及应用

news2024/11/20 11:30:12

K-Means算法:

  K-means 是数据科学和商业的基本算法。让我们深入了解一下。

1. K-means是一种流行的用于聚类的无监督机器学习算法。它是用于客户细分、库存分类、市场细分甚至异常检测的核心算法。

2. 无监督:K-means 是一种无监督算法,用于没有标签或预定义结果的数据。目标不是预测目标输出,而是通过识别数据集中的模式、聚类或关系来探索数据的结构。

3. 目标函数:K-means 的目标是最小化簇内平方和(WCSS)。它通过一系列迭代步骤(包括分配和更新步骤)来实现这一点。

4. 分配步骤:在此步骤中,将每个数据点分配给最近的聚类质心。“最近”通常使用欧几里得距离来确定。

5.更新步骤:重新计算质心作为簇中所有点的平均值。每个质心是其簇中点的平均值。

6.迭代:重复分配和更新步骤,直到质心不再发生显着变化,表明集群稳定。此过程最大限度地减少了簇内方差。

7. 输出:聚类质心、标签和距离平方和。质心代表每个聚类中所有点的平均位置,对于解释聚类结果至关重要。标签是聚类分配。距离平方和是簇中每个点距簇质心距离的度量。

8. 评估。有多种评估 K 均值的方法。两种常见的方法是剪影评分法和肘部法。

9. Silhouette Score:该指标衡量数据点与其他集群相比与其自身集群的相似程度。轮廓得分范围从 -1 到 1,其中高值表示数据点与其自己的簇匹配良好,而与相邻簇匹配较差。

10. 肘部法:该方法涉及将惯性绘制为簇数量的函数,并在图中寻找“肘部”。下降率急剧变化的肘点对于簇数来说是一个不错的选择。

PostGIS 中的 K-Means 聚类操作及应用:

   POSTGRESS是非常有名的开源数据库,POSTGIS是它的空间数据库扩展插件。相当于ARCGIS 中 ORACLE 和 SDE的关系。

点聚类是地理空间数据分析的常见任务,PostGIS提供了多种聚类功能,例如:

  • ST_ClusterDBSCAN

  • ST_ClusterKMeans

  • ST_ClusterIntersectingWin

  • ST_ClusterWithinWin

本文探讨了PostGIS 的  ST_ClusterKMeans函数的功能。K-Means 聚类作为一种对高维 LLM 嵌入进行分组的流行方式现在很流行,但它在较低维度的空间聚类中也很有作用。

ST_ClusterKMeans将对 2 维和 3 维数据进行聚类,并且当在点的“测量”维度中提供权重时,还会对点执行加权聚类。

为了尝试 K 均值聚类,我们需要一些点进行聚类,在本例中是 来自Natural Earth的1:10M 人口分布的数据。将其下载 GIS 文件并加载到数据库中,在此示例中使用 ogr2ogr。

ogr2ogr \  -f PostgreSQL \  -nln popplaces \  -lco GEOMETRY_NAME=geom \  PG:'dbname=postgres' \  ne_10m_populated_places_simple.shp
 

平面聚类(二维聚类)

二维空间中的简单聚类如下所示,使用 10 作为聚类数:

CREATE TABLE popplaces_geographic ASSELECT geom, pop_max, name,  ST_ClusterKMeans(geom, 10) OVER () AS clusterFROM popplaces;
 

请注意,俄罗斯的部分地区与阿拉斯加聚集在一起,而大洋洲则被分开。这是因为我们将这些点的经度/纬度坐标视为在一个平面上,因此阿拉斯加距离西伯利亚非常远。

对于仅限于小区域的数据,诸如日期变更线分裂之类的影响并不重要,但对于我们的全球示例来说,却很重要。幸运的是,有一种方法可以解决这个问题。

地心聚类(三维聚类)

我们可以使用ST_Transform将原始数据的经度/纬度坐标转换为地心坐标系 。“地心”系统是一种原点为地球中心的系统,位置由距该中心的 X、Y 和 Z 距离定义。

在地心系统中,日期变更线两侧的位置在空间中仍然非常接近,因此非常适合对全球数据进行聚类,而无需担心两极或日期变更线的影响。在本例中,我们将使用EPSG:4978作为我们的地心系统。

以下是转换为地心坐标的纽约坐标。

 
SELECT ST_AsText(ST_Transform(ST_PointZ(74.0060, 40.7128, 0, 4326), 4978), 1);
POINT Z (1333998.5 4654044.8 4138300.2)SELECT ST_AsText(ST_Transform(ST_PointZ(74.0060, 40.7128, 0, 4326), 4978), 1);
 
POINT Z (1333998.5 4654044.8 4138300.2)
 

这是在地心空间中执行的聚类操作。

CREATE TABLE popplaces_geocentric ASSELECT geom, pop_max, name,  ST_ClusterKMeans(    ST_Transform(      ST_Force3D(geom),      4978),    10) OVER () AS clusterFROM popplaces;
 

结果看起来与平面聚类非常相似,但您可以在几个地方看到“整个世界”效应,例如澳大利亚和大洋洲的所有岛屿现在位于一个聚类中,以及西伯利亚和阿拉斯加之间的分界点星团已向西移动越过日期变更线。

值得注意的是,尽管我们在二维中显示结果,但该聚类是在三个维度上执行的(因为地心坐标需要 X、Y 和 Z)。

加权聚类

除了朴素 k 均值之外, ST_ClusterKMeans还可以执行 加权 k 均值聚类,以使用输入点的“M”维度(第四维数据)增加额外信息来提高聚类质量。

由于我们有一个“人口稠密的地方”数据集,因此使用人口作为此示例的权重是有意义的。加权算法要求严格为正权重,因此我们过滤掉少数非正记录。

CREATE TABLE popplaces_geocentric_weighted ASSELECT geom, pop_max, name,  ST_ClusterKMeans(    ST_Force4D(      ST_Transform(ST_Force3D(geom), 4978),      mvalue => pop_max    ),    10) OVER () AS clusterFROM popplacesWHERE pop_max > 0;
 

同样,差异是微妙的,但请注意印度现在是一个单一集群,巴西集群现在如何偏向人口稠密的东海岸,以及北美现在如何分为东部和西部。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1514184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一下C++的学习之旅吧--C++基础

文章目录 前言using namespace std; 使用标准命名空间一、helloworld-输出表示1.1代码1.2 运行结果 二、变量2.1.1 普通变量代码2.1.2 运行结果2.2.1 常量和变量代码2.2.2 运行结果 三、sizeof---统计数据类型所占的内存大小3.1 代码3.2 运行结果 四、小数表示4.2 运行结果 五、…

C语言分析基础排序算法——计数排序

目录 计数排序 计数排序基本思路 计数排序改进思路 计数排序 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。具体思路为: 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序基本思路 基本思路分析: //以…

2024春秋蓝桥杯reverse——crackme01

尝试了下输入没有任何反应 查看——32位——IDA打开 我之前没怎么写过win32,所以我开始在string里面找flag,wrong,right什么的字符,都不行 然后我又在函数里面找main,也什么收获的没有,OK废话完了 在win32里面 关于弹窗的函数:…

EPSON X2A0003510033 XV7081BB介绍

X2A0003510033 XV7081BB是一款具有SPI接口,这款传感器主要用于商业类应用,具体可以应用于抗震和姿态控制领域,以及人机接口的运动检测中,这表明它在工业应用、机器人技术、自动驾驶车辆以及任何需要精确角度测量和姿态控制的场合都…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

手搭手RocketMQ发送消息

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: acti…

mybatisplus使用基本步骤

1.设计实体类&#xff0c;给实体类加一些需要的注解 2.创建Service接口继承mybatisplus提供的 IService<实体类>接口 3.实现Service接口&#xff0c;并继承mybatisplus提供的 ServiceImpl<mapper接口&#xff0c;实体类>类 4.mapper接口继承mybatisplus提供的 B…

java020 - Java集合进阶

1、集合知识回顾 1.1 集合特点 提供了一种储存空间可变的储存模型&#xff0c;储存的数据容量随时可以发生改变。 1.2 集合类体系结构 单列集合和双列集合&#xff1a; 单列集合中&#xff1a;list和set区别&#xff08;数据是否重复&#xff09; 区分接口和实现类&#…

【零基础学习04】嵌入式linux驱动中信号量功能基本实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面信号量操作的具体实现,操作硬件为I.MX6ULL开发板。 第一:信号量基本简介 信号量是同步的一种方式,linux内核也提供了信号量…

【数据结构】二叉树OJ题目

965. 单值二叉树 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;true示例 2&#x…

链路聚合实验(思科)

华为设备参考&#xff1a; 一&#xff0c;技术简介 网络设备的链路聚合技术&#xff08;Link Aggregation&#xff09;是一种将多个物理链路捆绑在一起&#xff0c;形成一个逻辑链路的技术。这样做可以增加带宽、提高可靠性和实现负载均衡。 二&#xff0c;实验目的 橙色的阻…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;在物流和制造业中&#xff0c;开发一套高效的条形码与二维码识别系统显得尤为关键。本博文深入探讨了如何利用深度学习技术打造出一套先进的条形码及二维码检测系统&#xff0c;并且提供了一套完整的实施方案。该系统搭载了性能卓越的YOLOv8算法&#xff0c;并…

基于Ambari搭建大数据分析平台

一、部署工具简介 1. Hadoop生态系统 Hadoop big data ecosystem in Apache stack 2. Hadoop的发行版本 Hadoop的发行版除了Apache的开源版本之外&#xff0c;国外比较流行的还有&#xff1a;Cloudera发行版(CDH)、Hortonworks发行版&#xff08;HDP&#xff09;、MapR等&am…

xss.pwnfunction.com靶机 Warmups

通关要求弹出警告框alert(1337) 没有用户交互 不能使用外链接 在chrome中测试 Ma Spaghet! 通过分析代码我们可以看到它直接用innerHTML将接收的内容赋值 但是我们不能使用<script>标签因为&#xff1a;HTML 5 中指定不执行由 innerHTML 插入的 <script> 标签。 所…

读书笔记之《机器与人》:AI如何重构工作方式和流程?

《机器与人: 埃森哲论新人工智能》作者是【美】保罗•多尔蒂和詹姆斯•威尔逊 &#xff0c;原作名: Human Machine: Reimagining Work in the Age of AI&#xff0c;2018年出版。 保罗•多尔蒂&#xff08;PAUL DAUGHERTYH&#xff09;&#xff1a;埃森哲首席技术官和创新官、…

Spring MVC中的REST风格

文章目录 REST风格1 REST简介问题导入1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2 RESTful入门案例问题导入2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3 REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4案例&#xff1…

springboot的maven多模块如何混淆jar包

springboot的maven多模块如何混淆jar包 一.简介二. 示例2.1 基本配置2.2 结果 三. 错误3.1 错误13.2 错误2 四. 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一.简介 …

【node】模块化与包(二)

1、模块化的基本概念 模块化是指解决一个复杂的问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 &#xff08;1&#xff09;模块化的优点 遵循固定规则&#xff0c;把大文件拆分成对立并相互依赖…

Python使用FastAPI提供图片缩略图生成接口

使用pillow的thumbnail生成缩略图时&#xff0c;会保持原图的宽高比&#xff1b;使用的opencv的resize则不会 具体代码如下&#xff1a; #!/usr/bin/env python import re import sys from enum import Enum from io import BytesIO from pathlib import Path from typing im…

蓝桥杯 2022 dp 背包

蓝桥杯 2022 dp 背包 题目链接&#xff1a; https://www.lanqiao.cn/problems/2186/learning/?subject_code1&group_code4&match_num13&match_flow2&origincup 题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#defi…