使用线性内核调整 SVM 时,R 插入符异常缓慢

2023-12-29

在调整 SVM 参数时,我观察到一个非常奇怪的行为caret。当训练单个模型而不进行调整时,具有径向基核的 SVM 比具有线性核的 SVM 花费更多时间,这是预期的。然而,当在相同的惩罚网格上调整具有两个核的 SVM 时,具有线性核的 SVM 比具有径向基核的 SVM 花费更多的时间。使用 R 3.2 可以在 Windows 和 Linux 中轻松重现此行为caret6.0-47。有谁知道为什么调整线性 SVM 比径向基核 SVM 花费更多时间?

SVM linear
   user  system elapsed 
   0.51    0.00    0.52 

SVM radial
   user  system elapsed 
   0.85    0.00    0.84 

SVM linear tuning
   user  system elapsed 
 129.98    0.02  130.08 

SVM radial tuning
   user  system elapsed 
   2.44    0.05    2.48 

玩具示例代码如下:

library(data.table)
library(kernlab)
library(caret)

n <- 1000
p <- 10

dat <- data.table(y = as.factor(sample(c('p', 'n'), n, replace = T)))
dat[, (paste0('x', 1:p)) := lapply(1:p, function(x) rnorm(n, 0, 1))]
dat <- as.data.frame(dat)

sigmas <- sigest(as.matrix(dat[, -1]), na.action = na.omit, scaled = TRUE)
sigma  <- mean(as.vector(sigmas[-2]))

cat('\nSVM linear\n')
print(system.time(fit1 <- train(y ~ ., data = dat, method = 'svmLinear', tuneLength = 1,
                                 trControl = trainControl(method = 'cv', number = 3))))

cat('\nSVM radial\n')
print(system.time(fit2 <- train(y ~ ., data = dat, method = 'svmRadial', tuneLength = 1,
                                 trControl = trainControl(method = 'cv', number = 3))))

cat('\nSVM linear tuning\n')
print(system.time(fit3 <- train(y ~ ., data = dat, method = 'svmLinear',
                                 tuneGrid = expand.grid(C = 2 ^ seq(-5, 15, 5)),
                                 trControl = trainControl(method = 'cv', number = 3))))

cat('\nSVM radial tuning\n')
print(system.time(fit4 <- train(y ~ ., data = dat, method = 'svmRadial',
                                 tuneGrid = expand.grid(C = 2 ^ seq(-5, 15, 5), sigma = sigma),
                                 trControl = trainControl(method = 'cv', number = 3))))

看过之后我不相信问题出在caret,而是幕后发生的事情kernlab.
正如堆栈溢出其他地方所述SVM本身就是一个密集的算法。时间复杂度为SVM是 O(n*n)。现在这并没有考虑到之间的差异SVM来电。不过,似乎发生的事情是在通过一个非常深的堆栈调用编译后的 C 代码之后结束的SVM > .Local > .call. (.call是对已编译的 C 代码的调用,超出了我的知识库)。大多数时候,当你看到意想不到的缓慢时间从R to C这是因为事情是如何过去的。由于您拉入了矩阵,这进一步导致了命名或尺寸问题的假设,导致另一端发生一些额外的工作。
如果我们看看这段代码是如何分析的,瓶颈就会变得非常清楚。

对字体大小表示歉意——它是一个很深的堆栈,我认为整体形状比单个功能更能说明问题。请随意在下面发送垃圾邮件 Ctrl +。

nSVM_linear看起来健康的配置文件和许多友好的 R 功能。

同样的优惠nSVM radial

现在,一旦我们开始“径向调整”,我们就开始看到带有try-call堆栈开始倾斜,但一切似乎都在快速执行。

哇哦。完全不同的线性调谐结构C在某些情况下,呼叫耗时超过 100 秒。

