Segmenters

Takes input from the sensor transform/filter step and buffers the data until a segment is found.

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Windowing
Parameters
  • window_size (int) – The size of the window

  • delta (int) – The slide of the window

  • enable_train_delta (bool) – Enable or disable the train delta parameter

  • train_delta (int, optional) – Use this delta for sliding during training.

  • return_segment_index (bool, optional) – _description_. Defaults to False.

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Use Labels

This Segmenter uses the labels directly from your data set for training.

You should use this if

  • you are testing out models and want to have very accurate labeling

  • have not decided on how you will segment your data

  • you are going to implement your own segmentation algorithm

Note: This function expects you to implement your own segmentation algorithm in the firmware. that matches the types of segments you are creating.

Model firmware defaults to a sliding window of max window size.

Parameters
  • window_size (int) –

  • return_segment_index (bool, optional) – Defaults to False.

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Windowing Threshold Segmentation

This function transfer the input_data and group_column from the previous pipeline block. This is a single pass threshold segmentation algorithm which transforms a window of the data stream that defined with ‘threshold_space_width’ into threshold space. The threshold space can be computed as ‘standard deviation’(std), ‘sum’, ‘absolute sum’, ‘absolute average’ and ‘variance’. The vt threshold is then compared against the calculated value with a comparison type of >=. Once the threshold space is detected above the vt_threshold that becomes the anchor point. The segment starts at the index of the detected point minus a user specified offset. The end of the segment is immediately set to the window size.

Parameters
  • column_of_interest (str) – name of the stream to use for segmentation

  • window_size (int) – number of samples in the window (default is 100)

  • offset (int) – The offset from the anchor point and the start of the segment. for a offset of 0, the start of the window will start at the anchor point. ( default is 0)

  • vt_threshold (int) – vt_threshold value which determines the segment.

  • threshold_space_width (int) – Size of the threshold buffer.

  • threshold_space (str) – Threshold transformation space. (std, sum, absolute sum, variance, absolute avg)

  • comparison (str) – the comparison between threshold space and vertical threshold (>=, <=)

  • return_segment_index (False) – Set to true to see the segment indexes for start and end.

Returns

The segmented result will have a new column called SegmentID that contains the segment IDs.

Return type

DataFrame

Example

>>> client.pipeline.reset()
>>> df = client.datasets.load_activity_raw_toy()
>>> df
    out:
           Subject     Class  Rep  accelx  accely  accelz
        0      s01  Crawling    1     377     569    4019
        1      s01  Crawling    1     357     594    4051
        2      s01  Crawling    1     333     638    4049
        3      s01  Crawling    1     340     678    4053
        4      s01  Crawling    1     372     708    4051
        5      s01  Crawling    1     410     733    4028
        6      s01  Crawling    1     450     733    3988
        7      s01  Crawling    1     492     696    3947
        8      s01  Crawling    1     518     677    3943
        9      s01  Crawling    1     528     695    3988
        10     s01  Crawling    1      -1    2558    4609
        11     s01   Running    1     -44   -3971     843
        12     s01   Running    1     -47   -3982     836
        13     s01   Running    1     -43   -3973     832
        14     s01   Running    1     -40   -3973     834
        15     s01   Running    1     -48   -3978     844
        16     s01   Running    1     -52   -3993     842
        17     s01   Running    1     -64   -3984     821
        18     s01   Running    1     -64   -3966     813
        19     s01   Running    1     -66   -3971     826
        20     s01   Running    1     -62   -3988     827
        21     s01   Running    1     -57   -3984     843
>>> client.pipeline.set_input_data('test_data', df, force=True,
                    data_columns=['accelx', 'accely', 'accelz'],
                    group_columns=['Subject', 'Class', 'Rep'],
                    label_column='Class')
