Python实现曲线的肘部点检测详解

 更新时间:2023年02月28日 09:48:20   作者:mantoureganmian  
肘部法则是经常使用的法则。很多时候,可以凭人工经验去找最优拐点,但有时需要自动寻找拐点。本文为大家介绍了Python实现曲线的肘部点检测的方法,希望对大家有所帮助

肘部法则是经常使用的法则。很多时候,可以凭人工经验去找最优拐点,但有时需要自动寻找拐点。最近解决了一下这个问题,希望对各位有用。

一. 术语解释

**肘形曲线(elbow curve)**类似人胳膊状的曲线,拐点在肘部。**膝形曲线(knee curve)人腿形的曲线,拐点在膝盖。这类曲线和二八原则(即帕托累法则)**不谋而合,做决策时,自然选择肘点或膝点做参考。按照拐点在左还是右侧来分,细分为:左膝点曲线,右膝点曲线,左肘点曲线,右肘点曲线。

曲线示意图如下:

左膝点曲线膝点在左边的曲线(术语是我自己起的,明白意思就好,膝点在左边)如下:

从形状上,四种曲线没有大的区别,可以相互转化:

肘曲线与膝曲线相互转化,用曲线最大值减去曲线各点值即可。同类型曲线,左右拐点转化,就是切换升序降序排序即可。

它们都可以计算拐点,其中以左膝点曲线(见下图)计算拐点最简单,所以以其为标准曲线。

二. 拐点检测

左膝点曲线,原理是其二次曲线导数最大点,如下:

对于离散序列来说,当x轴差为1时,二次曲线计算公式为:

f′′(xi​)=f(xi−1​)+f(xi+1​)−2*f(xi​)

推荐一个简单的包:kneed Github地址

支持:Python 3.7, 3.8, 3.9, and 3.10. 安装如下:

$ conda install -c conda-forge kneed
# 或者
$ pip install kneed # To install only knee-detection algorithm
$ pip install kneed[plot] # To also install plotting functions for quick 

使用如下:

from kneed import DataGenerator, KneeLocator

x, y = DataGenerator.figure2()

print([round(i, 3) for i in x])
print([round(i, 3) for i in y])

# out: [0.0, 0.111, 0.222, 0.333, 0.444, 0.556, 0.667, 0.778, 0.889, 1.0]
# out: [-5.0, 0.263, 1.897, 2.692, 3.163, 3.475, 3.696, 3.861, 3.989, 4.091]

kneedle = KneeLocator(x, y, S=1.0, curve="concave", direction="increasing")

print(round(kneedle.knee, 3))
# out: 0.222

print(round(kneedle.elbow, 3))
# out: 0.222

到此这篇关于Python实现曲线的肘部点检测详解的文章就介绍到这了,更多相关Python曲线肘部点检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pyQt5实时刷新界面的示例

    pyQt5实时刷新界面的示例

    今天小编就为大家分享一篇pyQt5实时刷新界面的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 详解如何优雅的用PyQt访问http

    详解如何优雅的用PyQt访问http

    这篇文章主要我打开详细介绍了如何优雅的用PyQt实现访问http,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2024-11-11
  • python深度学习借助多标签分类器进行对抗训练

    python深度学习借助多标签分类器进行对抗训练

    这篇文章主要为大家介绍了python深度学习中如何借助多标签分类器进行对抗训练,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-01-01
  • 使用python实现ftp的文件读写方法

    使用python实现ftp的文件读写方法

    今天小编就为大家分享一篇使用python实现ftp的文件读写方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Django DRF认证组件流程实现原理详解

    Django DRF认证组件流程实现原理详解

    这篇文章主要介绍了Django DRF认证组件流程实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 一劳永逸彻底解决pip install慢的办法

    一劳永逸彻底解决pip install慢的办法

    经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,这篇文章主要给大家介绍了一个可以一劳永逸彻底解决pip install慢的办法,需要的朋友可以参考下
    2021-05-05
  • python中dropna()函数的作用举例说明

    python中dropna()函数的作用举例说明

    这篇文章主要给大家介绍了关于python中dropna()函数的相关资料,dropna()是pandas库中的一个函数,用于删除DataFrame中的缺失值,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python列表append()函数使用方法详解

    Python列表append()函数使用方法详解

    python中的append()函数是在列表末尾添加新的对象,且将添加的对象最为一个整体,下面这篇文章主要给大家介绍了关于Python列表append()函数使用方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Pytorch创建张量的四种方法

    Pytorch创建张量的四种方法

    Pytorch创建张量的4种方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy(),本文通过实例代码介绍Pytorch创建张量的四种方法,需要的朋友可以参考下
    2023-05-05
  • 详解如何使用pandas进行时间序列数据的周期转换

    详解如何使用pandas进行时间序列数据的周期转换

    时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换,感兴趣的朋友可以参考下
    2024-05-05

最新评论