Struct plr::regression::GreedyPLR
source · [−]pub struct GreedyPLR { /* private fields */ }
Expand description
Performs a greedy piecewise linear regression (PLR) in an online fashion. This approach uses constant
time for each call to process
as well as constant space. Note that, due to the
greedy nature of the algorithm, more regression segments may be created than strictly needed. For
PLR with a minimal number of segments, please see OptimalPLR
.
Each call to process
consumes a single point. Each time it is called,
process
returns either a Segment
representing
a piece of the final regression, or None
. If your stream of points terminates, you can call
finish
to flush the buffer and return the final segment.
Example
use plr::regression::GreedyPLR;
// first, generate some data points...
let mut data = Vec::new();
for i in 0..1000 {
let x = (i as f64) / 1000.0 * 7.0;
let y = f64::sin(x);
data.push((x, y));
}
let mut plr = GreedyPLR::new(0.0005); // gamma = 0.0005, the maximum regression error
let mut segments = Vec::new();
for (x, y) in data {
// when `process` returns a segment, we should add it to our list
if let Some(segment) = plr.process(x, y) {
segments.push(segment);
}
}
// because we have a finite amount of data, we flush the buffer and get the potential
// last segment.
if let Some(segment) = plr.finish() {
segments.push(segment);
}
// the `segments` vector now contains all segments for this regression.
Implementations
sourceimpl GreedyPLR
impl GreedyPLR
sourcepub fn new(gamma: f64) -> GreedyPLR
pub fn new(gamma: f64) -> GreedyPLR
Enables performing PLR using a greedy algorithm with a fixed gamma (maximum error).
Examples
To perform a greedy PLR with a maximum error of 0.05
:
use plr::regression::GreedyPLR;
let plr = GreedyPLR::new(0.05);
sourcepub fn process(&mut self, x: f64, y: f64) -> Option<Segment>
pub fn process(&mut self, x: f64, y: f64) -> Option<Segment>
Processes a single point using the greedy PLR algorithm. This function returns
a new Segment
when the current segment cannot accommodate
the passed point, and returns None if the current segment could be (greedily) adjusted to
fit the point.
Auto Trait Implementations
impl RefUnwindSafe for GreedyPLR
impl Send for GreedyPLR
impl Sync for GreedyPLR
impl Unpin for GreedyPLR
impl UnwindSafe for GreedyPLR
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> CheckedAs for T
impl<T> CheckedAs for T
sourcefn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
sourcefn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
sourceimpl<T> OverflowingAs for T
impl<T> OverflowingAs for T
sourcefn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
sourcefn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
OverflowingCasts the value.
sourceimpl<T> SaturatingAs for T
impl<T> SaturatingAs for T
sourcefn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
sourcefn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
sourceimpl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
sourcefn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
sourcefn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
UnwrappedCasts the value.
sourceimpl<T> WrappingAs for T
impl<T> WrappingAs for T
sourcefn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
sourcefn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
WrappingCasts the value.