>>> client.pipeline.add_transform("Windowing Threshold Segmentation",
                       params={"column_of_interest": 'accelx',
                               "window_size": 5,
                               "offset": 0,
                               "vt_threshold": 0.05,
                               "threshold_space_width": 4,
                               "threshold_space": 'std',
                               "return_segment_index": False
                              })
>>> results, stats = client.pipeline.execute()
>>> print results
    out:
              Class  Rep  SegmentID Subject  accelx  accely  accelz
       0   Crawling    1          0     s01     377     569    4019
       1   Crawling    1          0     s01     357     594    4051
       2   Crawling    1          0     s01     333     638    4049
       3   Crawling    1          0     s01     340     678    4053
       4   Crawling    1          0     s01     372     708    4051
       5   Crawling    1          1     s01     410     733    4028
       6   Crawling    1          1     s01     450     733    3988
       7   Crawling    1          1     s01     492     696    3947
       8   Crawling    1          1     s01     518     677    3943
       9   Crawling    1          1     s01     528     695    3988
       10   Running    1          0     s01     -44   -3971     843
       11   Running    1          0     s01     -47   -3982     836
       12   Running    1          0     s01     -43   -3973     832
       13   Running    1          0     s01     -40   -3973     834
       14   Running    1          0     s01     -48   -3978     844
       15   Running    1          1     s01     -52   -3993     842
       16   Running    1          1     s01     -64   -3984     821
       17   Running    1          1     s01     -64   -3966     813
       18   Running    1          1     s01     -66   -3971     826
       19   Running    1          1     s01     -62   -3988     827

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Max Min Threshold Segmentation

This is a max min threshold segmentation algorithm which transforms a window of the data stream of size threshold_space_width into threshold space. This function transfer the input_data and group_column from the previous pipeline block.

The threshold space can be computed as standard deviation, sum, absolute sum, absolute average and variance. The vt threshold is then compared against the calculated value with a comparison type of >= for the start of the segment and <= for the end of the segment. This algorithm is a two pass detection, the first pass detects the start of the segment, the second pass detects the end of the segment.

Parameters
  • column_of_interest (str) – name of the stream to use for segmentation

  • max_segment_length (int) – number of samples in the window (default is 100)

  • min_segment_length – The smallest segment allowed.

  • threshold_space_width (float) – number of samples to check for being above the vt_threshold before forgetting segment.

  • threshold_space (std) – Threshold transformation space. (std, sum, absolute sum, variance, absolute avg)

  • first_vt_threshold (int) – vt_threshold value to begin detecting a segment

  • second_vt_threshold (int) – vt_threshold value to detect a segments end.

  • return_segment_index (False) – set to true to see the segment indexes for start and end.

Returns

The segmented result will have a new column called SegmentID that contains the segment IDs.

Return type

DataFrame

Example

>>> client.pipeline.reset()
>>> df = client.datasets.load_activity_raw_toy()
>>> df
    out:
           Subject     Class  Rep  accelx  accely  accelz
        0      s01  Crawling    1     377     569    4019
        1      s01  Crawling    1     357     594    4051
        2      s01  Crawling    1     333     638    4049
        3      s01  Crawling    1     340     678    4053
        4      s01  Crawling    1     372     708    4051
        5      s01  Crawling    1     410     733    4028
        6      s01  Crawling    1     450     733    3988
        7      s01  Crawling    1     492     696    3947
        8      s01  Crawling    1     518     677    3943
        9      s01  Crawling    1     528     695    3988
        10     s01  Crawling    1      -1    2558    4609
        11     s01   Running    1     -44   -3971     843
        12     s01   Running    1     -47   -3982     836
        13     s01   Running    1     -43   -3973     832
        14     s01   Running    1     -40   -3973     834
        15     s01   Running    1     -48   -3978     844
        16     s01   Running    1     -52   -3993     842
        17     s01   Running    1     -64   -3984     821
        18     s01   Running    1     -64   -3966     813
        19     s01   Running    1     -66   -3971     826
        20     s01   Running    1     -62   -3988     827
        21     s01   Running    1     -57   -3984     843
