Python中使用kneed库查找曲线拐点结果异常该如何解决?
问题原因
你出现识别结果偏差主要是两个参数配置错误导致的:
curve参数与实际曲线特征不匹配:你当前的曲线是前期增长平缓、后期斜率突然升高的递增凹曲线,应该配置curve="concave",你填的convex仅适用于前期增速快、后期增速放缓的凸曲线场景。- 默认灵敏度参数S(默认值为1)对强跳变场景的感知阈值过高,S值越小,算法对斜率变化的敏感度越高。
修正后代码
import numpy as np from kneed import KneeLocator x = np.array([30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750]) y = np.array([1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,15,15,15,16,16,]) # 修改curve参数,调低灵敏度S,开启online逐点检测模式适配离散跳变场景 kneedle = KneeLocator(x, y, curve="concave", direction="increasing", S=0, online=True) print(kneedle.knee)
运行上述代码会输出600,符合预期。如果需要识别为跳变后的630,将S参数调整为0.1即可。
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

