Help us understand the problem. What is going on with this article?

DeepLearningでアボカドの硬さ推定[2]

DeepLearningでアボカドの硬さを推定する話

DeepLearningでアボカドの硬さ推定[1]ではデータのサンプリングを行いました。
今回はサンプリングしたデータを加工します。
もしかして、データマイニングってやつ?

FFT(高速フーリエ変換)

音声データを機械学習させるときにはフーリエ変換というものをするらしいのです。
先人の知恵をお借りして何とかFFTのコードを書くことができました。
特にIAMASの小林先生の機械学習とRaspberry Piを用いてレーザー加工機の動作状態を判定するを参考にさせていただきました。

# モジュールをインポート
import glob
import numpy as np
import matplotlib.pyplot as plt
import random as rn
import librosa
import os
import sys
import pandas as pd

# WAVファイルのパスを指定
path = 'bachi/*.wav'
sampling_rate = 44100
raw_sounds = []
wav_file_names = []

# glob関数でWAVファイルパスをpython標準Listへ
for wav_file_name in sorted(glob.glob(path)):
    data, sample_rate = librosa.load(wav_file_name, sr=sampling_rate , duration=0.8)
    print('{} ({} Hz) '.format(wav_file_name, sample_rate))
    raw_sounds.append(data)
    wav_file_names.append(wav_file_name)

# FFTサイズの設定
fft_size = 8192
stft_matrix_size = 1 + fft_size // 2
test = np.empty((0, stft_matrix_size))
# FFTの実行
for i, wav_file_name in enumerate(wav_file_names):
    d00 = np.abs(librosa.stft(raw_sounds[i], n_fft=fft_size, window='hamming'))
    d0 = np.sum(d00, axis=1,dtype='float32') / d00.shape[1]
    d = d0  # / np.amax(d0)
    test = np.append(test, np.array([d]), axis=0)

# アボカドのサンプル数を指定
num_data = 25
# 何回分の打撃FFTデータを平均するか指定
mean_data = 10
# 打撃FFTデータを平均する処理を実行
X_data = np.empty((0, d.shape[0]))
for yy in range(num_data):
    c = np.empty((0, d.shape[0]))
    for i in range(d.shape[0]):
        b = test[yy*mean_data:yy*mean_data+mean_data,i:1+i].sum() / num_data
        c = np.append(c, b)
    X_data = np.append(X_data, np.array([c]), axis=0)

# FFTの結果を保存
np.savetxt('bachi_X_all.csv',X_data,delimiter=',')

FFTの結果

image.png

人間の目で見てもどこに特徴があるかわかりませんよね。
なんのこっちゃって感じです。
なんとなく601以下の周波数ドメインに特徴があるような気もしますね。(憶測)

精度の確認

ちなみここの時点でKerasとTensorFlowにて回帰分析を行いました。
結果として得られた決定係数を下図に示します。
TrainとTestの分割を50通りに行ったので、計50回分の決定係数値のヒストグラムになっております。
(KerasとTensorFlowを使った回帰分析のコードは次回)
image.png
平均するとTrainデータに対する決定係数は0.99、Testデータに対する決定係数は0.81でそんなに悪くなく見えます。
しかしながら、Testデータに対する決定係数が0.4以下だった場合も少なからずあり、精度が高いとは言えないでしょう。

次回、[3]特徴量選択へ続きます。(投稿は8月に入ってから)

spa_d
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away