ML-001: Feature Store und erste ML-Tests hinzufügen
This commit is contained in:
5
app/ml/__init__.py
Normal file
5
app/ml/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
"""Machine-Learning-Grundbausteine für SillyHome Next."""
|
||||
|
||||
from app.ml.feature_store import FeatureStore, FeatureVector
|
||||
|
||||
__all__ = ["FeatureStore", "FeatureVector"]
|
||||
31
app/ml/feature_store.py
Normal file
31
app/ml/feature_store.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Iterable
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class FeatureVector:
|
||||
sensor_id: str
|
||||
values: dict[str, float]
|
||||
label: str | None = None
|
||||
|
||||
|
||||
class FeatureStore:
|
||||
def __init__(self) -> None:
|
||||
self._vectors: dict[str, list[FeatureVector]] = defaultdict(list)
|
||||
|
||||
def add(self, vector: FeatureVector) -> None:
|
||||
self._vectors[vector.sensor_id].append(vector)
|
||||
|
||||
def add_batch(self, vectors: Iterable[FeatureVector]) -> None:
|
||||
for vector in vectors:
|
||||
self.add(vector)
|
||||
|
||||
def latest(self, sensor_id: str) -> FeatureVector | None:
|
||||
series = self._vectors.get(sensor_id)
|
||||
return series[-1] if series else None
|
||||
|
||||
def all(self) -> list[FeatureVector]:
|
||||
return [vector for vectors in self._vectors.values() for vector in vectors]
|
||||
Reference in New Issue
Block a user