网站建设的基本元素,度假村网站模板,做家务的男人免费观看网站,shopify与wordpress前面的推文我们介绍了使用scikit-learn结合分类散点数据#xff0c;构建机器学习分类模型并将模型结果可视化展示#xff0c;具体链接如下#xff1a; 机器学习和可视化还能一起这样用#xff1f;Python教你全搞定。今天这篇推文#xff0c;我们就使用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,fillNA,size.4,colourgray60) geom_point(data point,aes(x lon,y lat,colorfactor(label))) scale_color_brewer(palette Dark2,nameLabel,labelsc(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 stylecolor:#D20F26Categorical Interpolation/span,subtitle processed map charts with span stylecolor:#1A73E8geom_point()/span,caption Visualization by span stylecolor:#DD6449DataCharm/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,size15),plot.caption element_markdown(face bold,size 12),)
point2可视化结果如下 R-kknn包应用
在应用kknn进行模型构建之前我们需要构造出测试数据即根据地图文件的经纬度范围进行插值得到再用基于散点数据构建好的kknn模型预测出插值数据的类别进行做到类别插值。具体步骤如下 构建插值数据 使用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() 进行转换。 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,fillNA,size.8,colourgray60,alpha.7)geom_raster(data result_labela_raster,aes(x lon,y lat,filllabel,alphaprob)) #geom_sf(data sichuang,fillNA,size.8,colourgray60,alpha.7)scale_fill_brewer(palette Dark2,nameLabel,labelsc(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 stylecolor:#D20F26Categorical Interpolation/span,subtitle processed map charts with span stylecolor:#1A73E8geom_raster()/span,caption Visualization by span stylecolor:#DD6449DataCharm/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,size15),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,filllabel,alphaprob))最终我们绘制的可视化结果如下 总结
本篇推文我们使用了R-kknn包计算了分类模型结果即结果的可视化绘制此外还提出了一个较方便的裁剪方法目的也是让大家更好的熟悉ggplot2的可视化绘制。到这里关键空间插值系列的可视化教程(Python和R)也暂时结束接下来我会将改系列的所有推文整理汇总(数据、源码和解释文档)。接下来可能会推出几篇商业图表的绘制推文。