>>> client.pipeline.set_input_data('test_data', df, force=True,
                    data_columns=['accelx', 'accely', 'accelz'],
                    group_columns=['Subject', 'Class', 'Rep'],
                    label_column='Class')
>>> client.pipeline.add_transform("Max Min Threshold Segmentation",
                   params={ "column_of_interest": 'accelx',
                            "max_segment_length": 5,
                            "min_segment_length": 5,
                            "threshold_space_width": 3,
                            "threshold_space": 'std',
                            "first_vt_threshold": 0.05,
                            "second_vt_threshold": 0.05,
                            "return_segment_index": False})
>>> results, stats = client.pipeline.execute()
>>> print results
    out:
              Class  Rep  SegmentID Subject  accelx  accely  accelz
        0  Crawling    1          0     s01     377     569    4019
        1  Crawling    1          0     s01     357     594    4051
        2  Crawling    1          0     s01     333     638    4049
        3  Crawling    1          0     s01     340     678    4053
        4  Crawling    1          0     s01     372     708    4051
        5   Running    1          0     s01     -44   -3971     843
        6   Running    1          0     s01     -47   -3982     836
        7   Running    1          0     s01     -43   -3973     832
        8   Running    1          0     s01     -40   -3973     834
        9   Running    1          0     s01     -48   -3978     844

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

General Threshold Segmentation

This is a general threshold segmentation algorithm which transforms a window of the data stream of size threshold_space_width into threshold space. This function transfer the input_data and group_column from the previous pipeline block.

The threshold space can be computed as standard deviation, sum, absolute sum, absolute average and variance. The vt threshold is then compared against the calculated value with a comparison type of <= or >= based on the use of “min” or “max” in the comparison type. This algorithm is a two pass detection, the first pass detects the start of the segment, the second pass detects the end of the segment. In this generalized algorithm, the two can be set independently.

Parameters
  • first_column_of_interest (str) – name of the stream to use for first threshold segmentation

  • second_column_of_interest (str) – name of the stream to use for second threshold segmentation

  • max_segment_length (int) – number of samples in the window (default is 200)

  • min_segment_length (int) – The smallest segment allowed. (default 100)

  • first_vt_threshold (int) – vt_threshold value to begin detecting a segment

  • first_threshold_space (str) – threshold space to detect segment against (std, variance, absolute avg, absolute sum, sum)

  • first_comparison (str) – detect threshold above(max) or below(min) the vt_threshold (max, min)

  • second_vt_threshold (int) – vt_threshold value to detect a segments end.

  • second_threshold_space (str) – threshold space to detect segment end (std, variance, absolute avg, absolute sum, sum)

  • second_comparison (str) – detect threshold above(max) or below(min) the vt_threshold (max, min) threshold_space_width (int): the size of the buffer that the threshold value is calculated from.

  • return_segment_index (False) – set to true to see the segment indexes for start and end.

Returns

The segmented result will have a new column called SegmentID that contains the segment IDs.

Return type

DataFrame

Example

>>> client.pipeline.reset()
>>> df = client.datasets.load_activity_raw_toy()
>>> df
    out:
           Subject     Class  Rep  accelx  accely  accelz
        0      s01  Crawling    1     377     569    4019
        1      s01  Crawling    1     357     594    4051
        2      s01  Crawling    1     333     638    4049
        3      s01  Crawling    1     340     678    4053
        4      s01  Crawling    1     372     708    4051
        5      s01  Crawling    1     410     733    4028
        6      s01  Crawling    1     450     733    3988
        7      s01  Crawling    1     492     696    3947
        8      s01  Crawling    1     518     677    3943
        9      s01  Crawling    1     528     695    3988
        10     s01  Crawling    1      -1    2558    4609
        11     s01   Running    1     -44   -3971     843
        12     s01   Running    1     -47   -3982     836
        13     s01   Running    1     -43   -3973     832
        14     s01   Running    1     -40   -3973     834
        15     s01   Running    1     -48   -3978     844
        16     s01   Running    1     -52   -3993     842
        17     s01   Running    1     -64   -3984     821
        18     s01   Running    1     -64   -3966     813
        19     s01   Running    1     -66   -3971     826
        20     s01   Running    1     -62   -3988     827
        21     s01   Running    1     -57   -3984     843
