RegressionFeatures

Regressions are defined as a subclass of saccades, pointing in certain direction.

class eyefeatures.features.stats.RegressionFeatures(ranges=((135, 225),), features_stats=None, **kwargs)[source]

Bases: StatsTransformer

Regression Features Transformer. The transformer identifies saccades, and then selects regressions from them using user-defined set of ranges.

Parameters:
  • ranges (tuple[tuple[float, float], ...]) – tuple of tuples (l, r), where l and r are angles in degrees between 0 and 360 such that l <= r. If one wants a range that passes 360 degrees, they could use two ranges like ((270, 360), (0, 90)). Default: ((135, 225),) which corresponds to left-wards movements.

  • features_stats (dict[str, list[str]])

Example

Quick start with default parameters:

from eyefeatures.features.stats import RegressionFeatures

# Detect regressions in [-90, 90] degrees.
transformer = RegressionFeatures(
    features_stats={"length": ["mean", "std"]},
    x="x", y="y", t="time",
    ranges=((270, 360), (0, 90))
)
features = transformer.fit_transform(fixations_df)

Supported Metrics

  • length: Amplitude in pixels.

\[\text{Length(Saccade}_i\text{)} = ||\text{Fixation}_{i+1} - \text{Fixation}_{i} ||_{2}\]
  • speed: Velocity in pixels/ms.

\[\text{Speed(Saccade}_i\text{)} = \frac{\text{Length(Saccade}_i\text{)}}{\text{Time}_{i+1} - \text{Time}_{i}}\]
  • acceleration: Acceleration in pixels/ms².

\[\text{Acceleration(Saccade}_i\text{)} = \frac{1}{2} \frac{\text{Speed(Saccade}_i\text{)} }{\text{Time}_{i+1} - \text{Time}_{i}}\]
  • mask: Transition boolean mask.

\[\text{Mask(Saccade}_i\text{)} = \mathbb{I}[\text{Fixation}_{i}\in\text{ some regression}]\]