|
|
1
37
找到弯线的一种快速方法是从曲线的第一个点到最后一个点画一条线,然后找到离该线最远的数据点。 当然,这在一定程度上取决于线的平坦部分中的点的数量,但是如果每次测试相同数量的参数,那么结果应该是合理的。
|
|
|
2
16
以防有人需要工作 蟒蛇 版本的 MATLAB 发布的代码 Jonas 上面。
|
|
|
3
8
信息论模型选择的重点是它已经考虑了参数的数量。因此,不需要找一个肘部,只需要找到最小值。 只有在使用“拟合”时,才能找到曲线的肘部。即使这样,选择肘部的方法在某种意义上也会对参数的数量设置惩罚。要选择肘部,您需要最小化从原点到曲线的距离。距离计算中两个维度的相对权重将产生一个固有的惩罚项。信息论准则基于参数数量和用于估计模型的数据样本数量来设置该度量。 底线建议:使用BIC并取最小值。 |
|
|
4
7
第一,快速微积分复习:一阶导数
你想把那些
|
|
|
5
5
所以解决这个问题的一种方法是在肘部的 l 上画两条线。但是,由于曲线的一部分中只有几个点(如我在注释中提到的),因此线拟合会受到影响,除非您检测出哪些点被隔开并在它们之间进行插值以生成更均匀的序列,然后使用ransac查找两条线来拟合可以. 所以这里有一个更简单的解决方案-你所建立的图表看起来像是它们的工作方式,这要归功于matlab的缩放(很明显)。所以我所做的就是使用比例信息最小化从“原点”到您点的距离。
请注意: 来源估计可以显著改进,但我将把这留给您。
代码如下: 顺序 曲线=[8.4663 8.3457 5.3457 5.4507 5.32775 4.8305 4.7895 4.7895 4.6889 4.6889 4.6833 4.6819 4.6819 4.6542 4.6542 4.6501 4.6287 4.6287 4.6287 4.6162 4.585 4.555 4.555 4 4.5535 4.5134 4.474 4.474 4 4.4084.3497 4.3494 4.3268 4.3206 4.3206 4.3206 4.3204 4 4.3203 4 4.2975 4.3274 4.2864 4 4.284 4 4 4 4.2821 4 4 4 4.2821 4 4 4.4 4 4.2821 4.4.4 4 4.4 4.1923 4.19 4.1894 4.1785 4.178 4.1694 4 4.1694 4 4.1694 4 4.1556 4.1498 4.1498 4.1357 4.1222 4.1222 4.1217 4.1192 4.1178 4.1139 4.1135 4.1125 4.1035 4.1025 4.1023 4.0971 4.0969 4.0915 4.0915 4.0914 4.0836 4.0804 4.0803 4.0722 4.065 4.065 4.0649 4.0644 4.0637 4.0616 4.0616 4.061 4.0572 4.0563 4.056 4.0545 4.0545 4.0522 4.0519 4.0514 4.0484 4.0467 4.0463 4.0422 4.0392 4.0388 4.0385 4.0385 4.0383 4.038 4.0379 4.0375 4.0364 4.0353 4.0344; X轴=1:numel(曲线); points=[X轴;曲线];%'-所以格式化 获取缩放信息 F=图(1); 绘图(点(:,1),点(:,2)); ticks=get(get(f,'currentaxes'),'yticklabel'); ticks=str2num(ticks); Aspect=get(get(f,'currentaxes'),'dataaspectratio'); 相位=[相位(2)相位(1)] 关闭(f); 得到“原点” o=[X轴(1)刻度(1)] 按比例缩放数据-现在按比例缩放的值看起来像matlab的想法 %一个好的情节应该是什么样子 缩放的_o=o.*方面; 缩放后的点=bsxfun(@次,点,相位); 找到最近的点 del=总和((bsxfun(@减,缩放点,缩放点)。^2),2); [VAL IND]=最小值(del); 最佳值_roc=[ind曲线(ind)] %%显示 绘图(X轴,曲线,.-); 坚持住; 图(O(1),O(2),‘R*’); 图(最佳_roc(1),最佳_roc(2),'k*'); < /代码> 结果:
also
for the
|
|
|
6
5
下面是jonas在r中给出的解决方案:
|
|
|
7
3
以一种简单直观的方式,我们可以这样说 如果我们从曲线上的任何点到曲线的两个端点画两条线,这两条线所成的角度最小的点就是所需的点。 在这里,这两条线可以被视为手臂,点可以被视为肘关节! |
|
|
8
1
双派生方法。然而,对于嘈杂的数据来说,它似乎并不适用。对于输出,您只需找到d2的最大值即可识别肘部。这个实现在R中。
|
|
|
9
1
我做膝盖/肘部点检测已经有一段时间了。我决不是专家。 与这个问题相关的一些方法。 dfdt代表动态一阶导数阈值。它计算一阶导数,并使用阈值算法检测膝盖/肘部点。DSDT是相似的,但使用了二阶导数,我的评估表明它们具有相似的性能。 S-法是L-法的推广。L-法将两条直线拟合到曲线上,两条直线之间的截取点是膝盖/肘部点。最佳拟合是通过循环整体点、拟合直线和评估均方误差(MSE)来确定的。S-法适用于3条直线,这提高了精度,但也需要更多的计算。 我的所有代码都在上公开 GitHub . 此外,这 article 可以帮助您找到有关该主题的更多信息。它只有四页长,所以应该很容易阅读。您可以使用代码,如果您想讨论任何一种方法,请随意这样做。 |
|
|
10
0
如果您愿意的话,我已经将它翻译为R作为我自己的练习(请原谅我的非优化编码风格)。 *应用它在k均值上找到最佳簇数,效果很好。
函数的输入x应该是带有值的列表/向量 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |