Wie kann die Form der Eingabe-Features festgelegt werden, wenn jede Datendatei unterschiedlich lang ist?


7

Um Hilfe zu verstehen mich die Vorteile und Nachteile der decision trees, KNN, Neural Networks, Ich wollte einen einfachen Klassifizierer , dass stuft in 2 Klassen (bauen Bird Soundund Non-Bird Sound) mit allen oben 3 Methoden. Also habe ich einen Sound-Datensatz von kaggle heruntergeladen und pysoundfile als Modul zum Lesen der Sounddatei untersucht . Also der folgende Stummel:

data, samplerate = sf.read('xc94652.flac')

gibt ein numpy ndarray zurück. Die shapeAnzahl der Daten variiert mit jeder Datei, wobei einige von (8637686,)und andere sind (3227894,). Da jede Datei unterschiedlich lang ist, datavariiert die Form von mit jeder Datei. Was sind einige Möglichkeiten, ich kann die Form datagleich machen? Ich hatte vor, die Form des Datensatzes aus allen Dateien auf die kleinste Länge zu bringen. Aber es wird dem Sounddatei-Datensatz definitiv nicht gerecht. Ich könnte so viele Funktionen und damit die Modellgenauigkeit am Ende verlieren.

Antworten:


2

Datenexploration

Ich würde vorschlagen, die Daten etwas weiter zu untersuchen, um zu entscheiden, welcher Ansatz für diesen Vogel-Lied-Datensatz am besten geeignet ist.

Schauen Sie sich zum Beispiel das Spektrogramm jedes Vogels an (es gibt nur 66 verschiedene Gattungstypen), um zu sehen, wie Sie weitere Daten aus den Proben extrahieren können. Hier ist das Spektrogramm einer Probe von hier :

Vogelrufspektrogramm

Wir können sehen, dass es eindeutig ein sich wiederholendes Muster gibt! Wir können diese hohen hellgrünen Blöcke sehen, die zeitweise überall erscheinen. Obwohl das Sample tatsächlich etwas mehr als 70 Sekunden lang ist, scheint der Ruf des Vogels wirklich nur etwa 2 Sekunden zu dauern!

Entweder mit einem einfachen Filteralgorithmus oder sogar mit dem Erstellen eines Modells zum Auffinden dieser Chunks können Sie diese Chunks extrahieren und nur an diesen arbeiten, möglicherweise zusammen mit den Daten zu den Lücken zwischen diesen Chunks.

Dies ist nur ein Beispiel für eine datenspezifische Vorverarbeitung. Ich bin sicher, dass es viele andere Möglichkeiten gibt, die Informationsdichte zu verbessern.

Beispielrate

Dies ist ein weiterer Freiheitsgrad, den Sie betrachten können. Eine Idee wäre, verschiedene Samplerates innerhalb Ihrer Eingabe für ein Modell zu akzeptieren. Man könnte die Abtastrate anpassen, um sicherzustellen, dass alle endgültigen Abtastungen alle die gleiche Länge haben.

Meine Idee wäre, die Länge des kürzesten Samples zu verwenden und dann regelmäßig alle längeren Sound-Snippets abzutasten, sodass die resultierenden Snippets alle dieselbe Länge haben wie Ihr kürzestes Sample.

Diese Methode beeinträchtigt natürlich die Qualität der Daten (unregelmäßig über die Stichproben hinweg), aber wenn die Startabtastrate ausreichend hoch ist, können Sie möglicherweise damit durchkommen!

Schauen Sie sich diesen nützlichen Artikel an , der viele Methoden in (Vorverarbeitungs-) Schallwellen beschreibt.

Zwei Modelle

In Ihrem speziellen Fall, wenn Sie wirklich nur zwei mögliche Längen haben: 8637686und 3227894... ist es möglicherweise möglich, einfach zwei Modelle zu erstellen, eines für jede Stichprobenlänge. Es ist definitiv keine optimale Lösung; Dies würde jedoch eine sehr schnelle Entwicklung und Modelliterationen ermöglichen, da Sie dasselbe Modell verwenden könnten und nur den Parameter ändern müssten, um beide Teile der Daten zu verwenden.

Grundlagen

Sie können nicht nur Ihre längeren Samples abschneiden (sie auf die Länge der kürzeren / kürzesten Samples zuschneiden), sondern auch das Auffüllen verwenden , um die kurzgeschlossenen Samples einfach an die Länge des längsten Samples anzupassen.

In der Regel erfolgt dies durch einfaches Hinzufügen von Nullen am Ende der Vektoren. Sie können auch versuchen, am Anfang und am Ende Nullen hinzuzufügen, um die Informationen in jedem Sample zentriert zu halten.

Wenn Sie mit Keras ein neuronales Netzwerk erstellen, sollten Sie sich zunächst die ZeroPadding1d-Ebene ansehen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.