Kalp Atışı Sesi Sınıflandırma — Librosa-2

A.Oğuzhan Durmaz
Data Runner
Published in
3 min readSep 13, 2019
Arctic Monkeys — Do I Wanna Know?

Bir önceki yazımız olan Sesin Öznitelik Çıkarımı ile Librosa kütüphanesini giriş yapıp sesi, sesin özniteliklerini incelemiştik. Bu yazımızla birlikte çıkardığımız öznitelikleri bir sınıflandırma çalışması ile uygulayıp konumuzu pekiştirmeyi hedefliyoruz. Bu çalışmamızda Librosa kütüphanesi yanında Scikit-Learn kütüphanesinden de yararlanacağız.

Veri Kümesi

Kaggle’da bulunan Ed King tarafından yüklenmiş Heartbeat Sounds veri kümesini kullanacağız. Veri kümesi içeriği;

set_a.csv — iPhone uygulaması ile ölçülmüş halktan elde edilmiş kalp atışları için etiketler ve metadatalar.

set_b.csv — Dijital stetoskop ile hastanelerde yapılan klinik bir çalışmadan elde edilmiş kalp atışları için etiketler ve metadatalar.

set_a.zip/set_b.zip — Uzunlukları 1 ile 30 saniye arası olan kalp atış seslerinin bulunduğu dosyalar.

Veri kümemizdeki kalp atış seslerinin etiketleri artifact(yapay), murmur(hırıltılı), normal gibi sınıflardan oluşuyor.

Yol Haritası

● Öncelikle set_a ve set_b dosyarının içinde bulunan seslerin özniteliklerini(Mel-Frekans Kepstral Katsayıları, Zero Crossing Rate, Spectral Centroid, Spectral Rolloff, Chroma Frekansı) bir önceki yazımızda bahsettiğimiz gibi sınıflarına göre çıkaracağız.

● Öznitelikleri ve sesin sınıfını görsel açıdan daha güzel görüntülemek ve rahat işlem yapmak için DataFrame’e çevireceğiz.

● Oluşturduğumuz DataFrame’i Train ve Test olmak üzere ayırıp Scikit-Learn kütüphanesinde bulunan Random Forest ve Multi-layer Perceptron modellerini kullanarak çalışmamızı gerçekleştireceğiz.

Başlayalım!

Veri kümemiz “/heartbeat-sounds/” ana uzantısının içinde diğer dosyaları(set_a.csv,set_a.zip vb.) içeriyor.

Öncelikle her zamanki gibi örnek bir sesi dinleyelim.

Burada size oynatıcıyı gösteremediğim için siz çalıştırdığınızda dinlersiniz. :)

1.Adım

Ses dosyalarımızın uzantılarını belirleyelim. Ses dosyalarımız iki dosya içinde ayrı ayrı bulunduğu için liste içinde iki uzantı belirliyoruz ki döngü içinde sırasıyla kullanabilelim.

Yol Haritası bölümünde de bahsettiğim gibi çıkardığımız öznitelikleri DataFrame’e atmayı hedefliyoruz bu yüzden DataFrame kolonlarını belirleyelim.

Aynı zamanda okuyacağımız sesler normal__201106221418.wav, artifact__201106221418.wav şeklinde isimlendirildikleri için onları listelemek için de fnmatch kütüphanesinden yararlanacağız. Bu kütüphanenin filter() fonksiyonu bize dosyaları düzenli bir şekilde okumamıza yardımcı olacak. Bu doğrultuda bir liste tanımlıyoruz.

Örneğin normal* yazarak sadece normal ile başlayan dosya isimlerini çekebiliyoruz.

2.Adım

Şimdi sıra Öznitelikleri çıkartıp onları DataFrame yapmakta.

Öznitelik Çıkarım Fonksiyonu

Bunun için daha önce tanımladığımız listeleri alan bir fonksiyon tanımlıyoruz.

fnmatch.filter ile dosyaları normal,artifact ve murmur olarak ayırıp sırasıyla listeliyoruz.

librosa.load ile sesi yüklüyoruz ve duration=5 ile sesi okuyacağımız uzunluğu belirliyoruz.

Öznitelik çıkarımında birden fazla değer döndürdükleri için değerlerin ortalamalarını alıp listemize ekliyoruz ve son olarak oluşturduğumuz bu listeyi DataFrame’e çevirip dönderiyoruz.

Şimdi fonksiyonumuzu çağırıp DataFrame’e göz atalım.

3.Adım

Bu işlemden sonra oluşturduğumuz DataFrame’i modellerimiz için X ve y olmak üzere bölüyoruz.

Modellerimizi üç sınıfı tahmin etmesi için eğiteceğiz. LabelEncoder ile sınıfları modellerimizin bunları anlayacağı bir hale getiriyoruz.

Train ve Test olmak üzere oluşturduğumuz öznitelik verisini bölüyoruz.

Artık verimiz modelleri eğitmek için hazır hale geldi. Yol Haritasında planladığımız gibi Random Forest ve Multi-layer Perceptron modellerini uygulama zamanı geldi.

İlk olarak Random Forest modelini uygulayalım.

Modelimizi eğittik. Şimdi accuracy değerimize göz atıp karmaşıklık matrisimizi çıkartalım.

Aynı işlemleri Multi-layer Perceptron için de gerçekleştirelim.

Bu yazımızda da Librosa Kütüphanesini kullanarak bir çalışma gerçekleştirdik. Kodun tamamına Github veya Kaggle alanlarından ulaşabilirsiniz.

Bir sonraki yazıda görüşmek üzere. Başarılar.

--

--