rank_beginner
@rank_beginner

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

scikitlearnでの音声認識の方法

解決したいこと

最近プログラミングを始めた初心者です
下記のサイトを参考にして音声認識プログラムを作成しています
「振幅」、「ゼロクロス数」、「メルスペクトログラム」の3つを特徴量として用いたいのですがメルスペクトログラムを使うと下記のようなエラーが起きてしまい困っています
どのように工夫すればよいでしょうか?
アドバイス宜しくお願いします

ちなみに振幅とゼロクロス数のみを用いた場合ではエラーは起きませんでした

発生している問題・エラー

ValueError: setting an array element with a sequence.

該当するソースコード

import glob
import librosa
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing

# 複数データを読み込み
dataset = []
melspecs = []
for file_name in glob.glob('dir/*.wav'):
  y, sr = librosa.load('onsei.wav')
  dataset.append(y)

  # メルスペクトログラムの計算
  melspec = librosa.feature.melspectrogram(y, sr)
  melspec = librosa.amplitude_to_db(melspec).flatten()
  melspecs.append(melspec.astype(np.float16))

# 各データの振幅の平均値
mean = np.sqrt(np.mean(dataset**2,axis=1))

# 各データのゼロクロス数
zc = np.sum(librosa.zero_crossings(dataset),axis=1)

# 機械train_feature学習データにする
train_feature = pd.DataFrame()
train_feature['mean'] = mean
train_feature['zc'] = zc
train_feature['melspecs'] = melspecs
train_labels =  # 正常・異常などを表すラベルを音声データ分入れる

# 上記のfeatureで特徴があれば教師あり学習のアルゴリズムを使い、
# なければ教師なし学習で異常検知を狙うとよい。
# アルゴリズムによっては数値の標準化が必要。

# 機械学習:下記例は教師ありのRandomForestを用いている。
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(train_feature, train_labels)

# 予測
pred = model.predict(test_feature)
0

1Answer

最初の質問消されてますね。

見たところこのコードでは同様のエラーは出ないと思います。
最初の質問でもそうですが特徴量melspecsに「リスト」を挿入しているところが問題です。
現状だと特徴量は[mean, zc, melspecs[]]になっています。このmelspecs[]を展開しなければなりません。

「振幅とゼロクロス数のみを用いた場合ではエラーは起きませんでした」ということで上記のコード以外に完走するコードがあると仮定して
train_feature = np.hstack([np.transpose([mean, zc]), melspecs])
とすればよいのではないでしょうか?

というかmean, zcと似たような特徴がmelspecsにもあると思いますので単純にtrain_feature=melspecsでも結果は変わらないとおもいます。

ご参考のサイトではなぜランダムフォレストにしているのか疑問。明らかに向いていない特徴量だと思う。

1Like

Comments

  1. @rank_beginner

    Questioner

    再び回答していただきありがとうございます!
    最初の質問では問題点が分かりにくいと思い再投稿させていただきました、お気を悪くさせてしまったなら申し訳ありません・・・

    お答えしていただいた通り書いては見たのですが同様のエラーが起きてしまいました
    特徴量の選択も間違えているとのことなので別の手法を一から考えてみようと思います

Your answer might help someone💌