检测简单数值向量中的一个或多个拐点

2024-01-11

All,

我正在寻找一种可靠的、无监督的方法来检测相对较短的向量中的变化点。考虑以下两个示例:

v1 = c(0.299584,0.314446,0.357783,0.388896,0.410417,0.427182,0.450383,0.466671,0.474884,0.474749,0.493566,0.500374,0.522482,0.529851,0.538387,0.577901,0.610939,0.639383,0.662433,0.692656,0.720543,0.738255,0.748055,0.7591,0.770595,0.781811,0.794479,0.794588,0.789448,0.77667,0.765406,0.75152,0.740408,0.726898,0.720766,0.709445,0.69896,0.687508,0.673382,0.65795,0.639214,0.620445,0.590047,0.561773,0.526807,0.486848,0.439681,0.387545,0.313369,0.282872,0.279908,0.271836,0.269088,0.262727,0.259782)

v2 = c(0.081309,0.206263,0.429069,0.511859,0.565194,0.578792,0.56919,0.51985,0.432563,0.193907,0.0771,0.086603,0.18303,0.177608,0.169706,0.260917,0.292062,0.2979,0.263249,0.270576,0.250422,0.25219,0.182878,0.080623,0.079443,0.088944,0.087623,0.126403,0.155563,0.273942,0.312054,0.370195,0.357087,0.336452,0.300574,0.243105,0.243105,0.25593,0.227401,0.218047,0.15857,0.157727,0.139801,0.125742,0.129142,0.142166,0.142166,0.136748,0.107755,0.064377,0.072801,0.060093,0.103441,0.111704,0.124544)

如果你看

plot(v1,type='l') 

and

plot(v2,type='l')

您可以看到,对于 v1,我希望检测索引 = 28 附近的变化,对于 v2,我希望检测索引值 8、11、18、25、32 和 51 处的变化。到目前为止,我我已经尝试过贝叶斯变化点算法,该算法在识别可能出现拐点的位置(低后验概率区域)方面效果不错,但仍然迫使我依靠目视检查来进行最终确定:

install.packages('bcp')
library(bcp)

test = bcp(v1,w0=0.2,p0=0.01)
plot(v1,type='l')
par(new=TRUE)
plot(test$posterior.prob,type='l',col=2)

test = bcp(v2,w0=0.2,p0=0.01)
plot(v2,type='l')
par(new=TRUE)
plot(test$posterior.prob,type='l',col=2)

有没有一种方法可以自动无监督地选择此类数据中多个变化点的估计?也许我只是徒劳地寻找人类直觉的替代品:P我还查看了changepoint包,但它似乎不是为此类数据设计的。

谢谢, 亚伦


所以,这是一个简单的解决方案。您可以修改参数以返回不同的(更多/更少,敏感/不敏感)拐点(或区域,就您的数据而言)。

plot(v2, type="l", col="darkblue", lwd=2)
# v2 <- smooth(v2, kind="3")  # optional
lines(v2, lwd=1, col="red")
d2 <- diff(v2)
d2 <- d2>0
d2 <- d2*2 -1 
k <- 5
cutoff <- 10
scores <- sapply(k:(length(d2)-k), FUN=function(i){
  score <- abs(mean(-d2[ i-1:k ], na.rm=T) + mean(d2[ i+0:k ], na.rm=T))
})


scores <- sapply(k:(length(v2)-k), FUN=function(i){
  left <- (v2[sapply(i-1:k, max, 1) ]<v2[i])*2-1
  right <- (v2[sapply(i+1:k, min, length(v2)) ]<v2[i])*2-1

  score <- abs(sum(left) + sum(right))
})

inflections <- (k:(length(v2)-k))[scores>=cutoff]

plot(v2, type="l")
abline(v=inflections, col="red", lwd=3)
print(inflections) #  6 11 18 25 32 (missed 51, if you make cutoff=8 it'll catch it...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测简单数值向量中的一个或多个拐点 的相关文章

