テストデータの3割を使うようにしたいです。
現在、犬の鳴き声と猫の鳴き声を分類するシステムを作っています。
# coding:utf-8 from sklearn import svm, cross_validation from sklearn.metrics import classification_report, accuracy_score import sys from mfcc import * import glob import csv import random import numpy as np import os from sklearn.model_selection import train_test_split if __name__ == "__main__": train_label = np.array([]) test_label = np.array([]) nfft = 2048 # FFTのサンプル数 nceps = 12 # MFCCの次元数 train_data = np.empty((0, 12), float) test_data = np.empty((0, 12), float) basedir = '/sound_animal/sounds' files = glob.glob(os.path.join(basedir, '*.wav')) for file_name in files: feature = get_feature(file_name, nfft, nceps) if len(train_data) == 0: train_data = feature else: train_data = np.vstack((train_data, feature)) train_label = np.append(train_label,file_name) pattern = r"dog" file = os.path.basename(file_name) match = re.match(pattern, file) if match: train_label = np.append(train_label, 0) else: train_label = np.append(train_label, 1) if len(test_data) == 0: test_data = feature else: test_data = np.vstack((test_data, feature)) if match: test_label = np.append(test_label,0) else: test_label = np.append(test_label,1) feature_train_data = np.hstack((train_label.reshape(len(train_label), 1), train_data)) feature_test_data = np.hstack((test_label.reshape(len(test_label), 1), test_data)) with open("feature_data/train_data.txt", "w") as f: writer = csv.writer(f) writer.writerows(feature_train_data) with open("feature_data/test_data.txt", "w") as f: writer = csv.writer(f) writer.writerows(feature_train_data) clf = svm.SVC(kernel='linear', C=1).fit(train_data, train_label) score = clf.score(test_data, test_label) print(score)
とコードを書きました。今/sound_animal/soundsの中には犬の音声と猫の音声の2種類があります。犬の音声はdog0.wav・dog1.wav・・・などdogで始まるもので、猫の音声はcat0.wav・cat1.wav・・・で始まります。
pattern = r"dog" file = os.path.basename(file_name) match = re.match(pattern, file) if match: train_label = np.append(train_label, 0) else: train_label = np.append(train_label, 1)
と書いたところなどで犬の鳴き声の音声(dog.wav)で始まるものにはラベル0を、その他のものにはラベル1をつけています。
しかし
clf = svm.SVC(kernel='linear', C=1).fit(train_data, train_label) score = clf.score(test_data, test_label)
の部分で、今全ての学習データを学習させ、全てのテストデータでテストしてしまっています。
私は学習ラベルを付与されたデータの7割を使って学習させ、テストラベルを付与されたデータの3割を使ってテストさせたいと考えています。ただ、今回上記のif文で学習データとテストデータを分けてしまっているのでどのようにそのデータをさらに7割や3割に分割して分ければいいのかわかりません。どのようにコードを書けば良いのでしょうか?
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
退会済みユーザー
2017/11/13 14:43
2017/11/13 14:51
2017/11/13 15:45
退会済みユーザー
2017/11/14 07:36
2017/11/14 07:51
退会済みユーザー
2017/11/14 07:57