当前位置: 首页 > news >正文

R-kknn包-类别插值可视化绘制

前面的推文我们介绍了使用scikit-learn结合分类散点数据,构建机器学习分类模型并将模型结果可视化展示,具体链接如下: 机器学习和可视化还能一起这样用?Python教你全搞定。今天这篇推文,我们就使用R语言的kknn包进行类别插值可视化绘制,主要知识点如下:

  • R-kknn包简介及应用

  • kknn 模型结果可视化绘制

  • 所有完整代码都已整理之我们的线上课程,有需要的同学+v yidianshuyulove 咨询

R-kknn包简介及应用

R-kknn包简介

R-kknn包主要是是用于加权K近邻分类、回归和聚类模型的应用(kknn is a R package for Weighted k-Nearest Neighbors Classification, Regression and Clustering),其官网为:http://klausvigo.github.io/kknn/。很多小伙伴向我反映说:“虽然R的包比较丰富,但在具体的介绍文档描述上海有所欠缺,即看完文档甚至连基本的输入输出都不太清楚”,关于这一点,可以认为是R学习的一个陡峭性,不像Python可以快速上手,这就需要你熟悉了解其基本语法和函数,这里建议新手小白可以买一本书籍进行参考,在有一定基础的同时就直接看英文博客或者官网(讲真的,国内的教程真的是千篇一律,没有新意,当然,小编的公号除外哈)。好了,不扯了,我们继续~~

kknn包的官网描述的就较少,还好有具体的例子可以供参考,这里我们不再赘述,大家可以自行阅读,我们直接给出我们的示例过程。

R-kknn包应用散点数据可视化

在之前,我们需要提供散点数据(用于模型样本) 和*地图数据(c插值的范围)*,散点数据预览如下:

地图数据选择的是四川省的geojson文件,代码读取如下:

sichuang <- "四川省.json"
sichuang <- sf::read_sf(sichuang)
head(sichuang)

地图数据

这里我们先看下散点的分布情况,可视化代码如下:

#导入主题包
library(sf)
library(tidyverse)
library(ggspatial)
library(RColorBrewer)
library(ggtext)
library(hrbrthemes)#自定义颜色
#my_colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)
point2 <- ggplot() + geom_sf(data = sichuang,fill="NA",size=.4,colour="gray60") + geom_point(data = point,aes(x = lon,y = lat,color=factor(label))) +scale_color_brewer(palette = "Dark2",name="Label",labels=c("class1","class2","class3","class4","class5")) +annotation_scale(location = "bl") +# spatial-aware automagic north arrowannotation_north_arrow(location = "tr", which_north = "false",style = north_arrow_fancy_orienteering) +labs(x="",y="",title = "Map Charts in R Exercise 03-2: <span style='color:#D20F26'>Categorical Interpolation</span>",subtitle = "processed map charts with <span style='color:#1A73E8'>geom_point()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +theme_ipsum(base_family = "Roboto Condensed") +theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),plot.caption = element_markdown(face = 'bold',size = 12),)
point2

可视化结果如下:

R-kknn包应用

在应用kknn进行模型构建之前,我们需要构造出测试数据,即根据地图文件的经纬度范围进行插值得到,再用基于散点数据构建好的kknn模型,预测出插值数据的类别,进行做到类别插值。具体步骤如下:

  1. 构建插值数据 使用sf包的st_bbox() 方法即可计算出地图文件的经纬度范围:

st_bbox(sichuang)
# xmin      ymin      xmax      ymax 
#97.35010  26.04586 108.54649  34.31245 

接下来,使用sf包的st_make_grid() 构建网格数据:

width_in_pixels <- 600
dx <- ((st_bbox(sichuang)["xmax"] - st_bbox(sichuang)["xmin"]) / width_in_pixels)
dy <- dx
height_in_pixels <- floor((st_bbox(sichuang)["ymax"] - st_bbox(sichuang)["ymin"]) / dy)grid2 <- sf::st_make_grid(sichuang,cellsize = dx,n = c(width_in_pixels, height_in_pixels),what = "centers")

