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

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

新規登録して質問してみよう
ただいま回答率
85.35%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

2057閲覧

K-分割交差検証(K-fold cross validation)では、テストデータを事前に分割してから適用するのか?

faker

総合スコア51

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/11/20 19:02

編集2020/11/20 19:03

自分の理解が曖昧なところがあるので、間違っていたらどんどん指摘してください。
自分の理解は以下のとおりです。

「学習データ」:学習に用いるデータ。
「検証データ」:過学習しているか確認するためのデータ。学習データと被ったらだめ。
「テストデータ」:未知のものごとに適用できるか、汎化性能を確認するためのデータ。学習データにも検証データにも被ったらだめ。
「交差検証法(クロスバリデーション)」:データ数少ないときに検証をするための手法。
「K-分割交差検証法」:学習データをK個に分けて、そのうちの1個を"検証データ"としてかわりばんこに使って検証を行う。

この知識の段階で、K-分割交差検証について調べていったところ、いくつかのサイトでテストデータに分割をすることなく、データセット全体でK-分割交差検証を行っているサイトが見られました。
交差検証法のやり方としてはどちらが正しいのでしょうか?
そもそもテストをする必要がない場合なども実務上ではあるのでしょうか?
以下はサイト一例です。回答よろしくお願いします。

https://aiacademy.jp/media/?p=263
https://qiita.com/matsukura04583/items/042fcbf1bc594dfca7a4
https://data-analysis-stats.jp/python/%E3%83%9B%E3%83%BC%E3%83%AB%E3%83%89%E3%82%A2%E3%82%A6%E3%83%88%E6%A4%9C%E8%A8%BC%E3%81%A8%E4%BA%A4%E5%B7%AE%E6%A4%9C%E8%A8%BC/

交差検定では、用意したデータをK個に分割して、1回目はそのうちの一つをテストデータ、それ以外を学習データとして、学習・評価します。2回目は1回目と異なる別のデータをテストデータとして使い、3回目は1,2回目と異なるデータで評価をします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問である「交差検証法のやり方としてはどちらが正しいのでしょうか?」は、どちらも正しい、が回答です。以下根拠です。

私も理解があいまいですので、このご質問を機会に調べてみました。こういう基本的なことかつ誤解が結構あることは、さまざまなブログやテックサイトではなく、権威に頼った方が良いと思いました。よって、日本代表として東大松尾研DL4US、米国代表としてGoolge Machine Learning Crash Courseを確認してみました。

すると、両者は同じことを、かつ、別回答のリンク(私もこの理解であった)とは異なる見解を示していました。

DL4USでのデータセットに関する記載
Google Machine Learning Crash Course - Training and Test Sets: Splitting Data
Google Machine Learning Crash Course - Validation Set: Another Partition

DL4USでは「学習用のデータセットとは別にテスト用(検証用)データセットをあらかじめ用意しておき、学習後にテスト用(検証用)データセットに対する予測精度を評価することが一般に行われます。(厳密には、テスト用は評価のみを行う場合を、検証用(validation)データセットは評価をモデル選択(ハイパーパラメータの調整等)に生かす場合を指します。検証用とテスト用を別途用意し、検証用の評価でモデルを選択したのち、テスト用の評価を計測します。)」

Googleでは、traning/testと、trainig/validation/testを独立に説明した上で、後者で「"Tweak model" means adjusting anything about the model you can dream up from changing the learning rate, to adding or removing features, to designing a completely new model from scratch. At the end of this workflow, you pick the model that does best on the test set. You can greatly reduce your chances of overfitting by partitioning the data set into the three subsets shown in the following figure.」(意訳:モデルを微調整してテストデータを使って最適なモデルを選択するんだけど、オーバーフィッティングを減らすにはデータセットを3つにわけたほうがよい)

これらを総合すると以下のことがわかります。

  • 学習データ+テストデータに分割して、さらにその学習データを訓練用・検証用にわけるといった、日本のブログやテックサイトに記述されている考えは、少なくともこの2者には無い
  • 2分割に対して3分割がよりよいモデルとは言っておらず、並列関係で2分割・3分割は選択肢である。
  • モデル調整や選択を伴う場合は3分割のモデルが望ましい、という選択方針である。

要するに、モデル調整や選択を伴わない場合、あるいは伴ってもオーバーフィッティングの可能性が少ないのであれば、全てのデータを使ってクロスバリデーションしてもよいことになります。ただし、一般的には、何らかの形でモデル調整や選択が入りますので、3分割モデルが多いと思います。

私としては、この考え方は納得いくものでした。いかがでしょうか。

※日本のブログやテックサイトに記述されている考え、が間違っているとは主張していません。この2者とは異なる、という事実説明だけです。なお、実装では、まずtrainとtestにデータをわけて、trainの中からvalidationを切り出すので、日本のブログやテックサイトに記述されている考えは、実装としてはわかりやすいと思います。

投稿2020/11/20 23:05

編集2020/11/20 23:50
toast-uz

総合スコア3266

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

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

faker

2020/11/21 03:13 編集

紹介していただいたサイト、とても参考になりました。交差検証法云々というより、データの分け方の違いが異なるため、サイトごとで説明が異なっているというものなんですね。
toast-uz

2020/11/21 03:49 編集

はい、ご理解の通りです。中には勘違いしている(日本のブログやテックサイトとしての)サイトもあるとは思いますが。
guest

0

類似している質問がありますので、参考にして頂くと良いかと思います。

交差検証のテストデータの扱いについて

投稿2020/11/20 21:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

faker

2020/11/21 03:20

私自身、事前に交差検証についての質問をTeratailで調べましたが、自分ではこの質問とは類似していないと思い質問させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問