话虽这么说,看来你的瓶颈在于编译的C代码来自kernlab。由于该包正在连接到libsvm这似乎非常有效,我无法想象被调用的代码存在实际问题。对于比我更好的人来说,实际识别从一个移动到另一个时如何(基于安全的功能或来自 R 的输入问题)以及为什么会发生问题是一项工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用线性内核调整 SVM 时,R 插入符异常缓慢 的相关文章

  • 根据共同值对两个数据帧求和

    我有一个看起来像的数据框 day of week count 1 0 3 2 3 1 3 4 1 4 5 1 5 6 3 另一个喜欢 day of week count 1 0 17 2 1 6 3 2 1 4 3 1 5 4 5 6 5
  • R:如何更改ggvis闪亮应用程序中特定范围的绘图背景颜色

    I have a simple shiny app like below and you can run it The plots are created by ggvis and user can choose student name
  • 使用 dplyr 的 select 引用变量名[重复]

    这个问题在这里已经有答案了 通常我会想要选择变量的子集 其中该子集是函数的结果 在这个简单的例子中 我首先获取与宽度特征相关的所有变量名称 library dplyr library magrittr data iris width var
  • 一次评论多个对象

    假设您有一个变量 a 到 j 的列表 for x in 1 10 assign letters x x 您将如何评论那些最近创建的对象 我尝试过类似的事情 for x in 1 10 comment get letters x lt pas
  • R Shiny - 使用 DataTable 移动列名称

    我有一个非常复杂的闪亮代码 其中有几个面板和这些面板内的几个表格 启动应用程序时 列名称与列值正确对齐 但是 一旦我更改应用程序表格下的页码 列名称就会移动到左侧 而值仍保留在中间 如何强制应用程序使列名称与列值对齐 一个可重现的例子 li
  • R -> kdb:将 R 数据作为二进制对象传递给 kdb+

    最有效的插入方式是什么R对象 更具体地说 时间序列表示为xts or data table对象 即基于时间和数字的列 到kdb 数据库 我能够通过以下方式找到唯一涉及字符串序列化的解决方案q所描述的表达式here https stackov
  • 单击 R Shiny 中的按钮后将输入字段重置为 null

    我正在构建一个应用程序 用户可以在其中按列输入表的数据值 单击 添加 按钮后 输入的值将按列附加到现有值 例如 如果输入 col1 2 3 并单击 ADD 我们将在显示屏中看到 col1 2 3 如果输入 col2 4 7 并单击 ADD
  • 将分类变量重新编码为二进制 (0/1)

    有人可以帮助我使用ifelse 我有一个data frame dat 具有称为 Q1 的分类变量 因子 dat Q1 dat Q1编码为 1 2 3 或 4 我需要创建一个新列data new1基于以下规则 if dat Q1 3 then
  • 用plotly创建丝带

    我需要在散点图上绘制加速度与英里 加仑的两个斜率 轻型汽车一处斜坡 重型汽车一处斜坡 我创建了这个 cars light lt cars log cars log log weight lt log mean cars weight car
  • R List with sub-list:将与规则匹配的所有元素提取到数组中

    我有一个 R 对象列表 它们又是各种类型的列表 我想要类别为 内部 的所有对象的 成本 值 实现这一目标的好方法是什么 如果我有一个数据框我会做类似的事情 my dataframe cost my dataframe category in
  • CSS3 - 性能最佳实践是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ggarrange:合并多个图

    附图来自以下文章 正在使用 ggarrange 合并这些图 http www sthda com english articles 24 ggpubr publication ready plots 81 ggplot2 easy way
  • 根据特定行中的值对列重新排序。

    我在数据框中有以下数据 aa bb cc 1 3 4 5 2 5 4 3 3 7 8 6 100 33 63 55 我需要根据最后一行中的值对列重新排序 这种转变的结果将是 bb cc aa 1 4 5 3 2 4 3 5 3 8 6 7
  • 在闪亮应用程序的 DT::datatable 中添加、删除和编辑行

    我有下面闪亮的应用程序 我可以通过按添加新行Add基于闪亮的小部件选择 我可以通过按选择并删除一行Delete我想将它们与单击一行的功能结合起来 然后在按Edit 例如 如果我单击第二行 然后更改Security Type小部件来自Stoc
  • 将 12 小时字符时间转换为 24 小时

    我有一个包含字符格式时间的数据集 我试图将其从 12 小时格式转换为 24 小时格式 我做了一些搜索 但我发现的所有内容似乎都假设字符已经采用 24 小时格式 这是我工作时的一个例子 times lt c 9 06 AM 4 42 PM 3
  • 将其他数据集的点添加到ggplot2

    关于这个主题已经有很多问题 但我找不到能回答我的具体问题的问题 我有一个barplot see testplot1 and testplot3如下 绘制数据集 bardata如下 并希望从另一个数据集向其添加点 pointdata 请参阅简
  • 零膨胀泊松分布:无法估计参数,错误代码为 100

    以下是我正在研究的一种数据集 data lt c 0 1 0 11 2 0 3 0 0 2 1 3 1 0 1 0 0 0 2 3 0 0 0 8 1 1 1 0 1 1 2 7 0 0 0 5 2 3 6 1 1 5 2 9 0 0 1
  • geom_polygon 的渐变填充

    此代码生成一个包含 3 个多边形的图表 我正在创建一个显示 3 个多边形的图表 如果有更好的方法来绘制多边形 我不太感兴趣 实际上这些多边形代表事件 并且这些事件有一个持续时间 首先 我感兴趣的是使用渐变填充每个多边形的可能性 librar
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1

