rtemis 包:多种机器学习算法集成!兼顾数据处理与可视化美图

图片

rtemis 是一个集机器学习与可视化于一体的 R 包,用于各种高级机器学习研究和应用。整体而言,该软件有三个目标:

  • 「应用数据科学」:使高级数据分析高效且易于使用

  • 「机器学习研究」:提供一个平台以开发和测试新颖的机器学习算法

  • 「教育」:通过提供简明的案例、代码和可视化,使机器学习概念易于理解

比较有特点的是,rtemis 为数据处理、监督学习和聚类提供了大量算法的通用函数接口。小编在官网中看到的包装功能确实也多

  1. 预处理

    • 保持完整样本:可以选择仅保留没有缺失数据的样本。

    • 移除常量特征:删除所有值都相同的列。

    • 移除重复样本:删除重复的行。

    • 根据缺失数据比例移除样本或特征:根据缺失数据的阈值删除样本或特征。

    • 数据类型转换:将整数、逻辑值和字符变量转换为因子、数字或其他类型。

    • 数值变量的分箱:将数值变量根据区间或分位数进行分箱处理。

    • 处理缺失值:生成指示缺失数据的新布尔列,并选择多种方法进行缺失值插补。

    • 数据缩放和中心化:对列进行标准化处理。

    • 独热编码:将因子变量进行独热编码。

  2. 重采样

    • bootstrap:标准自助法,即带放回的随机抽样。

    • strat.sub:分层样本抽样。

    • strat.boot:先进行分层子样本抽样,然后随机复制一些训练样本以达到原始长度或指定长度。

    • kfold:k折交叉验证。

    • loocv:留一交叉验证。

  3. 无监督学习

    • 聚类

    • 分解 / 降维

  4. 监督学习

    • 回归与分类

    • 自动调参与测试

    • 实验记录

    • 集成法

    • 提升法

    • RuleFit 算法

    • 类别不平衡数据的处理

    • 集成模型

    • 叠加树模型

    • 线性叠加树模型

图片

在本文中,仅仅展示如何使用 rtemis 快速进行分类与回归,更多个性化的内容大家可以参照下方的「官方文档」

  • https://rtemis.lambdamd.org/

0. R包下载

用户可以通过以下代码安装或者引用:

# 从GitHub上安装该包
remotes::install_github("egenn/rtemis")
# 其它潜在的依赖包
install.packages("mlbench")
install.packages("pROC")
install.packages("PRROC")
install.packages("progressr")
install.packages("future.apply")

1. 回归模型

① 生成用于回归的模拟数据框dat

x <- rnormmat(500, 5, seed = 2019)
y <- x %*% rnorm(5) + rnorm(500)
dat <- data.frame(x, y)# check 函数用于检查数据集的整体概况
check_data(dat)
#  dat: A data.table with 500 rows and 6 columns
#  Data types
#  * 6 numeric features
#  * 0 integer features
#  * 0 factors
#  * 0 character features
#  * 0 date features#  Issues
#  * 0 constant features
#  * 0 duplicate cases
#  * 0 missing values#  Recommendations
#  * Everything looks good# 最后简单看一下dat
head(dat)
#          X1         X2          X3         X4         X5          y
#1  0.7385227 -0.5201603  1.63030574  1.9567386 -0.7911291  3.9721257
#2 -0.5147605  0.5388431  0.47104282  0.8373285  0.8610578 -1.7725552
#3 -1.6401813  0.2251481 -0.73062473 -0.6192940  1.1604909 -3.3698612
#4  0.9160368 -1.5559318 -0.05606844  0.4602711 -0.9290626  5.1083103
#5 -1.2674820 -0.2355507  0.71840950 -0.9094905 -1.1453902 -2.8096872
#6  0.7382478  1.1090225  0.80076099  1.1155501  1.5148726 -0.3089569

dat的行代表样本,列X1-X5分别代表不同的特征变量,列y代表用于回归的目标变量(因变量)。同样的,对于自己的数据也是按照类似的格式准备。

② 重新采样,生成训练集与测试集列表res

