{"id":34350,"date":"2026-02-25T08:16:57","date_gmt":"2026-02-25T08:16:57","guid":{"rendered":"https:\/\/lamarr-institute.org\/?post_type=blog&#038;p=34350"},"modified":"2026-02-25T08:57:57","modified_gmt":"2026-02-25T08:57:57","slug":"capymoa-stream-learning","status":"publish","type":"blog","link":"https:\/\/lamarr-institute.org\/de\/blog\/capymoa-stream-learning\/","title":{"rendered":"CapyMOA: Effizientes Maschinelles Lernen f\u00fcr dynamische Datenstr\u00f6me"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Maschinelles Lernen ist nicht l\u00e4nger auf statische Datens\u00e4tze beschr\u00e4nkt. Viele moderne Problemstellungen \u2014 von Energieprognosen und Betrugserkennung bis hin zu Sensoranalytik und Cybersicherheit \u2014 basieren auf kontinuierlichen Datenstr\u00f6men. Diese Daten treffen instanzweise ein, ver\u00e4ndern sich im Zeitverlauf und unterliegen h\u00e4ufig einer <strong>Konzeptdrift<\/strong>, wodurch klassische Batch-Lernverfahren ungeeignet werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Beitrag richtet sich an ML-Praktiker*innen und angewandt Forschende, die mit dynamischen Datenstr\u00f6men arbeiten und hochdurchsatzf\u00e4hige, adaptive Lernverfahren ben\u00f6tigen \u2013 und dabei MOA-Performance in Python nutzen m\u00f6chten, ohne Abstriche bei der Benutzerfreundlichkeit zu machen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es handelt sich um den abschlie\u00dfenden Beitrag unserer Stream-Mining-Reihe und baut auf den Grundlagen der vorherigen Artikel \u201e<a href=\"https:\/\/lamarr-institute.org\/de\/blog\/stream-learning-grundlagen\/\">Lernen aus Datenstr\u00f6men: Grundlagen des Stream Learning<\/a>\u201c, \u201e<a href=\"https:\/\/lamarr-institute.org\/de\/blog\/heterogene-ensembles-stream-mining\/\">Gr\u00fcnes Online-Lernen mit Heterogenen Ensembles<\/a>\u201c und \u201e<a href=\"https:\/\/lamarr-institute.org\/de\/blog\/streaming-gradient-boosting\/\">Streaming Gradient Boosting: Online Learning neu gedacht<\/a>\u201c auf, mit dem Fokus darauf, wie diese Konzepte in der Praxis zusammenwirken.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zur Bew\u00e4ltigung dieser und weiterer Herausforderungen wurde <strong>CapyMOA<\/strong> entwickelt. CapyMOA ist eine Open-Source-Python-Bibliothek f\u00fcr <strong>Datenstromlernen<\/strong> und <strong>Online Continual Learning (OCL)<\/strong>. Die erste \u00f6ffentliche Version wurde im Mai 2024 ver\u00f6ffentlicht. CapyMOA verfolgt das Ziel, die <em>Effizienz <\/em>von MOA, die <em>Zug\u00e4nglichkeit <\/em>von Python sowie die f\u00fcr moderne Streaming-Anwendungen erforderliche <em>Flexibilit\u00e4t <\/em>zu vereinen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MOA war die erste breit etablierte Open-Source-Bibliothek f\u00fcr Datenstromlernen. Urspr\u00fcnglich um 2007 in Java implementiert, wird sie bis heute aktiv genutzt und weiterentwickelt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Warum CapyMOA?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bestehende Werkzeuge gehen unterschiedliche Kompromisse ein:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2022 <strong>MOA <\/strong>(Java) ist \u00e4u\u00dferst effizient, jedoch weniger zug\u00e4nglich f\u00fcr Python-zentrierte Workflows.<br>\u2022 <strong>River <\/strong>ist benutzerfreundlich, vollst\u00e4ndig in Python implementiert, st\u00f6\u00dft jedoch bei hochdurchsatzf\u00e4higen Datenstr\u00f6men an Performancegrenzen.<br>\u2022 <strong>Scikit-Multiflow<\/strong> schloss einige dieser L\u00fccken, wird jedoch nicht mehr aktiv weiterentwickelt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Anwender*innen resultiert daraus h\u00e4ufig ein Zielkonflikt zwischen Performance, Usability und langfristiger Wartbarkeit. CapyMOA \u00fcberbr\u00fcckt diese Welten durch drei zentrale S\u00e4ulen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Effizienz<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA kombiniert native Python-Implementierungen mit dem Zugriff auf optimierte Java-Algorithmen aus MOA \u00fcber eine moderne Python-API. Wo sinnvoll, werden ausgereifte MOA-Implementierungen mittels JPype mit minimalem Overhead eingebunden, w\u00e4hrend zugleich ein eigenes, wachsendes \u00d6kosystem an Methoden f\u00fcr das Datenstromlernen bereitgestellt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies erm\u00f6glicht MOA-Performance, ohne eine einzige Zeile Java-Code schreiben zu m\u00fcssen.<\/p>\n\n\n<style>.kb-image34350_f253a3-af .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image34350_f253a3-af size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"323\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/\/1_Fig_Benchmark_Comparing_CapyMOA-1024x323.png\" alt=\"Benchmark comparing CapyMOA against other data stream libraries\" class=\"kb-img wp-image-34336\" title=\"\" srcset=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/1_Fig_Benchmark_Comparing_CapyMOA-1024x323.png 1024w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/1_Fig_Benchmark_Comparing_CapyMOA-300x95.png 300w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/1_Fig_Benchmark_Comparing_CapyMOA-768x243.png 768w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/1_Fig_Benchmark_Comparing_CapyMOA.png 1048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Abbildung 1: Benchmark-Vergleich von CapyMOA mit anderen Bibliotheken f\u00fcr Datenstromlernen. \u00a9 2024 CapyMOA Developers. Quelle: CapyMOA GitHub-Repository.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Warum das in der Praxis relevant ist:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Effizienz ist beim Data Stream Lerning von entscheidender Bedeutung, da Modelle unter Zeit- und Ressourcenbeschr\u00e4nkungen kontinuierlich eintreffende Daten verarbeiten m\u00fcssen. Schnellere Implementierungen erm\u00f6glichen es Forschenden und Praktiker*innen, mit l\u00e4ngeren und realistischeren Datenstr\u00f6men zu arbeiten, eine gr\u00f6\u00dfere Anzahl von Experimenten durchzuf\u00fchren und die Rechenkosten zu senken. Dies macht eine gro\u00df angelegte Bewertung und Bereitstellung insbesondere in ressourcenbeschr\u00e4nkten Umgebungen besser realisierbar. CapyMOA bietet diese Effizienz und bleibt dabei vollst\u00e4ndig in Python-basierte Workflows integriert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Interoperabilit\u00e4t <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA l\u00e4sst sich nahtlos integrieren mit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MOA-Algorithmen<\/strong> (automatisch eingebunden)<\/li>\n\n\n\n<li><strong>scikit-learn-Modellen<\/strong><\/li>\n\n\n\n<li><strong>PyTorch-Komponenten<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dies erm\u00f6glicht hybride Ans\u00e4tze, die traditionelle Online-Modelle mit Deep Learning kombinieren \u2013 besonders n\u00fctzlich f\u00fcr Online Continual Learning. Diese Interoperabilit\u00e4t ist entscheidend f\u00fcr angewandte ML-Teams, die bereits auf scikit-learn oder PyTorch setzen und bestehende Pipelines auf Streaming-Szenarien ausweiten m\u00f6chten, anstatt alles von Grund auf neu aufzubauen.<\/p>\n\n\n<style>.kb-image34350_c91f36-62 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image34350_c91f36-62 size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1018\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/\/2_Fig_Capybara-1024x1018.png\" alt=\"Capybara chilling.\" class=\"kb-img wp-image-34338\" title=\"\" srcset=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/2_Fig_Capybara-1024x1018.png 1024w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/2_Fig_Capybara-300x298.png 300w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/2_Fig_Capybara-150x150.png 150w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/2_Fig_Capybara-768x763.png 768w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/2_Fig_Capybara.png 1268w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Capybara chilling. \u00a9 2026 CapyMOA Developers. Source: CapyMOA GitHub repository<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3. Zug\u00e4nglichkeit<\/h3>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\"><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Die API ist so konzipiert, dass sie f\u00fcr normale Benutzer<em>innen intuitiv zu bedienen ist und gleichzeitig die Flexibilit\u00e4t bietet, die fortgeschrittene Benutzer<\/em>innen wie Forschende und Entwickler*innen ben\u00f6tigen. Dies spiegelt sich in Funktionen wie den folgenden wider:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/capymoa.org\/notebooks\/01_evaluation.html\" target=\"_blank\" rel=\"noreferrer noopener\">Einfache, hochentwickelte Auswertungsfunktionen<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/capymoa.org\/api\/modules\/capymoa.stream.html\" target=\"_blank\" rel=\"noreferrer noopener\">Integrierte Stream-Generatoren<\/a> und <a href=\"https:\/\/capymoa.org\/api\/modules\/capymoa.datasets.html\" target=\"_blank\" rel=\"noreferrer noopener\">Benchmark-Datens\u00e4tze<\/a><\/li>\n\n\n\n<li>Driftbezogene Funktionen, einschlie\u00dflich <a href=\"https:\/\/capymoa.org\/notebooks\/04_drift_streams.html\" target=\"_blank\" rel=\"noreferrer noopener\">Simulation<\/a>, <a href=\"https:\/\/capymoa.org\/notebooks\/drift_detection.html\" target=\"_blank\" rel=\"noreferrer noopener\">Erkennung und Auswertung<\/a><\/li>\n\n\n\n<li>Automatische Verarbeitung von <a href=\"https:\/\/capymoa.org\/api\/modules\/capymoa.stream.Schema.html\" target=\"_blank\" rel=\"noreferrer noopener\">Datenschemata <\/a>und <a href=\"https:\/\/capymoa.org\/api\/modules\/capymoa.instance.html\" target=\"_blank\" rel=\"noreferrer noopener\">Instanzen<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/capymoa.org\/notebooks\/00_getting_started.html\" target=\"_blank\" rel=\"noreferrer noopener\">Visualisierungstools zur \u00dcberwachung von Metriken<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/capymoa.org\/notebooks\/07_pipelines.html\" target=\"_blank\" rel=\"noreferrer noopener\">Eine modulare Pipelines-API zum Erstellen von Streaming-Workflows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/capymoa.org\/notebooks\/10_ocl.html\" target=\"_blank\" rel=\"noreferrer noopener\">Ein End-to-End-Framework f\u00fcr kontinuierliches Online-Lernen (OCL), einschlie\u00dflich Experimentkonfiguration, Auswertung und Algorithmen<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zug\u00e4nglichkeit bedeutet hier nicht \u00fcberm\u00e4\u00dfige Vereinfachung. Es bedeutet vielmehr, Boilerplate-Code f\u00fcr einfache Aufgaben \u2013 wie das schnelle Benchmarking von Driftdetektoren \u2013 zu reduzieren und gleichzeitig die volle Kontrolle \u00fcber fortgeschrittene Workflows zu behalten, wie z. B. die Erstellung von Pipelines mit Online-Vorverarbeitung, mehreren Driftdetektoren und benutzerdefinierten Metriken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lernen aus Datenstr\u00f6men mit CapyMOA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die meisten Stream-Learning-Pipelines folgen dem Test-dann-Trainieren-Zyklus:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die n\u00e4chste Instanz abrufen<\/li>\n\n\n\n<li>Eine Vorhersage treffen<\/li>\n\n\n\n<li>Den Lerner trainieren<\/li>\n\n\n\n<li>Metriken aktualisieren<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA abstrahiert dies in pr\u00e4sequenzielle Bewertungsfunktionen, wodurch Boilerplate-Code reduziert und die Bewertung \u00fcber Algorithmen hinweg standardisiert wird. Diese Abstraktion gew\u00e4hrleistet eine konsistente Bewertung \u00fcber Modelle und Experimente hinweg.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel: Hoeffding-Baum auf dem Strom-Datensatz<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.datasets import Electricity\nfrom capymoa.classifier import HoeffdingTree\nfrom capymoa.evaluation import prequential_evaluation\n\nstream = Electricity()\nht = HoeffdingTree(schema=stream.get_schema(), grace_period=50)\n\nresults = prequential_evaluation(stream=stream, learner=ht, window_size=4500)\n\nprint(results.cumulative.accuracy())\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Metric-Fenster werden automatisch in einem Pandas DataFrame gespeichert und k\u00f6nnen mit folgendem Befehl visualisiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.evaluation.visualization import plot_windowed_results\nplot_windowed_results(results, metric=\"accuracy\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel: Online-Bagging f\u00fcr den Stromdatensatz<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nat\u00fcrlich ist es weiterhin m\u00f6glich, die Schleife zu steuern und explizit zu bewerten, wie im folgenden Beispiel gezeigt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.datasets import Electricity\nfrom capymoa.evaluation import ClassificationEvaluator\nfrom capymoa.classifier import OnlineBagging\n\nelec_stream = Electricity()\nob_learner = OnlineBagging(schema=elec_stream.get_schema(), ensemble_size=5)\nob_evaluator = ClassificationEvaluator(schema=elec_stream.get_schema())\n\nfor instance in elec_stream:\n    prediction = ob_learner.predict(instance)\n    ob_learner.train(instance)\n    ob_evaluator.update(instance.y_index, prediction)\n\nprint(ob_evaluator.accuracy())<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Flexibilit\u00e4t erm\u00f6glicht es Benutzer*innen, bei Bedarf Abstraktion gegen detaillierte Kontrolle einzutauschen. Weitere Informationen hierzu im <a href=\"https:\/\/capymoa.org\/notebooks\/00_getting_started.html\" target=\"_blank\" rel=\"noreferrer noopener\">CapyMOA-Notizbuch<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schemas und Instanzen: Datenkonsistenz durch Design<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Im Gegensatz zu Frameworks, die auf Python-Dictionaries basieren, erzwingt CapyMOA ein <strong>Schema <\/strong>f\u00fcr jeden Stream. Dies vermeidet stille Fehler, gew\u00e4hrleistet stabile Langzeitexperimente und sorgt f\u00fcr Kompatibilit\u00e4t zwischen Python- und Java-Komponenten. Unabh\u00e4ngig davon, ob eine CSV- oder ARFF-Datei geladen oder auf synthetische Generatoren zur\u00fcckgegriffen wird, enth\u00e4lt jede Instanz strukturierte Metadaten, wodurch die Interoperabilit\u00e4t \u00fcber die gesamte Pipeline hinweg zuverl\u00e4ssig und automatisch gew\u00e4hrleistet ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei lang andauernden Stream-Experimenten k\u00f6nnen kleine Inkonsistenzen die Ergebnisse unbemerkt ung\u00fcltig machen. In einer auf Dictionaries basierenden Instanzdarstellung kann beispielsweise das Fehlen eines Merkmals mehrdeutig sein: Es kann auf einen fehlenden Wert hinweisen oder darauf, dass das Merkmal nicht mehr existiert. Mit expliziter Schema-Verfolgung wird diese Unterscheidung klar \u2013 das System kann erkennen, ob sich der Merkmalsatz selbst ge\u00e4ndert hat oder ob einfach ein Wert fehlt. Dadurch kann sich der Lerner (oder andere Komponenten in der Pipeline) entsprechend an die Schemaentwicklung anpassen. Die Schema-Durchsetzung macht solche \u00c4nderungen daher explizit und reproduzierbar, was sowohl in der Forschung als auch in der Produktion ein entscheidender Vorteil ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concept Drift: Ein First-Class Citizen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA bietet ein komplettes System f\u00fcr die Arbeit mit Drift:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Drift-Simulation mit DriftStream, AbruptDrift und GradualDrift<\/li>\n\n\n\n<li>Integration mit Bewertungs- und Visualisierungstools<\/li>\n\n\n\n<li>Native Unterst\u00fctzung f\u00fcr klassische und moderne Drift-Detektoren<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel: Aufbau eines Streams mit einer abrupten und einer allm\u00e4hlichen Drift<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.stream.drift import DriftStream, AbruptDrift, GradualDrift\nfrom capymoa.stream.generator import SEA\nfrom capymoa.evaluation.visualization import plot_windowed_results\n\nstream_sea2drift = DriftStream(\n    stream=&#91;\n        SEA(function=1),\n        AbruptDrift(position=5000),\n        SEA(function=3),\n        GradualDrift(position=10000, width=2000),\n        # GradualDrift(start=9000, end=12000),\n        SEA(function=1),\n    ]\n)\n\nOB = OnlineBagging(schema=stream_sea2drift.get_schema(), ensemble_size=10)\n\nresults_sea2drift_OB = prequential_evaluation(\n    stream=stream_sea2drift, learner=OB, window_size=100, max_instances=15000\n)\n\nprint(\n    f\"The definition of the DriftStream is accessible through the object:\\n {stream_sea2drift}\"\n)\nplot_windowed_results(results_sea2drift_OB, metric=\"accuracy\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Plots zeigen automatisch die Driftpositionen an und helfen Forschenden dabei, zu diagnostizieren, wann und warum Modelle Probleme haben. Dadurch wird Drift nicht nur erkennbar, sondern auch interpretierbar \u2013 ein entscheidender Schritt hin zu vertrauensw\u00fcrdigen adaptiven Systemen.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2068\" height=\"978\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging.png\" alt=\"CapyMOA accuracy over time for Online Bagging. \" class=\"wp-image-34340\" title=\"\" srcset=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging.png 2068w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging-300x142.png 300w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging-1024x484.png 1024w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging-768x363.png 768w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging-1536x726.png 1536w, https:\/\/lamarr-institute.org\/wp-content\/uploads\/3_Fig_Accuracy_over_Time_for_online_bagging-2048x969.png 2048w\" sizes=\"auto, (max-width: 2068px) 100vw, 2068px\" \/><figcaption class=\"wp-element-caption\">Genauigkeit im Zeitverlauf f\u00fcr Online-Bagging. \u00a9 2026 CapyMOA Developers. Quelle: CapyMOA-Website<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Informationen hierzu im <a href=\"https:\/\/capymoa.org\/notebooks\/04_drift_streams.html\" target=\"_blank\" rel=\"noreferrer noopener\">CapyMOA-Notizbuch<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pipelines: Modular, flexibel und bereit f\u00fcr AutoML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Streaming-Pipelines sind bekannterma\u00dfen schwierig, da Transformationen den Zustand \u00fcber die Zeit hinweg beibehalten m\u00fcssen. CapyMOA f\u00fchrt ein flexibles Pipeline-System ein, das Folgendes unterst\u00fctzt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Feature-Scaler<\/li>\n\n\n\n<li>Drift-Detektoren<\/li>\n\n\n\n<li>Inkrementelle Lerner<\/li>\n\n\n\n<li>Benutzerdefinierte Komponenten \u00fcber PipelineElement<\/li>\n\n\n\n<li>Multi-Detektor-Pipelines (z. B. ABCD + ADWIN)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dieses Design erm\u00f6glicht Experimente mit komplexen adaptiven Pipelines unter Beibehaltung der Korrektheit \u00fcber einen l\u00e4ngeren Zeitraum. Es legt auch den Grundstein f\u00fcr <strong>AutoML f\u00fcr Datenstr\u00f6me<\/strong>, indem es Pipelines dynamisch ausw\u00e4hlt und anpasst, wenn sich die Daten \u00e4ndern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel: Normalisierung anwenden und Rauschen hinzuf\u00fcgen<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.stream.preprocessing import MOATransformer\nfrom capymoa.stream.preprocessing import ClassifierPipeline\nfrom moa.streams.filters import AddNoiseFilter, NormalisationFilter\n\nelec_stream = Electricity()\n\n# Creating the transformers\nnormalisation_transformer = MOATransformer(\n    schema=elec_stream.get_schema(), moa_filter=NormalisationFilter()\n)\nadd_noise_transformer = MOATransformer(\n    schema=normalisation_transformer.get_schema(), moa_filter=AddNoiseFilter()\n)\n\n# Creating a learner\nob_learner = OnlineBagging(schema=add_noise_transformer.get_schema(), ensemble_size=5)\n\n# Creating and populating the pipeline\npipeline = (\n    ClassifierPipeline()\n    .add_transformer(normalisation_transformer)\n    .add_transformer(add_noise_transformer)\n    .add_classifier(ob_learner)\n)\n\n# Creating the evaluator\nob_evaluator = ClassificationEvaluator(schema=elec_stream.get_schema())\n\nwhile elec_stream.has_more_instances():\n    instance = elec_stream.next_instance()\n    prediction = pipeline.predict(instance)\n    ob_evaluator.update(instance.y_index, prediction)\n    pipeline.train(instance)\n\nob_evaluator.accuracy()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Informationen hierzu im CapyMOA-Notizbuch <a href=\"https:\/\/capymoa.org\/notebooks\/07_pipelines.html\" target=\"_blank\" rel=\"noreferrer noopener\">hier <\/a>und <a href=\"https:\/\/capymoa.org\/notebooks\/09_automl.html\" target=\"_blank\" rel=\"noreferrer noopener\">hier<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Online Continual Learning (OCL): \u00dcber das klassische Stream Learning hinaus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das traditionelle Stream Learning behandelt Konzeptdrift, geht jedoch in der Regel davon aus, dass \u00fcberwachte Labels zeitnah eintreffen. OCL hingegen befasst sich mit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inkrementellen Aufgaben<\/li>\n\n\n\n<li>Dom\u00e4nenverschiebungen<\/li>\n\n\n\n<li>Sp\u00e4rlichen oder verz\u00f6gerten Labels<\/li>\n\n\n\n<li>Speicherbeschr\u00e4nkungen<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA integriert OCL nativ und erm\u00f6glicht es sowohl klassischen Online-Modellen als auch neuronalen kontinuierlichen Lernern, auf demselben Bewertungsrahmen zu arbeiten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese einheitliche Behandlung von Stream Learning und kontinuierlichem Lernen ist noch selten und positioniert CapyMOA an der Schnittstelle zweier schnell wachsender Forschungsbereiche \u2013 als eines der ersten vollst\u00e4ndig integrierten Frameworks, das <strong>Stream Learning<\/strong> und<strong> Online Continual Learning<\/strong> miteinander verbindet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel: Ausf\u00fchrung von Experience Replay<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from capymoa.ann import Perceptron\nfrom capymoa.classifier import Finetune\nfrom capymoa.ocl.strategy import ExperienceReplay\nfrom capymoa.ocl.datasets import TinySplitMNIST\nfrom capymoa.ocl.evaluation import ocl_train_eval_loop\nimport torch\n_ = torch.manual_seed(0)\nscenario = TinySplitMNIST()\nmodel = Perceptron(scenario.schema)\nlearner = ExperienceReplay(Finetune(scenario.schema, model))\nresults = ocl_train_eval_loop(\n    learner,\n    scenario.train_loaders(32),\n    scenario.test_loaders(32),\n)\nprint(f\"{results.accuracy_final*100:.1f}%\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Informationen hierzu im <a href=\"https:\/\/capymoa.org\/notebooks\/10_ocl.html\" target=\"_blank\" rel=\"noreferrer noopener\">CapyMOA-Notizbuch<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CapyMOA versteht sich als moderne Grundlage f\u00fcr Forschung und Praxis im Bereich des adaptiven maschinellen Lernens. Durch die ausgewogene Kombination von Effizienz, Interoperabilit\u00e4t und Benutzerfreundlichkeit bietet es eine Plattform, auf der:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Forschende schnell neue Algorithmen entwickeln und testen k\u00f6nnen.<\/li>\n\n\n\n<li>Praktiker*innen robuste, leistungsstarke Tools f\u00fcr Echtzeitdaten nutzen k\u00f6nnen.<\/li>\n\n\n\n<li>Studierende anhand klarer, einfacher Beispiele Konzepte des Stream Learning erlernen k\u00f6nnen.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Im Zuge der Weiterentwicklung von CapyMOA sind unter anderem eine tiefere OCL-Integration, verbesserte Drift-Diagnosen, erweiterte Deep-Learning-Pipelines und eine erweiterte Unterst\u00fctzung f\u00fcr Clustering und Anomalieerkennung geplant.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CapyMOA ist Open Source und freut sich \u00fcber Beitr\u00e4ge:<\/li>\n\n\n\n<li>Website: <a href=\"https:\/\/capymoa.org\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/capymoa.org<\/a> <\/li>\n\n\n\n<li>GitHub: <a href=\"https:\/\/github.com\/adaptive-machine-learning\/CapyMOA\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/adaptive-machine-learning\/CapyMOA<\/a><\/li>\n\n\n\n<li>Tutorials: <a href=\"https:\/\/capymoa.org\/tutorials.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/capymoa.org\/tutorials.html<\/a><\/li>\n\n\n\n<li>Discord: <a href=\"https:\/\/discord.gg\/spd2gQJGAb\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/discord.gg\/spd2gQJGAb<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Echtzeitdaten ver\u00e4ndern sich kontinuierlich \u2013 Ihre Modelle sollten es ebenfalls tun. CapyMOA bringt leistungsf\u00e4higes Datenstromlernen und Konzeptdrift-Behandlung nach Python und verbindet MOA-Effizienz mit praxisnaher Nutzbarkeit.<\/p>\n","protected":false},"author":16,"featured_media":34333,"template":"","meta":{"_acf_changed":false,"footnotes":""},"blog-category":[1416,546,437,1659],"blog-tag":[1565,1597,1657],"class_list":["post-34350","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-alle-blogbeitraege","blog-category-anwendung","blog-category-gastbeitrag","blog-category-stream-mining","blog-tag-python-de","blog-tag-softwareentwicklung","blog-tag-stream-mining"],"acf":[],"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog\/34350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":0,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog\/34350\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media\/34333"}],"wp:attachment":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media?parent=34350"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-category?post=34350"},{"taxonomy":"blog-tag","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-tag?post=34350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}