随机推荐

  • Pygame显示模块初始化和退出

    有一个pygame display窗户打开 我打电话pygame display quit 为了摧毁窗户 因为我需要再次打开窗口 所以我调用pygame display init and pygame display set mode 但是
  • 如何从报表设计器调用 Acumatica 函数?

    我有一个用 Acumatica 编写的通用函数 我们在各种 Acumatica 屏幕上使用它 我们希望在报表设计器中使用此函数 以便我们可以打印该值 示例 CheckBday 如果我们传递客户代码 它应该检查此客户生日字段 如果是今天 则返
  • 非升压asio检查错误c ++

    有没有办法使用 tcp 检查非 boost asio 程序中的错误 有没有办法随机向连接添加错误 我用 C 创建了一个简单的 Echo 服务器 现在我必须为其生成随机错误 但问题是我不知道如何生成 或者 如果这有更多帮助 我需要检查二维奇偶
  • Chrome 自动播放政策中的自动播放背景视频

    因此 在最新的 chrome 中 显然自动播放策略已更改 因此这反过来又破坏了每个具有应自动播放视频背景的网站 我想知道是否有人有任何聪明的解决办法可以 解决 这个问题 我相信按钮或 进入页面 解决方案将是一种糟糕的解决方法 特别是对于背景
  • 如何获取函数内部创建的变量?

    我正在 node js 中执行 javascript 文件 并且需要访问在该文件中创建的所有变量 由于这些 javascript 文件可以根据开发人员上下文保存任何内容 因此我需要以编程方式访问变量 我的问题是 如何获取函数内创建的变量 像
  • 创建登录屏幕

    制作密码 登录屏幕的最佳方法是什么 我在某处读到最好使用弹出控件 如果是这样 我到底需要在 App xaml 中的哪里创建它 在为 Windows Phone 7 应用程序实现登录屏幕时 您需要考虑许多事项 这是一个示例 http baba
  • 通过 HTTP 访问 FTP?

    我们有一个外部安全 FTP 服务器 我们希望通过 HTTPS 访问该服务器 我们的基础设施不支持 FTP 我知道这是可能的 但我不知道怎么做 我正在寻找这样的东西 ftp ftp mozilla org pub mozilla org zz
  • 如何在浏览器控制台中查看 CORS 飞行前 OPTIONS 请求?

    我正在寻找一种在发出 CORS 请求时查看 CORS 飞行前选项请求的方法 我想查看服务器的响应标头以帮助我调试遇到的 CORS 问题 但我无法在 Chrome 或 Firefox 的 网络 选项卡或控制台中找到执行此操作的方法 我还安装了
  • Azure AD:如何获取令牌中的组信息?

    我们在 MEAN 堆栈中开发了应用程序 我们正在使用阿达尔角 https github com AzureAD azure activedirectory library for js用于天蓝色广告身份验证的库 根据文档和样本 https
  • MarginLayoutParams.setMargins() 不起作用?

    事情是这样的 我想以编程方式添加一些图像 图像应该有一个topMargin of 5dip除了第一张图片之外 LinearLayout with a vertical orientation方式 代码段下方 LinearLayout bod
  • 使用各种语言在 Hadoop 中运行作业的优缺点是什么?

    到目前为止 我一直使用 Pig 或 Java 进行 MapReduce 专门针对 Hadoop 集群运行作业 我最近尝试通过 Hadoop 流使用 Python Map Reduce 这也很酷 所有这些对我来说都有意义 但我对何时想要使用一
  • 如何将 numpy 对象数组转换为 str/unicode 数组?

    Update 在最新版本的 numpy 例如 v1 8 1 中 这不再是问题 这里提到的所有方法现在都可以按预期工作 原问题 使用对象数据类型来存储字符串数组有时很方便 特别是当需要修改大型数组的内容而不事先知道字符串的最大长度时 例如 g
  • JQuery live 或与 .change() 类似的东西?

    我想做这个 http docs jquery com Events live typefn http docs jquery com Events live typefn 只有 live 不支持更改事件 有解决方法吗 需要将函数绑定到某些动
  • 设计问题 - Web 应用程序会话中的持久数据

    我正在使用 servlet 和 jsp 开发一个 Web 应用程序 我有一个关于存储登录会话中多个 servlet 需要使用的数据的问题 例如 当用户登录时 我从数据库获取用户对象 并希望将其存储在某个地方 并让后续的 servlet 和
  • 使用构面时如何将值向量传递给 geom_vline?

    我有一个包含多列的数据框 每列对应一个不同的 id 我使用以下代码为每列创建了密度图 ggplot melt df aes x value geom density facet wrap paginate variable nrow 3 n
  • Python、Pandas 删除 Excel 中的行

    用于删除某些行的电子表格 在保存到新电子表格之前 将删除其第一列中包含以 36 开头的值的所有行 我使用这些代码 并且需要随后在 Excel 中拆分列 该示例如下所示 import xlwt from xlrd import open wo
  • Rails:has_many,但也有不同名称的 has_one

    让我们说一个User有很多Documents 以及单个Document他们目前正在努力 我如何在 Rails 中表示这一点 我想说current user current document Document first 在文档前面有或没有
  • sessionStorage 未按预期工作

    这是我的代码 sessionStorage loggedIn true if sessionStorage loggedIn alert true else alert false 够简单的 关于 JavaScript 如何评估这些表达式
  • UITextField成为FirstResponder仅工作一次

    在我的应用程序中 用户可以输入自己的姓名 UITextField 将被添加到视图中 并调用BecomeFirstResponder 在textFieldShouldReturn方法中 调用了resignFirstResponder 然后在
  • 使用线性内核调整 SVM 时,R 插入符异常缓慢

    在调整 SVM 参数时 我观察到一个非常奇怪的行为caret 当训练单个模型而不进行调整时 具有径向基核的 SVM 比具有线性核的 SVM 花费更多时间 这是预期的 然而 当在相同的惩罚网格上调整具有两个核的 SVM 时 具有线性核的 SV