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

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

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

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

Q&A

解決済

1回答

174閲覧

学習用データとテストデータは同じfor文内で回してはいけないのか

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2017/11/03 11:49

学習用データとテストデータは同じfor文内で回してはいけないのでしょうか?
http://webdatareport.hatenablog.com/entry/2016/11/06/161304 のsvm.pyの
学習用データを作成とコメントアウトされているところとテストデータを作成とコメントアウトされているところの部分で、なぜ学習用データとテストデータは同じfor文内で回していないのかわかりません。
どうしてなのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

リンク先のプログラムには「テストデータが学習データの一部からなる」という重大なミスがあります。
修正するには
file_name = "learning_sample/%d_%d_%d.wav" % (bell_num1,noise_num,level_nums[8])
の部分を
file_name = "learning_sample/%d_%d_%d.wav" % (bell_num1,noise_num,level_nums[10])
へ変更する必要があります。


svm.pyの基本構造は

for pair in pairs: ベル1の 学習データ作成 テストデータ作成 ベル2の 学習データ作成 テストデータ作成 svm(全学習データ) predict(全テストデータ)

のようです。

学習データは、予め作成された音源のファイル名を指定して、それをget_featureで特徴ベクトルに変換したものからなっていることが読み取れます。
音源ファイル名は(鈴番号, ノイズ番号, 信号の音量レベル)の3組との対応があり、音源ファイル名を指定するには、鈴番号はすでに定まっているので、ノイズ番号と信号音量レベルを指定すればよいことになります。これらを実行している部分を抜粋すると以下のようになります。

for noise_num in noise_nums[0:10]: for level_num in level_nums[0:10]: 音声ファイルを読み込みget_featureで特徴ベクトルに変換 特徴ベクトルと鈴のラベルをスタック

テストデータの作成は学習データの作成とほぼおなじです。違いはlevel_numのfor文がないことです。
敢えて学習データ作成と分けて書くと

for noise_num in noise_nums[0:10]: file_name = "learning_sample/%d_%d_%d.wav" % (bell_num1,noise_num,level_nums[8])#<---- 10とするべき 音声ファイルを読み込みget_featureで特徴ベクトルに変換 特徴ベクトルと鈴のラベルをスタック

となります。外のfor loopが学習データ作成のものと同じなので、あわせて書くと

for noise_num in noise_nums[0:10]: for level_num in level_nums[0:10]: 音声ファイルを読み込みget_featureで特徴ベクトルに変換 特徴ベクトルと鈴のラベルをスタック file_name = "learning_sample/%d_%d_%d.wav" % (bell_num1,noise_num,level_nums[8])#<---- 10とするべき 音声ファイルを読み込みget_featureで特徴ベクトルに変換 特徴ベクトルと鈴のラベルをスタック

となり、もとのコードと一致します。

投稿2017/11/03 14:12

WathMorks

総合スコア1582

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

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

退会済みユーザー

退会済みユーザー

2017/11/04 05:36

ありがとうございます。なぜテストデータではlevel_nums[0:10](信号の音量レベル)の指定をしないのでしょうか?テストデータでもlevel_nums[0:10]の指定をしないと学習データと等価にならないのではと思いました。
WathMorks

2017/11/04 08:21

学習データで予測器を作成し、テストデータで性能をチェックするのが目的です。 テストデータに学習で使用したデータを含めては意味がありせん。
退会済みユーザー

退会済みユーザー

2017/11/04 09:32

なるほど!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問