Python實(shí)現(xiàn)曲線(xiàn)的肘部點(diǎn)檢測(cè)詳解
肘部法則是經(jīng)常使用的法則。很多時(shí)候,可以憑人工經(jīng)驗(yàn)去找最優(yōu)拐點(diǎn),但有時(shí)需要自動(dòng)尋找拐點(diǎn)。最近解決了一下這個(gè)問(wèn)題,希望對(duì)各位有用。
一. 術(shù)語(yǔ)解釋
**肘形曲線(xiàn)(elbow curve)**類(lèi)似人胳膊狀的曲線(xiàn),拐點(diǎn)在肘部。**膝形曲線(xiàn)(knee curve)人腿形的曲線(xiàn),拐點(diǎn)在膝蓋。這類(lèi)曲線(xiàn)和二八原則(即帕托累法則)**不謀而合,做決策時(shí),自然選擇肘點(diǎn)或膝點(diǎn)做參考。按照拐點(diǎn)在左還是右側(cè)來(lái)分,細(xì)分為:左膝點(diǎn)曲線(xiàn),右膝點(diǎn)曲線(xiàn),左肘點(diǎn)曲線(xiàn),右肘點(diǎn)曲線(xiàn)。
曲線(xiàn)示意圖如下:
左膝點(diǎn)曲線(xiàn)膝點(diǎn)在左邊的曲線(xiàn)(術(shù)語(yǔ)是我自己起的,明白意思就好,膝點(diǎn)在左邊)如下:
從形狀上,四種曲線(xiàn)沒(méi)有大的區(qū)別,可以相互轉(zhuǎn)化:
肘曲線(xiàn)與膝曲線(xiàn)相互轉(zhuǎn)化,用曲線(xiàn)最大值減去曲線(xiàn)各點(diǎn)值即可。同類(lèi)型曲線(xiàn),左右拐點(diǎn)轉(zhuǎn)化,就是切換升序降序排序即可。
它們都可以計(jì)算拐點(diǎn),其中以左膝點(diǎn)曲線(xiàn)(見(jiàn)下圖)計(jì)算拐點(diǎn)最簡(jiǎn)單,所以以其為標(biāo)準(zhǔn)曲線(xiàn)。
二. 拐點(diǎn)檢測(cè)
左膝點(diǎn)曲線(xiàn),原理是其二次曲線(xiàn)導(dǎo)數(shù)最大點(diǎn),如下:
對(duì)于離散序列來(lái)說(shuō),當(dāng)x軸差為1時(shí),二次曲線(xiàn)計(jì)算公式為:
f′′(xi?)=f(xi−1?)+f(xi+1?)−2*f(xi?)
推薦一個(gè)簡(jiǎn)單的包: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
到此這篇關(guān)于Python實(shí)現(xiàn)曲線(xiàn)的肘部點(diǎn)檢測(cè)詳解的文章就介紹到這了,更多相關(guān)Python曲線(xiàn)肘部點(diǎn)檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyMySQL SQL語(yǔ)句傳參問(wèn)題,單個(gè)參數(shù)或多個(gè)參數(shù)說(shuō)明
這篇文章主要介紹了pyMySQL SQL語(yǔ)句傳參問(wèn)題,單個(gè)參數(shù)或多個(gè)參數(shù)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python:動(dòng)態(tài)路由的Flask程序代碼
今天小編就為大家分享一篇python:動(dòng)態(tài)路由的Flask程序代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python集成開(kāi)發(fā)環(huán)境pycharm配置git的實(shí)現(xiàn)步驟
本文主要介紹了Python集成開(kāi)發(fā)環(huán)境pycharm配置git的實(shí)現(xiàn)步驟,文中通過(guò)圖文的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05詳解Python圖像形態(tài)學(xué)處理(開(kāi)運(yùn)算,閉運(yùn)算,梯度運(yùn)算)
數(shù)學(xué)形態(tài)學(xué)(Mathematical Morphology)是一種應(yīng)用于圖像處理和模式識(shí)別領(lǐng)域的新方法。本文將為大家介紹Python圖像形態(tài)學(xué)處理中的開(kāi)運(yùn)算、閉運(yùn)算和梯度運(yùn)算,感興趣的可以了解一下2022-06-06Python中處理unchecked未捕獲異常實(shí)例
這篇文章主要介紹了Python中處理unchecked未捕獲異常實(shí)例,本文講解使用回調(diào)或者是鉤子來(lái)處理unchecked異常,需要的朋友可以參考下2015-01-01Python實(shí)現(xiàn)pdf轉(zhuǎn)word詳細(xì)代碼
在日常工作中,我們經(jīng)常會(huì)遇到需要將PDF文件轉(zhuǎn)換成Word文件的需求。雖然市面上有許多PDF轉(zhuǎn)Word的工具,但是它們通常需要付費(fèi)或者有轉(zhuǎn)換后的格式問(wèn)題,這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)pdf轉(zhuǎn)word的相關(guān)資料,需要的朋友可以參考下2023-09-09在python中畫(huà)正態(tài)分布圖像的實(shí)例
今天小編就為大家分享一篇在python中畫(huà)正態(tài)分布圖像的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07詳細(xì)聊聊為什么Python中0.2+0.1不等于0.3
最近在學(xué)習(xí)過(guò)程中發(fā)現(xiàn)在計(jì)算機(jī)JS時(shí)發(fā)現(xiàn)了一個(gè)非常有意思事,0.1+0.2的結(jié)果不是0.3,而是0.30000000000000004,下面這篇文章主要給大家介紹了關(guān)于為什么Python中0.2+0.1不等于0.3的相關(guān)資料,需要的朋友可以參考下2022-12-12