注意: 这里我们不是直接插入600x600的一个网格,而是,先再行上计算插入600个,再计算每个网格格点的大小,再根据格点大小在列上计算网格个数。

最后,我们使用data.frame()基础方法构建DF数据格式:

result2 = data.frame(lon = st_coordinates(grid2)[,1],lat = st_coordinates(grid2)[,2],label = as.factor(NA))
head(result2)

注意:由于类别是因子(factor)类型,不是数值类型,所以使用as.factor() 进行转换。

  1. kknn::kknn()计算 在计算之前,我们要将之前散点数据的label列转换成因子(factor)类型

point$label <- as.factor(point$label)

接下来,我们调用kknn::kknn()方法进行计算:

label_kknn <- kknn::kknn(label ~ ., train = point, test = result2, kernel = "gaussian", k = 100)

由于结果打印出来较多,我们直接将结果转换成DF类型:

#将结果转换成df
result_label  <- result2 %>% mutate(label = fitted(label_kknn),prob = apply(label_kknn$prob, 1, function(x) max(x)))head(result_label)

注意:由于结果输出的prob列(即每一个类别(5类)的可能性,最终输出结果为最大的那一个),我们使用了自定义函数:function(x) max(x) 将prob结果最大的一个求出。结果预览如下:

R-kknn结果可是绘制

在绘制地图可视化之前,最好将要绘制的结果转换成sf对象,便于可视化绘制(转换投影等操作均可进行),转换代码如下:

result_labela_raster <- st_as_sf(result_label, coords = c("lon", "lat"),crs = 4326,remove = F)

接下里,我们就将结果进行可视化绘制: 「网格数据可视化:」

library(sf)
library(tidyverse)
library(ggspatial)
library(RColorBrewer)
library(ggtext)
library(hrbrthemes)#自定义颜色
knn_result2_grid <- ggplot() + # add raster geom for the knn resultgeom_sf(data = sichuang,fill="NA",size=.8,colour="gray60",alpha=.7)+geom_raster(data = result_labela_raster,aes(x =lon,y = lat,fill=label,alpha=prob)) + #geom_sf(data = sichuang,fill="NA",size=.8,colour="gray60",alpha=.7)+scale_fill_brewer(palette = "Dark2",name="Label",labels=c("class1","class2","class3","class4","class5")) +annotation_scale(location = "bl") +# spatial-aware automagic north arrowannotation_north_arrow(location = "tr", which_north = "false",style = north_arrow_fancy_orienteering) +# remove propability legendscale_alpha_continuous(guide = F) +labs(x="",y="",title = "Map Charts in R Exercise 03-2: <span style='color:#D20F26'>Categorical Interpolation</span>",subtitle = "processed map charts with <span style='color:#1A73E8'>geom_raster()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +theme_ipsum(base_family = "Roboto Condensed") +theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),plot.caption = element_markdown(face = 'bold',size = 12),)

可视化结果如下:

在之前的推文中,我们也说过会提出一个较好的裁剪方法,这里我们将给出参考方法,如下:

result_labela_raster_clip = result_labela_raster[sichuang,]

直接使用[地图数据,],这里需要在指出的是:result_labela_raster和sichuang文件均为sf类型数据。 这样就可裁剪出较满意的结果,而可视化的绘制也只是的更改为以下即可:

geom_raster(data = result_labela_raster_clip,aes(x =lon,y = lat,fill=label,alpha=prob))

最终我们绘制的可视化结果如下:

总结

本篇推文我们使用了R-kknn包计算了分类模型结果即结果的可视化绘制,此外,还提出了一个较方便的裁剪方法,目的也是让大家更好的熟悉ggplot2的可视化绘制。到这里,关键空间插值系列的可视化教程(Python和R)也暂时结束,接下来,我会将改系列的所有推文整理汇总(数据、源码和解释文档)。接下来可能会推出几篇商业图表的绘制推文。

