Sampling - Eine Library für ... nun, sampling


#1

Tatsächlich enthält die library auch noch ein, zwei andere Funktionalitäten. Aber sie ist ohnehin nur für den internen Gebrauch, und lesen tut das hier ja sowieso niemand :smiley: geschweige denn eine Utility-Lib auf irgendwelche Verletzungen einer High-Level-Separation-Of-Concerns hin zu untersuchen.

Die Hauptfunktionalitäten sind:

  • Sampling, d.h. zufällige Teilmengen (“samples”) aus Listen ziehen
  • Sliding Windows über Listen
  • Splitten von Listen durch Extrahieren und Auslassen

Die Methoden sind dabei i.a. so implementiert, dass sie streams der Ergebnislisten liefern.

Und insbesondere sind letztere so implementiert, dass sie ausschließlich auf views der windows/chunks der Listen arbeiten. Das ist praktisch, wenn man z.B. ein Sliding Window der Größe 100000 mit Schritten der Größe 1 über eine Liste mit 1000000 Elementen laufen lassen will. Dass dort nicht 1 Million mal eine neue Liste mit 100000 Einträgen erstellt werden muss, wird einem der GC sicher danken.

Und wenn man mal eine Liste mit 10 Millionen Elementen hat, und darauf eine 10-Fach-Kreuzvalidierung machen will, freut einen das hier vielleicht:

input size   :  194952968 bytes (  185.92 MiB)
training size:        400 bytes (    0.00 MiB)
test size    :        720 bytes (    0.00 MiB)

Ja, eine Liste mit 9 Millionen Elementen und eine Liste mit 1 Million Elementen, die zusammen etwa ein Kilobyte (!) Speicher belegen.

Big data. So memory. Much efficient.

Vermutlich push’ ich die demnächst auch noch in die Maven Central.


#2

Sehr nützlich. :wink:

@Marco13 Wie darf es verwendet werden? Darf ich das einfach klauen(*)? Hab selber (privat) “Big data” mit tonnenweise an Daten zu verarbeiten…

(*): Klauen: Vollständig (1.) oder Teile davon (2.) in ein Programm von mir einsetzen…? Es ggf. ändern/anpassen (3.)…? Es auch anderen geben (4.)…?


#3

Aha, lesen tut immer gut…

cr9

Entschuldigt bitte, danach gefragt (ich kenne mich halt nicht damit aus).


#4

Nochmal: Eigentlich ist das in erster Linie für die “interne” Nutzung. (Ich werde demnächst eine andere Lib online stellen, die (teilweise) die Sampling-Lib als dependency hat).

Die bevorzugte Nutzung wäre dann über die Maven Central.

Wenn einzelne Teile davon übernommen und nur intern in einer eigenen Lib verwendet werden, dann am ehesten in einem eigenen Package, aber ohne den Copyright-Header zu verändern.

Änderungen und Anforderungen können über issues und pull requests abgehandelt werden.


#5

Jetzt unter

<dependency>
    <groupId>de.javagl</groupId>
    <artifactId>sampling</artifactId>
    <version>0.0.1</version>
</dependency>

#6

Verstehe nur Bahnhof… Aber, ich glaub, meine Frage wurd beantwortet.


#7

Mit “interne Nutzung” meine ich, dass das Version 0.0.1 ist, und es durchaus noch Änderungen geben könnte :wink: