algorithms

package
v0.6.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2024 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidInitialValues = errors.New("the initial values provided are invalid")

ErrInvalidInitialValues indicates that the initial values provided are not valid to initialize a PeakDetector.

Functions

This section is empty.

Types

type Line added in v0.3.9

type Line struct {
	// contains filtered or unexported fields
}

type PeakDetector

type PeakDetector interface {
	// Initialize initializes the PeakDetector with its configuration and initialValues. The initialValues are the first
	// values to be processed by the PeakDetector. The length of these values are used to configure the PeakDetector's
	// lag (see description below). The PeakDetector will never return any signals for the initialValues.
	//
	// influence determines the influence of signals on the algorithm's detection threshold. If put at 0, signals have
	// no influence on the threshold, such that future signals are detected based on a threshold that is calculated with
	// a mean and standard deviation that is not influenced by past signals. If put at 0.5, signals have half the
	// influence of normal data points. Another way to think about this is that if you put the influence at 0, you
	// implicitly assume stationary (i.e. no matter how many signals there are, you always expect the time series to
	// return to the same average over the long term). If this is not the case, you should put the influence parameter
	// somewhere between 0 and 1, depending on the extent to which signals can systematically influence the time-varying
	// trend of the data. E.g., if signals lead to a structural break of the long-term average of the time series, the
	// influence parameter should be put high (close to 1) so the threshold can react to structural breaks quickly.
	//
	// threshold is the number of standard deviations from the moving mean above which the algorithm will classify a new
	// datapoint as being a signal. For example, if a new datapoint is 4.0 standard deviations above the moving mean and
	// the threshold parameter is set as 3.5, the algorithm will identify the datapoint as a signal. This parameter
	// should be set based on how many signals you expect. For example, if your data is normally distributed, a
	// threshold (or: z-score) of 3.5 corresponds to a signaling probability of 0.00047 (from this table), which implies
	// that you expect a signal once every 2128 datapoints (1/0.00047). The threshold therefore directly influences how
	// sensitive the algorithm is and thereby also determines how often the algorithm signals. Examine your own data and
	// choose a sensible threshold that makes the algorithm signal when you want it to (some trial-and-error might be
	// needed here to get to a good threshold for your purpose).
	//
	// lag determines how much your data will be smoothed and how adaptive the algorithm is to change in the long-term
	// average of the data. The more stationary your data is, the more lags you should include (this should improve the
	// robustness of the algorithm). If your data contains time-varying trends, you should consider how quickly you want
	// the algorithm to adapt to these trends. I.e., if you put lag at 10, it takes 10 'periods' before the algorithm's
	// threshold is adjusted to any systematic changes in the long-term average. So choose the lag parameter based on
	// the trending behavior of your data and how adaptive you want the algorithm to be.
	Initialize(influence, threshold float64, initialValues []float64) error
	// Next processes the next value and determines its signal.
	Next(value float64) Signal
	// NextBatch processes the next values and determines their signals. Their signals will be returned in a slice equal
	// to the length of the input.
	NextBatch(values []float64) []Signal
}

PeakDetector detects peaks in realtime timeseries data using z-scores.

This is a Golang interface for the algorithm described by this StackOverflow answer: https://stackoverflow.com/a/22640362/14797322

Brakel, J.P.G. van (2014). "Robust peak detection algorithm using z-scores". Stack Overflow. Available at: https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data/22640362#22640362 (version: 2020-11-08). Deprecated: 原理需要设置阀值, 不推荐使用 [wangfeng on 2024/2/7 11:20]

func NewPeakDetector

func NewPeakDetector() PeakDetector

NewPeakDetector creates a new PeakDetector. It must be initialized before use.

type PeeksAndValleys

type PeeksAndValleys struct {
	Data      []float64 // 原始数据
	Diff      []float64 // 一阶差分
	PosPeak   []int     // 波峰位置存储
	PosValley []int     // 波谷位置存储
	Pcnt      int       // 所识别的波峰计数
	Vcnt      int       // 所识别的波谷计数
}

PeeksAndValleys 波峰波谷

func InitPV

func InitPV(data []float64) *PeeksAndValleys

InitPV 创建并初始化波峰波谷

func (*PeeksAndValleys) Find

func (this *PeeksAndValleys) Find()

Find 找波峰波谷

func (*PeeksAndValleys) String

func (this *PeeksAndValleys) String() string

type Point added in v0.3.9

type Point struct {
	// contains filtered or unexported fields
}

type Signal

type Signal int8

Signal is a set of enums that indicates what type of peak, if any a particular value is.

const (
	// SignalNegative indicates that a particular value is a negative peak.
	SignalNegative Signal = -1
	// SignalNeutral indicates that a particular value is not a peak.
	SignalNeutral Signal = 0
	// SignalPositive indicates that a particular value is a positive peak.
	SignalPositive Signal = 1
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL