Knee-point detection in Python
Project description
kneed
Knee-point detection in Python
This repository is an attempt to implement the kneedle algorithm, published here. Given a set of x
and y
values, kneed
will return the knee point of the function. The knee point is the point of maximum curvature.
Table of contents
Installation
kneed
has been tested with Python 3.5, 3.6, 3.7 and 3.8.
anaconda
$ conda install -c conda-forge kneed
pip
$ pip install kneed
Clone from GitHub
$ git clone https://github.com/arvkevi/kneed.git
$ python setup.py install
Usage
These steps introduce how to use kneed
by reproducing Figure 2 from the manuscript.
Input Data
The DataGenerator
class is only included as a utility to generate sample datasets.
Note:
x
andy
must be equal length arrays.
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])
[0.0, 0.111, 0.222, 0.333, 0.444, 0.556, 0.667, 0.778, 0.889, 1.0]
[-5.0, 0.263, 1.897, 2.692, 3.163, 3.475, 3.696, 3.861, 3.989, 4.091]
Find Knee
The knee (or elbow) point is calculated simply by instantiating the KneeLocator
class with x
, y
and the appropriate curve
and direction
.
Here, kneedle.knee
and/or kneedle.elbow
store the point of maximum curvature.
kneedle = KneeLocator(x, y, S=1.0, curve="concave", direction="increasing")
print(round(kneedle.knee, 3))
0.222
print(round(kneedle.elbow, 3))
0.222
The knee point returned is a value along the x
axis. The y
value at the knee can be identified:
print(round(kneedle.knee_y, 3))
1.897
Visualize
The KneeLocator
class also has two plotting functions for quick visualizations.
Note that all (x, y) are transformed for the normalized plots
# Normalized data, normalized knee, and normalized distance curve.
kneedle.plot_knee_normalized()
# Raw data and knee.
kneedle.plot_knee()
Documentation
Documentation of the parameters and a full API reference can be found here.
Contributing
Contributions are welcome, please refer to CONTRIBUTING to learn more about how to contribute.
Citation
Finding a “Kneedle” in a Haystack: Detecting Knee Points in System Behavior Ville Satopa † , Jeannie Albrecht† , David Irwin‡ , and Barath Raghavan§ †Williams College, Williamstown, MA ‡University of Massachusetts Amherst, Amherst, MA § International Computer Science Institute, Berkeley, CA
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for kneed-0.7.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a41c652a4f0c3d77c130c7fd7b1cd4f46d84752a70a461b5817c8eca938ee08 |
|
MD5 | 15f87ecbcfec2395f1524c624a9d5ae6 |
|
BLAKE2b-256 | c36be130913aaaad1373060e259ab222ca2330672db696b297b082c3f3089fcc |