質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

315閲覧

LBGアルゴリズムによるクラスタリングの途中でtrue_divideがでる

vega

総合スコア28

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/10/29 08:12

編集2018/10/30 02:35

前提・実現したいこと

音声認識の前処理として25次元の特徴量をベクトル量子化したい
が、LBGアルゴリズム中のk-meansでtrue_divideが発生して値がnanになってしまう。

発生している問題・エラーメッセージ

./data/VOICEACTRESS/VOICEACTRESS100_092.wav.csv clustering.py:33: RuntimeWarning: invalid value encountered in true_divide newCodeVector = np.insert(newCodeVector,0,arr[i]/c[i],axis=0) codebook: [[-1.83411343 -1.49376443 -1.4567248 ... -0.21656539 -0.01772903 -1.48200676] [-1.4706634 -1.04853537 -1.46017812 ... -0.30334002 -0.10616352 -1.21979925] [-1.42753371 -1.24427787 -1.4479376 ... -0.33225537 -0.10152104 -1.16118956] ... [ nan nan nan ... nan nan nan] [ nan nan nan ... nan nan nan] [ nan nan nan ... nan nan nan]]

該当のソースコード

python

1#coding:utf-8 2import numpy as np 3import math 4import os 5import csv 6 7def kmeans(data,codevector): 8 D0 = 100000000000000 9 delta = 0.001 10 T = float('inf') 11 12 newCodeVector = codevector 13 while T > delta: 14 D = 0.0 15 c = [0.0] * len(codevector) 16 #arr = [[0 for i in range(25)] for j in range(len(codevector))] 17 arr = np.zeros((len(codevector),25)) 18 for i in range(len(data)): 19 minDistance = float('inf') 20 dist = float('inf') 21 newCode = 0 22 for j in range(len(c)): 23 dist = math.sqrt(sum((data[i] - newCodeVector[j]) ** 2)) 24 if(dist < minDistance): 25 minDistance = dist 26 newCode = j 27 c[newCode] += 1; 28 arr[newCode] += data[i] 29 D += minDistance 30 31 newCodeVector = np.empty((0,25),dtype="float64") 32 for i in range(len(c)): 33 newCodeVector = np.insert(newCodeVector,0,arr[i]/c[i],axis=0) 34 T = (D0 - D) / (D0 + D) 35 D0 = D 36 37 return newCodeVector 38 39def LBGclustering2(data,size,code): 40 while size > len(code): 41 codebook = np.empty((0,25),dtype="float64") 42 for i in range(len(code)): 43 delta = math.sqrt(sum(code[i] ** 2) / 100) 44 codebook = np.insert(codebook,0,code[i]+delta,axis=0) 45 codebook = np.insert(codebook,0,code[i]-delta,axis=0) 46 47 code = kmeans(data,codebook) 48 49 return code 50 51 52if __name__ == '__main__': 53 data_dir_path = u"./data/VOICEACTRESS/" 54 file_list = os.listdir(r'./data/VOICEACTRESS/') 55 56 data = np.empty((0,25),dtype="float64") 57 ''' 58 for file_name in file_list: 59 root, ext = os.path.splitext(file_name) 60 if ext == u'.csv': 61 62 abs_name = data_dir_path + file_name 63 f = open(abs_name,mode = 'r') 64 csvf = csv.reader(f) 65 header = next(csvf) 66 for row in csvf: 67 print(row) 68 data = np.append(data,row) 69 print(abs_name) 70 f.close() 71 ''' 72 abs_name = data_dir_path + "VOICEACTRESS100_092.wav.csv" 73 f = open(abs_name,mode = 'r') 74 csvf = csv.reader(f) 75 header = next(csvf) 76 for row in csvf: 77 data = np.insert(data,0,row,axis = 0) 78 print(abs_name) 79 f.close() 80 81 #print(data) 82 ave = np.empty((0,25),dtype="float64") 83 ave = np.insert(ave,0,np.sum(data,axis=0) / len(data),axis=0) 84 delta = np.empty((0,25),dtype="float64") 85 delta = np.insert(delta,0,sum(ave) / len(ave) / 100.0,axis=0) 86 codeBook = LBGclustering2(data,256,ave) 87 print("codebook:",codeBook)

試したこと

c[i]が0なのが原因かと考え場合分けなども試しましたがLBGアルゴリズムとは違うものになってしまうと思い削除しました。

補足情報(FW/ツールのバージョンなど)

・LBGclusteringではコードブックの変更しかしておらず、クラスタリングはすべてk-meansにまかせています。
・入力に使っているdataは長さが711の25次元データで、コードブックのサイズを128以上にするとtruedivideが発生するのを確認しました。また、他のファイルも読み込んでデータ数を増やした場合、コードブックのサイズを256以上にした時にtruedivideが発生するようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問