>>> client.pipeline.set_input_data('test_data', df, force=True,
                    data_columns=['accelx', 'accely', 'accelz'],
                    group_columns=['Subject', 'Class', 'Rep'],
                    label_column='Class')
>>> client.pipeline.add_transform("General Threshold Segmentation",
                   params={"first_column_of_interest": 'accelx',
                        "second_column_of_interest": 'accely',
                        "max_segment_length": 5,
                        "min_segment_length": 5,
                        "threshold_space_width": 2,
                        "first_vt_threshold": 0.05,
                        "first_threshold_space": 'std',
                        "first_comparison": 'max',
                        "second_vt_threshold": 0.05,
                        "second_threshold_space": 'std',
                        "second_comparison": 'min',
                        "return_segment_index": False})
>>> results, stats = client.pipeline.execute()
>>> print results
    out:
              Class  Rep  SegmentID Subject  accelx  accely  accelz
        0  Crawling    1          0     s01     377     569    4019
        1  Crawling    1          0     s01     357     594    4051
        2  Crawling    1          0     s01     333     638    4049
        3  Crawling    1          0     s01     340     678    4053
        4  Crawling    1          0     s01     372     708    4051
        5   Running    1          0     s01     -44   -3971     843
        6   Running    1          0     s01     -47   -3982     836
        7   Running    1          0     s01     -43   -3973     832
        8   Running    1          0     s01     -40   -3973     834
        9   Running    1          0     s01     -48   -3978     844

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Double Peak Key Segmentation

Considers a double peak as the key to begin segmentation and a single peak as the end.

Parameters
  • input_data (DataFrame) – The input data.

  • column_of_interest (str) – The name of the stream to use for segmentation.

  • group_columns (List[str]) – A list of column names to use for grouping.

  • return_segment_index (bool) – If True, returns the segment indexes for start and end. This should only be used for visualization purposes and not for pipeline building.

  • min_peak_to_peak (int) – Minimum peak-to-peak distance for a potential double peak.

  • max_peak_to_peak (int) – Maximum peak-to-peak distance for a potential double peak.

  • twist_threshold (int) – Threshold to detect a first downward slope in a double peak.

  • end_twist_threshold (int) – Threshold to detect an upward slope preceding the last peak in a double peak.

  • last_twist_threshold (int) – Minimum threshold difference between the last peak and the following minimums.

  • max_segment_length (int) – The maximum number of samples a segment can contain. A segment length too large will not fit on the device.

Returns

If return_segment_index is True, returns a dictionary containing the start and

end indexes of each segment for visualization purposes. Otherwise, returns a DataFrame.

Return type

DataFrame

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Adaptive Windowing Segmentation

A sliding windowing technique with adaptive sizing. This will find the largest point after min_segment_length that is above the threshold. That point will be considered the end of the segment. If no points are above the threshold before reaching max segment length, then the segment will stop at max_segment_length

Parameters
  • input_data (DataFrame) – The input data.

  • columns_of_interest (str) – The stream to use for segmentation.

  • group_columns ([str]) – A list of column names to use for grouping.

  • max_segment_length (int) – This is the maximum number of samples a segment can contain.

  • min_segment_length (int) – segment can contain.

  • threshold (int) – The threshold must be met to start looking for the end of the segment early. If the threshold is not met, the segment ends at the max_segment_length

  • absolute_value (bool) – Takes the absolute value of the sensor data prior do doing the comparison

  • return_segment_index (False) – Set to true to see the segment indexes for start and end.