随机推荐

  • 远程运行 Perl 脚本时使用 MsgBox 回显变量?

    这可能吗 我正在使用 VB net 执行远程 Perl 脚本 我希望屏幕上出现一个 MsgBox 类似于 VBScript 我尝试只执行 Win32 MsgBox Test 但这不起作用 有可能吗 我正在从 Windows 系统远程执行脚本
  • 计算两幅图像之间的模糊内核

    与标准 且更具挑战性 去模糊和超分辨率场景不同 我可以访问原始 清晰 图像G而且是模糊版本B 我只是在寻找模糊内核h 所以因为B使用真实相机拍摄 关系为 B G h N 在哪里 表示卷积和N是一些附加噪声 自然 这是一个过度约束的问题 因为
  • 正则表达式仅匹配不在括号或方括号中的逗号

    我想用不在括号或方括号中的逗号分隔字符串 我正在使用以下字符串 土豆 植物油 向日葵油 玉米油和 或菜籽油 蜂蜜 烧烤调味料 糖 盐 葡萄糖 圆酵母 洋葱粉 香料 麦芽糊精果糖 酵母提取物 糖蜜 天然香料 含牛奶 玉米淀粉 蜂蜜 阿拉伯胶
  • 直接用户输入的动态 LINQ 有什么危险吗?

    我在 ASP NET MVC 应用程序中有一个表 我希望可以使用 AJAX 对其进行排序 服务器端 和过滤 我希望它在其他地方相当容易使用 并且不想将排序和过滤硬编码到查询表达式中 因此我寻找一种动态构建表达式的方法 我发现最好的方法是使用
  • 如何将 CSS 变换矩阵转换回其组件属性

    我通过使用获得了元素的 CSS 变换矩阵getComputedStyle 方法如下 var style window getComputedStyle elem1 null var trans style transform 反式 矩阵 1
  • 使用 LINQ LAMBDA 获取每个部门的员工

    我正在尝试使用 LINQ 连接两个表员工和部门 并尝试获取下面给出的图像格式的结果 有人可以帮助如何实现这一目标吗 如何实现每个部门的员工 这是我的代码 var EmpList from d in Department join e in
  • 初始加载后取消选择列表框中的所有项目

    我有一个列表框 最初显示时选择了第一个项目 我希望它显示时未选择任何项目 这可能吗 ListBox ClearSelected or ListBox SelectedIndex 1 当然 它们是成员方法
  • 导航栏下方的空白区域

    When self navigationController navigationBar translucent NO 导航栏下方出现空白 如下所示 我怎样才能删除它 From above example void loadUI self
  • 找不到模块 ember-validations

    尝试使用 ember cli 的 ember validations 插件 遇到这个问题 我不知道缺少什么 这是我的 package json 中的依赖项部分 devDependencies broccoli asset rev 2 0 0
  • 未找到 Xamarin 方法“CGSize..ctor”

    我刚刚更新了 xamarin studio 然后更新了我的 iOS 项目中的 xamarin forms 包 一切都构建得很好 但是当我尝试在模拟器中运行该应用程序时 出现以下错误 未找到方法 CGSize ctor 我创建了一个新的解决方
  • Laravel Blade 表单关闭问题

    我在 Laravel 中有一个这样的表单 div class modal body Form model questionGroup route gt question groups update questionGroup gt id m
  • 如何使用 uniqueId() jquery ui

    似乎 jquery ui 已加载 因为当我运行时 function did the UI load console log ui version JS控制台返回1 10 3 我正在使用宝石https github com joliss jq
  • Pandas 将 groupby 总和值分配给原始表中的最后一行

    例如 我有一张桌子 A id price sum 1 2 0 1 6 0 1 4 0 2 2 0 2 10 0 2 1 0 2 5 0 3 1 0 3 5 0 我想要的就像 最后一行sum应该是price一个团体的 id price sum
  • Asp.net 会员资格 - 帐户被锁定

    我们正在使用 ASP net 附带的标准 ASP net 会员功能 我们的会员数据库中的某些帐户将 锁定 标志设置为 true 这种情况何时 如何发生 在可配置的时间长度 passwordAttemptWindow 默认 10 分钟 内登录
  • JQuery FullCalendar 从 ajax 成功调用 rerenderEvents 时出现问题

    由于某种原因 我无法在 POST 后重新呈现日历 到那时一切都很顺利 calendar fullCalendar select function startDate endDate ajax url data php type POST d
  • 使用 Skip/Take 进行分页时 LINQ 查询性能极差

    我需要使用 LINQ 从 DB2 数据库查询记录 我有从数据库架构生成的实体 并尝试使用 Skip 和 Take 执行 LINQ 查询 基础表大约有 25 列 可能有 100 万条记录 当我在没有 Skip 的情况下执行查询时 大约需要 0
  • 反应式表单提交后显示错误消息

    在 Angular 8 Reactive 表单上 我有以下内容
  • phonegap 3.5.0 中缺少 Cordova jar

    在我使用phonegap 2 7 0之前 因此 对于phonegap更新 我使用node js安装了phonegap版本3 5 0 但在phonegap文件夹中没有cordova jar文件 如果我在 ADT 中创建一个项目 如何添加 co
  • VS2008 C++ 优化器有时会生成较慢的代码吗?

    继从上一个问题 https stackoverflow com questions 5165877 whole program optimization failing in vc2008 我一直在我的发布版本中尝试优化器设置 以了解使用编
  • 检测简单数值向量中的一个或多个拐点

    All 我正在寻找一种可靠的 无监督的方法来检测相对较短的向量中的变化点 考虑以下两个示例 v1 c 0 299584 0 314446 0 357783 0 388896 0 410417 0 427182 0 450383 0 4666