美文网首页
数据拐点

数据拐点

作者: AsdilFibrizo | 来源:发表于2020-11-18 14:51 被阅读0次

    对于一组数据,如何求拐点是一个经常需要做的事情,特别是对于拖尾的数据,这里介绍一个python工具包可以简单的判断一组list<int>的拐点


    拐点图

    1. 安装

    下面任意一种方式都可

    1. conda install -c conda-forge kneed
    2. pip install kneed
    3. git clone https://github.com/arvkevi/kneed.git
       python setup.py install
    

    2.使用方法

    假设我们有一组数据:

    from kneed import KneeLocator
    import matplotlib.pyplot as plt
    # 需要注意x,y的长度必须一致
    x = [1, 2, 3.4,  4, 5.3,  6.6, 7.4, 8.2, 9.7, 10.1]
    y = [1, 2, 10, 14, 16, 17, 20, 54, 75, 89]
    kneedle = KneeLocator(x, y, S=1.0, curve='convex', direction='increasing')
    print(f'拐点所在的x轴是: {kneedle.elbow}')
    kneedle.plot_knee() # 将数据画出来
    
    ['out']: 拐点所在的x轴是: 7.4
    
    拐点图

    3.参数介绍及说明

    1. 当你的数据是一个凹函数,并且是递增的,请使用:
    curve='convex' and direction='increasing'
    如下:
    x = [1,2, 3.4, 4, 5.3, 6.6, 7.4, 8.2, 9.7, 10.1]
    y = [1, 2, 10, 14, 16, 17, 20, 54, 75, 89]
    kneedle = KneeLocator(x, y, S=1.0, curve='convex', direction='increasing')
    kneedle.plot_knee()
    print(f'拐点所在的x轴是: {kneedle.elbow}') # 拐点所在x轴的值(不是x轴索引索引)
    
    ['out'] : 
    拐点所在的x轴是: 7.4
    
    凹函数递增
    2. 当你的数据是一个凹函数, 并且是递减少的, 请使用:
    curve='convex' and direction='decreasing'
    如下:
    x = [1,2, 3.4, 4, 5.3, 6.6, 7.4, 8.2, 9.7, 10.1]
    y = [89, 75, 54, 20, 17, 16, 14, 10, 2, 1]
    kneedle = KneeLocator(x, y, S=1.0, curve='convex', direction='decreasing')
    kneedle.plot_knee()
    print(f'拐点所在的x轴是: {kneedle.elbow}')
    
    ['out']:
    拐点所在的x轴是: 4.0
    
    凹函数递增
    3. 当你的数据是一个凸函数, 并且是递增的, 请使用:
    curve='concave' and direction='increasing'
    x = [1,2, 3.4, 4, 5.3, 6.6, 7.4, 8.2, 9.7, 10.1]
    y = [1, 10, 15, 30, 37, 38, 39, 42, 41, 41.2]
    kneedle = KneeLocator(x, y, S=1.0, curve='concave', direction='increasing')
    kneedle.plot_knee()
    print(f'拐点所在的x轴是: {kneedle.elbow}')
    
    ['out']:
    拐点所在的x轴是: 5.3
    
    凸函数递增
    4. 当你的数据是一个凸函数, 并且是递减的, 请使用:
    curve='concave' and direction='decreasing'
    x = [1,2, 3.4, 4, 5.3, 6.6, 7.4, 8.2, 9.7, 10.1]
    y = [41.2, 41, 42, 39, 38, 37, 30, 15, 10, 1]
    kneedle = KneeLocator(x, y, S=1.0, curve='concave', direction='decreasing')
    kneedle.plot_knee()
    print(f'拐点所在的x轴是: {kneedle.elbow}')
    
    ['out']:
    拐点所在的x轴是: 6.6
    
    凸函数递减

    其它参数:

    s:  敏感性, 原论文默认推荐为 1.0 
    curve:  'concave', 算法将会计算 knees(可以理解为凸函数),这时输出拐点所在x轴使用 kneedle.knees
            'convex', 算法将会计算 elbows(可以理解为凹函数),这时输出拐点所在x轴使用 kneedle.elbows
    direction: "increasing", "decreasing" 其中一个,分别代表递增和递减
    还有一些不常用的参数详见:
    https://pypi.org/project/kneed/
    

    相关文章

      网友评论

          本文标题:数据拐点

          本文链接:https://www.haomeiwen.com/subject/gbrciktx.html