res <- resample(dat,resampler = "strat.sub", # 选用分层抽样。stratify.var = y,        # 用于分层的指定变量strat.n.bins = 4,       # 将分层变量划分为3个区间,确保每个区间的数据在训练集和测试集中都能存在,使得测试集的结果更为可信train.p = 0.75,         # 每层中随机选取75%的样本作为新的数据集n.resamples = 10        # 需要生成的重采样数据集数量)

这里使用的是默认参数resampler = "strat.sub"进行分层抽样,其原理根据指定的分层变量(stratify.var参数,这里是y)将数据集分成多个组(层),在每个层内按照指定的比例(train.p=0.75)随机抽取样本,产生新的队列。n.resamples设置为10,意味着将分别抽样10次,总共生成10个新的队列,并以列表res返回抽样对列的行索引。

# 简单看一下res,每个Subsample_*对应不同的索引,可以用于提取指定的抽样数据集
str(res)
#List of 10
# $ Subsample_1 : int [1:374] 1 4 6 8 9 12 14 17 18 19 ...
# $ Subsample_2 : int [1:374] 2 3 4 5 6 8 10 11 14 15 ...
# $ Subsample_3 : int [1:374] 1 2 3 4 6 8 9 10 11 13 ...
# $ Subsample_4 : int [1:374] 1 3 4 5 6 7 8 12 14 15 ...
# $ Subsample_5 : int [1:374] 2 4 5 6 8 10 12 14 15 16 ...
# $ Subsample_6 : int [1:374] 1 2 3 4 5 6 7 8 9 10 ...
# $ Subsample_7 : int [1:374] 3 4 5 6 7 8 10 11 12 14 ...
# $ Subsample_8 : int [1:374] 1 2 3 5 6 7 8 10 11 13 ...
# $ Subsample_9 : int [1:374] 1 2 3 4 5 6 7 8 9 10 ...
# $ Subsample_10: int [1:374] 1 2 4 5 6 7 8 10 11 12 ...
# - attr(*, "class")= chr [1:2] "resample" "list"
# - attr(*, "N")= int 10
# - attr(*, "resampler")= chr "strat.sub"
# - attr(*, "train.p")= num 0.75
# - attr(*, "strat.n.bins")= num 4

③ 指定训练集与测试集并构建模型

# 训练集为分层采样后的第一个数据集
dat.train <- dat[res$Subsample_1, ]
# 第一个数据集分层采样剩下的数据集作为测试集
dat.test <- dat[-res$Subsample_1, ]
# 构建模型
mod <- s_GLM(dat.train, dat.test)
mod$describe()
#Generalized Linear Model was used for regression.
#R-squared was 0.98 (training).# 简单看一下常见的几个回归指标
mod$error.train      # 训练集
#MSE = 1.02 (97.81%)
#RMSE = 1.01 (85.18%)
#MAE = 0.81 (84.62%)
#r = 0.99 (p = 1.3e-310)
#R sq = 0.98
mod$error.test      # 测试集
#MSE = 0.98 (97.85%)
#RMSE = 0.99 (85.35%)
#MAE = 0.76 (85.57%)
#r = 0.99 (p = 2.7e-105)
#R sq = 0.98# 测试集上的预测结果,训练集的预测结果可以通过mod$fitted打印
mod$predicted
#  [1]  -6.9228634  13.5473120  -4.4142316  -6.4150050  -3.1899404   5.8635544  10.9276092  -3.3697528   7.3197323   4.5917325   3.8279902
# [12]  -2.5436844  -8.4399966  -3.2597535   3.0558347  10.1805533  -4.5057564  -0.1087756  -0.7984958  -8.4851937  -4.8099938  -0.7611819
# [23]  -0.3023645  -1.1838060   6.2697071   2.9259362   2.9894219   3.5715647   3.2065868   2.3246177  -1.1029005  -3.1490491  -7.2180310
# [34]   1.3552666   8.1584272  -2.2085630  -1.5803727  -0.7588147   1.4364268   0.6639963   5.3642140   0.3600681  -4.2238833 -18.8447897
# [45]  -6.2053170  -5.6646543  -6.3526682   5.9058403  -2.9385554  -1.8897201   3.3465618   3.1953050   1.9692337  -8.0531435   0.4722245
# [56]  14.6760641  -1.6578528  11.2129667  -9.2015635   0.6143482  -2.8688158  -1.5580413   0.3452240 -19.3633269  -4.7365043  -1.7222169
# [67]  -3.5001696   2.0906088  -5.5367285  16.0566618  -2.2632949  10.1779890   4.8057160   5.0095983  -3.4675440  -7.8418409   1.5149870
# [78]  -1.0510093   1.2397077   7.8981605   0.1196208 -13.6210350  -2.1589314  -4.5641406  -4.9111480  -0.5444266   3.8954173 -15.3977663
# [89]  -6.3044076  -5.8120357   0.2301799  -1.8128115   4.7353047 -11.5507244   2.2981759 -11.6778343  -4.4418715   4.5915911  13.0456691
#[100]   2.3961443  11.6771535   2.9362587   3.4500863  14.6597287   7.2120194  -6.8395880 -17.1198556   8.7869138  -3.8199982  -5.0879467
#[111]  -3.9051859  -9.9320098   0.5141523  -6.2265527  -6.1502030  10.6211752  -1.2735560   3.0118796   3.2969205  -1.8482288   3.6860180
#[122]   0.6108124  10.0208633   5.8474645   1.4720176   0.2498226

需要注意,构建回归模型的函数s_GLM默认使用最后一列作为因变量/目标变量(其实这个函数参数超级多,感兴趣的铁子可以自行学习指定)。同时,s_GLM 既支持 线性回归 和 逻辑回归(单分类任务),也支持 多项逻辑回归(也就是多分类任务)。对于多分类任务,如果 y 有两个以上的类别,s_GLM内部使用nnet::multinom进行多项逻辑回归。

④ 可视化模型结果

# 可视化训练集拟合结果
mod$plotFitted(theme = 'white')

图片

# 可视化测试集拟合结果
mod$plotPredicted(theme = 'white')

图片

# 可视化特征重要性
mod$plotVarImp(theme = 'white')

图片

需要注意,返回mod是 R6 类对象R6 对象包含属性和函数,同时支持 S3 方法,因此用户可以访问所有熟悉的 R 泛型。

2. 分类模型

① 示例数据的准备,这里使用的是mlbench的内置数据集,总共有 60 个特征与最后一列的 Class 的分类属性:

data(Sonar, package = 'mlbench')
str(Sonar)
#'data.frame': 208 obs. of  61 variables:
# $ V1   : num  0.02 0.0453 0.0262 0.01 0.0762 0.0286 0.0317 0.0519 0.0223 0.0164 ...
# $ V2   : num  0.0371 0.0523 0.0582 0.0171 0.0666 0.0453 0.0956 0.0548 0.0375 0.0173 ...
# $ V3   : num  0.0428 0.0843 0.1099 0.0623 0.0481 ...
# $ V4   : num  0.0207 0.0689 0.1083 0.0205 0.0394 ...
# $ V5   : num  0.0954 0.1183 0.0974 0.0205 0.059 ...
# $ V6   : num  0.0986 0.2583 0.228 0.0368 0.0649 ...
# $** .........................................
# $ V60  : num  0.0032 0.0044 0.0078 0.0117 0.0094 0.0062 0.0103 0.0053 0.0022 0.004 ...
# $ Class: Factor w/ 2 levels "M","R": 2 2 2 2 2 2 2 2 2 2 ...# 检查一下数据
check_data(Sonar)
#  Sonar: A data.table with 208 rows and 61 columns
#  Data types
#  * 60 numeric features
#  * 0 integer features
#  * 1 factor, which is not ordered
#  * 0 character features
#  * 0 date features
#  Issues
#  * 0 constant features
#  * 0 duplicate cases
#  * 0 missing values
#  Recommendations
#  * Everything looks good

② 数据重采样分组(与上面回归模型的一致):

res <- resample(Sonar)
sonar.train <- Sonar[res$Subsample_1, ]
sonar.test <- Sonar[-res$Subsample_1, ]

③ 模型的构建s_Ranger函数是该包提供的用于构建随机森林的分类/回归模型,内部提供了多种参数(包括常见的mtry,用于自动调参的autotune等等)

mod <- s_Ranger(sonar.train, sonar.test)
# 简答看看模型的描述
mod$describe()
#Ranger Random Forest was used for classification.
#Balanced accuracy was 1 (training)and 0.83 (testing).

④ 可视化结果(基本上训练集测试集都有,命名也是具有统一规律,这边就只展示其中一张)

mod$plotPredicted(theme = 'white') # 测试集,分类性能的四格热图
mod$plotFitted(theme = 'white')    # 训练集

图片

mod$plotROCpredicted(theme = 'white')# 测试集,分类性能的roc曲线
mod$plotROCfitted(theme = 'white')   # 训练集

图片

mod$plotPRpredicted(theme = 'white')# 测试集,分类性能的PR曲线
mod$plotPRfitted(theme = 'white')   # 训练集

图片

mod$plotVarImp(theme = 'white')# 特征重要性

图片

三. 可视化主题

① 配色系列rtpalette函数提供了多种可供选择的配色系列:

rtpalette()
#[1] "ucsfCol"             "pennCol"             "imperialCol"         "stanfordCol"         "ucdCol"             
#[6] "berkeleyCol"         "ucscCol"             "ucmercedCol"         "ucsbCol"             "uclaCol"            
#[11] "ucrColor"            "uciCol"              "ucsdCol"             "californiaCol"       "scrippsCol"         
#[16] "caltechCol"          "cmuCol"              "princetonCol"        "columbiaCol"         "yaleCol"            
#[21] "brownCol"            "cornellCol"          "hmsCol"              "dartmouthCol"        "usfCol"             
#[26] "uwCol"               "jhuCol"              "nyuCol"              "washuCol"            "chicagoCol"         
#[31] "pennstateCol"        "msuCol"              "michiganCol"         "iowaCol"             "texasCol"           
#[36] "techCol"             "jeffersonCol"        "hawaiiCol"           "nihCol"              "torontoCol"         
#[41] "mcgillCol"           "uclCol"              "oxfordCol"           "nhsCol"              "ethCol"             
#[46] "rwthCol"             "firefoxCol"          "mozillaCol"          "appleCol"            "googleCol"          
#[51] "amazonCol"           "microsoftCol"        "pantoneBalancingAct" "pantoneWellspring"   "pantoneAmusements"  
#[56] "grays"               "rtCol1"              "rtCol3"  

简单给各位铁子看看

previewcolor(rtpalette("imperialCol"), "Imperial", bg = "white")

图片

previewcolor(rtpalette("ucsfCol"), "UCSF", bg = "white")

图片

具体使用的时候可以指定参数palette

mplot3_x(iris, palette = "google", theme = 'white')

图片

② 主题,可选的主题包括以下几种

  • white

  • whitegrid

  • whiteigrid

  • black

  • blackgrid

  • blackigrid

  • darkgray

  • darkgraygrid

  • darkgrayigrid

  • lightgraygrid

  • mediumgraygrid

具体使用的时候指定theme参数即可

set.seed = 2019
x <- rnorm(200)
y <- x^3 + 12 + rnorm(200)
mplot3_xy(x, y, theme = 'whitegrid', fit = 'gam')

图片

传统的机器学习 R 包确实不少

但今天分享的有一些特点 

首先是大量可供选择的算法

封装的不错,参数很多 

简便易行

其次是提供建模前的预处理方法

最后是兼顾数据可视化

就分享到这

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

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

相关文章

谷歌B端独立站建站推广,外贸建站训练营,傻瓜式教学

做外贸方法重要&#xff0c;工具更重要&#xff0c;而这些背后的规则和套路&#xff0c;身边的人往往不会告诉你&#xff0c;成功的人更不会教给你。本套课程主要内容包括&#xff1a;一套体系化的独立站建站方法&#xff0c;学会“高效学习”避免无效努力&#xff0c;拥有独立…

不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代码

旅行商从城市1出发&#xff0c;终点城市由算法求解而定 部分代码 close all clear clc global data load(data.txt)%导入TSP数据集 Dimsize(data,1)-1;%维度 lb-100;%下界 ub100;%上界 fobjFun;%计算总距离 SearchAgents_no100; % 种群大小&#xff08;可以修改&#xff09; …

k8s node NotReady后会发生什么?

K8s 是一种强大的容器编排和管理平台&#xff0c;能够高效地调度、管理和监控容器化应用程序&#xff1b;其本身使用声明式语义管理着集群内所有资源模型、应用程序、存储、网络等多种资源&#xff0c;Node 本身又属于 K8s 计算资源&#xff0c;上面承载运行着各种类型的应用程…

新零售数据中台:构建零售业高效率、智能化的数据处理平台_光点科技

随着互联网技术的快速发展和移动支付、大数据等技术的广泛应用&#xff0c;零售行业已经逐渐从传统零售向新零售模式转变。在这个变革的时代背景下&#xff0c;新零售数据中台应运而生&#xff0c;它作为零售行业数据资源的整合与智能分析的核心载体&#xff0c;成为推动零售行…

10最佳iPhone数据恢复软件评论

您还在寻找最好的iPhone数据恢复软件吗&#xff1f; 似乎我们在iPhone上放置了越来越多与日常生活和工作有关的重要事情。照片可以保持珍贵的时刻&#xff0c;联系人可以保持联系&#xff0c;录音&#xff0c;备忘录和日历可以作为提醒&#xff0c;视频和歌曲可以娱乐&#xf…

xml篇---提取VOC格式的坐标,并按照cameraID进行排序(二)

xml篇—提取VOC格式的坐标&#xff0c;并按照cameraID进行排序&#xff08;二&#xff09; import os import xml.etree.ElementTree as ETdef parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot()objects {}for obj in root.findall(object):name obj.find(…

【DevOps】深入浅出:Jenkins 性能监控全解析

目录 一、监控指标&#xff1a;把握系统健康状况 1、资源利用率&#xff1a; 2、 任务执行效率&#xff1a; 3、系统稳定性&#xff1a; 二、监控工具&#xff1a;选择合适的利器 1、Jenkins 内置监控 1.1、Jenkins Performance Plugin&#xff1a;系统性能指标的直观展…

Android Webview加载pdf文件无法缩放问题

WebView设置开启页面缩放&#xff1a; settings webView.getSettings(); settings.setSupportZoom(true); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true); sett…

CDN管理平台安装说明

CDN管理平台安装说明 系统需求 操作系统&#xff1a;Linux CPU不少于1核心 可用内存不少于1G 可用硬盘空间不小于10G 对于每日千万访问以上的CDN系统推荐配置如下&#xff1a; CPU不少于8核心 可用内存不少于8G 可用硬盘空间不小于200G 准备工作 在安装GoEdge之前&#xff0…

kubernetes(k8s) v1.30.1 创建本地镜像仓库 使用本地docker镜像仓库部署服务 Discuz X3.5 容器搭建论坛

1 master11创建本地镜像仓库 [rootmaster11 ~]# docker run -d -p 5000:5000 --restartalways --name registry registry:2 Unable to find image registry:2 locally 2: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df…

Python 机器学习 基础 之 数据表示与特征工程 【分类变量】的简单说明

Python 机器学习 基础 之 数据表示与特征工程 【分类变量】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【分类变量】的简单说明 一、简单介绍 二、数据表示与特征工程 数据表示 特征工程 三、分类变量 1、One-Hot编码&#xff08;虚拟变量&#xff09…

漫谈企业信息化安全-综述

一、前言 一直以来想写一些文章&#xff0c;谈一谈企业信息化过程中的安全问题及对策。 随着信息技术的不断发展和普及&#xff0c;特别是今年来移动办公、云服务等等新的工作模式和新的信息技术的应用&#xff0c;企业信息化已经成为提升竞争力、促进创新和发展的重要途径。…

C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) {return nu…

算法学习:快速排序

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f680; 引言&#x1f4cc; 快速排序算法核心思想1. 选择基准值&#xff08;Pivot&#xff09;2. 分区操作&#xff08;Partitioning&#xff09;3. 递归排序子序列 &#x1f4cc; JavaScript 实现1. 快速排序主函数2…

基于Perfetto 解读一帧的生产消费流程 Android >= S Qualcomm

广告 首先帮我朋友打个广告 我们一起在运营一个视频号 感兴趣的可以帮忙点击右边这个小铃铛 铃铛 序 1.这个流程里面的东西如果展开其实是有很多的 内容其实还是比较浅显的 sf处就不贴源码了 关一个Vsync就有的解释 当然笔者在流程上先形成一个思维闭环 2.如有小伙伴需要 笔…

Java方法的递归

Java方法的递归 前言一、递归的概念示例代码示例 二、递归执行过程分析代码示例执行过程图 三、递归练习代码示例按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)递归求 1 2 3 ... 10写一个递归方法&#xff0c;输入一个非负整数&#xff0c;返回组成它的数字之和. …

go语言的一些常见踩坑问题

开始之前&#xff0c;介绍一下​最近很火的开源技术&#xff0c;低代码。 作为一种软件开发技术逐渐进入了人们的视角里&#xff0c;它利用自身独特的优势占领市场一角——让使用者可以通过可视化的方式&#xff0c;以更少的编码&#xff0c;更快速地构建和交付应用软件&#…

【无重复字符的最长子串】python,滑动窗口+哈希表

滑动窗口哈希表 哈希表 seen 统计&#xff1a; 指针 j遍历字符 s&#xff0c;哈希表统计字符 s[j]最后一次出现的索引 。 更新左指针 i &#xff1a; 根据上轮左指针 i 和 seen[s[j]]&#xff0c;每轮更新左边界 i &#xff0c;保证区间 [i1,j] 内无重复字符且最大。 更新结…

JVM学习-垃圾回收器(一)

垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合&#xff0c;串行回收器的性能表…

http和https的区别,怎么免费实现https(内涵教学)

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息&#xff0c;HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&#xff0c;因此&…