相关文章:

R-kknn包-类别插值可视化绘制

前面的推文我们介绍了使用scikit-learn结合分类散点数据&#xff0c;构建机器学习分类模型并将模型结果可视化展示&#xff0c;具体链接如下&#xff1a; 机器学习和可视化还能一起这样用&#xff1f;Python教你全搞定。今天这篇推文&#xff0c;我们就使用R语言的kknn包进行类…...

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…...

10s 内得到一个干净、开箱即用的 Linux 系统

安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…...

轮转数组[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个整数数组nums&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…...

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring

IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置&#xff1a;依赖管理&#xff1a;内嵌服务器&#xff1a;开发体验&#xff1a; 实例Spring项目示例&#xff1a;Spring Boot项目示例&#xff1a; 总结强烈推荐专栏集锦写在最后 强烈…...

idea自动生成实体类

第一步&#xff1a;idea连接数据库 出现这个就连接成功 第二步&#xff1a;选择数据库 第三步&#xff1a;创建实体类 也可以点击数据库一下子全部创建 选择创建实体类所放位置 这样就完成了&#xff0c;点击看看对其做相应修改...

uniapp -- picker民族选择器

目录 一、实现思路 二、实现步骤 ①view部分展示 ② JavaScript 内容 ③css中样式展示 三、效果展示...

生信学习笔记1:学习如何用OPLS-DA分析代谢组数据(从入门到掌握)

偏最小二乘法(PLS)和正交偏最小二乘法(OPLS)是统计模型,用于寻找两组数据矩阵之间的关系。它们广泛应用于化学计量学、生物信息学、经济预测等领域。 偏最小二乘法(PLS) 偏最小二乘法是一种多变量分析方法,主要用于找到两组数据(通常是预测变量集和响应变量集)之间…...

CDR2024最新版本怎么下载?Coreldraw相关快捷键教程分享

想必从事平面设计的大咖们都知道&#xff0c;Coreldraw是一款优秀的图形设计软件&#xff0c;被广泛地运用在平面设计、包装设计、服装设计各个生活领域&#xff0c;因此了解一些关于CorelDRAW快捷键的知识是很有必要的。因为使用快捷键不仅使用起来方便快捷&#xff0c;而且提…...

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…...

人工智能时代:AI提示工程的奥秘 —— 驾驭大语言模型的秘密武器

文章目录 一、引言二、提示工程与大语言模型三、大语言模型的应用实践四、策略与技巧五、结语《AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录获取方式 一、引言 随着人工智能技术的飞速发展&#xff0c;大语言模型作为一种新…...

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试...

解密人工智能:探索机器学习奥秘

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…...

C语言第十四弹---函数递归

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数递归 1、递归是什么&#xff1f; 1.1、递归的思想 1.2、递归的限制条件 2、递归举例 2.1、举例1&#xff1a;求n的阶乘 2.1.1、分析和代码实现 2.1.2、…...

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…...

时间序列预测——GRU模型

时间序列预测——GRU模型 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元&#xff08;GRU&#xff09;模型&#xff0c;包括其理论基础…...

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 TeamCity 2023.11正式版下载 TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能&a…...

C语言:register类型变量

register—— 寄存器存储 register 是 C 语言中的一种存储类别&#xff08;Storage Class&#xff09;&#xff0c;它用于告诉编译器将变量存储在寄存器中。在 C 语言中&#xff0c;变量的存储位置可以是寄存器、堆栈或静态存储区&#xff0c;使用 register 存储类别可以帮助我…...

android 自定义下拉框

一、 简介&#xff1a; 原生Android 提供的spinner下拉框不怎么方便&#xff0c;样式有点丑。修改起来麻烦&#xff0c;于是就自己动手写了一下拉列表。 实现原理使用的是&#xff0c;popwindow弹框&#xff0c;可实现宽高自定义&#xff0c;下拉列表使用listview. 二、pop弹框…...

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...