Làm cách nào để quyết định hình dạng của các tính năng đầu vào, khi mỗi tệp dữ liệu có độ dài khác nhau?


7

Để giúp tôi hiểu được những lợi ích và hạn chế của decision trees, KNN, Neural Networks, tôi muốn xây dựng một phân loại đơn giản mà phân loại thành 2 lớp ( Bird SoundNon-Bird Sound) sử dụng tất cả những điều trên 3 phương pháp. Vì vậy, tôi đã tải xuống một bộ dữ liệu âm thanh từ kaggle và đang khám phá pysoundfile dưới dạng một mô-đun để đọc tệp âm thanh. Vì vậy, sơ khai sau:

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

trả về một ndarray numpy. Các shapedữ liệu thay đổi theo mỗi tập tin, một số phúc lợi của (8637686,)một số con người (3227894,). Vì mỗi tệp có độ dài khác nhau, hình dạng datakhác nhau với mỗi tệp. Một số cách, tôi có thể làm cho hình dạng databằng nhau là gì? Tôi đã lên kế hoạch để hình dạng của dữ liệu được đặt ở độ dài nhỏ nhất từ ​​tất cả các tệp. Nhưng nó chắc chắn không làm công lý cho tập dữ liệu âm thanh. Tôi có thể mất rất nhiều tính năng và vì vậy độ chính xác của mô hình ở cuối.

Câu trả lời:


2

Khám phá dữ liệu

Tôi sẽ đề nghị khám phá dữ liệu xa hơn một chút, điều này có thể giúp quyết định cách tiếp cận tốt nhất cho bộ dữ liệu bài hát chim này.

Ví dụ, hãy xem sơ đồ phổ của mỗi loài chim (chỉ có 66 loại chi khác nhau), để xem cách bạn có thể trích xuất thêm dữ liệu từ các mẫu. Đây là biểu đồ phổ của một mẫu được lấy từ đây :

chim gọi phổ

Chúng ta có thể thấy rằng rõ ràng có một mô hình lặp đi lặp lại! Chúng ta có thể thấy những khối màu xanh nhạt cao xen kẽ xuất hiện xuyên suốt. Vì vậy, mặc dù mẫu thực sự chỉ có hơn 70 giây âm thanh, tiếng kêu của con chim dường như chỉ thực sự kéo dài khoảng 2 giây!

Với thuật toán lọc đơn giản hoặc thậm chí xây dựng mô hình để tìm các khối đó, bạn có thể trích xuất các khối đó và chỉ hoạt động trên các khối đó, có lẽ cùng với dữ liệu về các khoảng trống giữa các khối đó.

Đó chỉ là một ví dụ về xử lý trước dữ liệu cụ thể; Tôi chắc chắn có nhiều cách khác để cải thiện mật độ thông tin.

Tỷ lệ mẫu

Đây là một mức độ tự do khác mà bạn có thể nhìn vào. Một ý tưởng sẽ là chấp nhận các bộ lấy mẫu khác nhau trong đầu vào của bạn cho một mô hình. Người ta có thể điều chỉnh tốc độ mẫu để đảm bảo tất cả các mẫu cuối cùng đều có cùng chiều dài.

Ý tưởng của tôi sẽ là sử dụng độ dài của mẫu ngắn nhất và sau đó thực hiện lấy mẫu thường xuyên của tất cả các đoạn âm thanh dài hơn, sao cho các đoạn kết quả có cùng độ dài với mẫu ngắn nhất của bạn.

Phương pháp này rõ ràng sẽ ảnh hưởng đến chất lượng dữ liệu (không thường xuyên trên các mẫu), nhưng nếu mẫu bắt đầu cao một cách rõ ràng, bạn có thể thoát khỏi nó!

Hãy xem bài viết hữu ích này mô tả nhiều phương pháp trong (xử lý trước) sóng âm thanh.

Hai mô hình

Trong trường hợp cụ thể của bạn, nếu bạn thực sự chỉ có hai độ dài có thể: 86376863227894... có thể khả thi khi tạo hai mô hình đơn giản, một mô hình cho mỗi chiều dài mẫu. Nó chắc chắn không phải là một giải pháp tối ưu; tuy nhiên, nó sẽ cho phép phát triển rất nhanh và lặp lại mô hình, vì bạn có thể sử dụng cùng một mô hình và chỉ cần thay đổi tham số để sử dụng cả hai phần của dữ liệu.

Khái niệm cơ bản

Cũng như cắt ngắn các mẫu dài hơn của bạn (cắt chúng để phù hợp với độ dài của các mẫu ngắn hơn / ngắn nhất - bạn có thể sử dụng phần đệm để đơn giản làm cho các mẫu ngắn phù hợp với độ dài của mẫu dài nhất.

Thông thường, điều này được thực hiện bằng cách thêm các số không vào cuối các vectơ. Bạn cũng có thể thử thêm số không ở đầu và cuối để giữ thông tin tập trung trong mỗi mẫu.

Nếu bạn tạo một mạng nơ-ron bằng Keras, có lẽ bạn sẽ là người tốt nhất bằng cách nhìn vào lớp ZeroPadding1d .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.