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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

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

解決済

python scikit-learn 交差検証について

---stax---
---stax---

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

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

1回答

0評価

0クリップ

3930閲覧

投稿2018/07/23 04:40

表題の件で質問させてください

現在こちらの書籍を読みながら機械学習の勉強を進めています
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

その中で交差検証について学習しているのですが分からない箇所があります
データセットの分割は訓練セット、検証セット、テストセットに分けて、
モデルのチューニングには検証セットを使い、テストセットはモデルの最終評価にのみ使うという記述があり、こちらは理解出来ました

以下訓練セット、検証セット、テストセットに分けてのモデル作成

python

from sklearn.model_selection import cross_val_score from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.model_selection import StratifiedKFold #層化k分割交差検証 from sklearn.model_selection import KFold #k分割交差検証 from sklearn.svm import SVC import numpy as np ## データを(訓練セット+検証セット)とテストセットに分割する X_trainval, X_test, y_trainval, y_test = train_test_split(iris.data, iris.target, random_state=0) print(X_trainval.shape) print(X_test.shape) print(y_trainval.shape) print(y_test.shape) print('-------------------') ## (訓練セット+検証セット)とを分割する訓練セットと検証セットに分割する X_train, X_valid, y_train, y_valid = train_test_split(X_trainval, y_trainval, random_state=1) print(X_train.shape) print(X_valid.shape) print(y_train.shape) print(y_valid.shape) print('-------------------') print("Size of training set: {} size of validation set: {} size of test set:" " {}\n".format(X_train.shape[0], X_valid.shape[0], X_test.shape[0])) best_score = 0 for gamma in [0.001, 0.01, 0.1, 1, 10, 100]: for C in [0.001, 0.01, 0.1, 1, 10, 100]: ## それぞれの組み合わせに対してSVCを訓練する svm = SVC(gamma=gamma, C=C) svm.fit(X_train, y_train) ## SVCを”検証セット”で評価する score = svm.score(X_valid, y_valid) ## いいスコアだったらスコアとパラメータを保存 if score > best_score: best_score = score best_parameters = {'C':C, 'gamma':gamma} ## 訓練セットと検証セットを用いて改めてモデル作成 svm = SVC(**best_parameters) svm.fit(X_trainval, y_trainval) ## テストセットを使って評価 test_score = svm.score(X_test, y_test) print('Best score on validation set : {:.2f}'.format(best_score)) print('Best parameters: ', best_parameters) print('Test set score with Best parameters:{:.2f}'.format(test_score))

ただ、その次にscikit-learnのGridSearchCVを利用する方法が喜寿されていたのですが、そのコードには交差検証はされているのですが訓練セットを検証セットに分ける方法は記述されておらず、「訓練セットと検証セットを分割する代わりに交差検証を行う」とありました
個人的には「訓練セットと検証セットを分割する代わりに交差検証を行う」という部分が、データを分割することと交差検証は別の話じゃないのかなと引っかかっています

GridSearchCVは自動的に訓練セットと検証セットを分けたうえでモデルを作成しているのでしょうか?
またデータセットを分割する方法は訓練セットとテストセットに分けるだけなのか、検証セットも作ってモデルを作るのはどちらで行うべきなのでしょうか?
的外れな質問かもしれませんがアドバイス宜しくお願い致します

以下、scikit-learnのGridSearchCVを利用する方法

python

X_trainval, X_test, y_trainval, y_test = train_test_split(iris.data, iris.target, random_state=0) X_train, X_valid, y_train, y_valid = train_test_split(X_trainval, y_trainval, random_state=1) param_grid = {'C':[0.001, 0.01, 0.1, 1, 10, 100], 'gamma':[0.001, 0.01, 0.1, 1, 10, 100]} print('Parameter grid:\n{}'.format(param_grid)) grid_search = GridSearchCV(SVC(), param_grid, cv=5) X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=0) grid_search.fit(X_train, y_train) print('Test set score : {:.2f}'.format(grid_search.score(X_test, y_test)))

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

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