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

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

新規登録して質問してみよう
ただいま回答率
85.46%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

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

機械学習

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

Q&A

解決済

1回答

1791閲覧

scikit-learnでデータ分割するときに配列番号を指定して特定のデータを取ってくる方法がわからない

退会済みユーザー

退会済みユーザー

総合スコア0

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

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

機械学習

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

0グッド

0クリップ

投稿2021/08/11 01:33

編集2021/08/11 02:34

前提・実現したいこと

scikit-learnでデータ分割するときに、ランダムではなく先頭から順番に分割した後で、
そのデータ分割結果を指定して、検証データ・訓練データとしたいです。

[0]~[4]までそれぞれの分割結果をindexで指定して確認しようとしています。

つまり、順番は固定して分割したデータを、区画ごとに参照したいです。

dataset[0] = {'train':[0, 1, 2, 3, 4, 5, 6, 7], 'test':[8, 9]} dataset[1] = {'train':[2, 3, 4, 5, 6, 7, 8, 9], 'test':[0, 1]} dataset[2] dataset[3] dataset[4]

図の出典元:Qiita記事「比較的少なめのデータで機械学習する時は交差検証 (Cross Validation) をするのです
イメージ説明

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

現在のコードだとランダムは回避できているのですが、どこに配列番号が格納されているのか、また5回と指定してその候補(例えば、train[2 3 4 5 6 7 8 9] test[0 1])を確認できない状態です。

該当のソースコード

python

1from sklearn.model_selection import train_test_split 2a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3a_train, a_test = train_test_split(a,test_size=0.2,random_state=0) 4 5print(a_train) 6print(a_test) 7 8#出力 9[4, 9, 1, 6, 7, 3, 0, 5] 10[2, 8]

試したこと

5分割に関しては以下のコードをもとに分割を試しましたが、この場合、訓練とテスト用データの割合が指定できず、indexを指定するには別のエラーも発生してしまっている状態です。

def cross_validate(session, split_size=5): results = [] kf = KFold(n_splits=split_size) for train_idx, val_idx in kf.split(train_x_all, train_y_all): train_x = train_x_all[train_idx] train_y = train_y_all[train_idx] val_x = train_x_all[val_idx] val_y = train_y_all[val_idx] run_train(session, train_x, train_y) results.append(session.run(accuracy, feed_dict={x: val_x, y: val_y})) return results

実行コード

from sklearn.model_selection import KFold def cross_validate(nums, nums_str, split_size=5): results = [] kf = KFold(n_splits=split_size) for train_idx, val_idx in kf.split(nums, nums_str): print(train_idx, val_idx) print(nums[1]) train_x = nums[train_idx] train_y = nums_str[train_idx] val_x = nums[val_idx] val_y = nums_str[val_idx] cross_validate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], split_size=5)

エラー

[2 3 4 5 6 7 8 9] [0 1] 1 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in <module>() 14 val_y = nums_str[val_idx] 15 ---> 16 cross_validate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], split_size=5) in cross_validate(nums, nums_str, split_size) 9 print(train_idx, val_idx) 10 print(nums[1]) ---> 11 train_x = nums[train_idx] 12 train_y = nums_str[train_idx] 13 val_x = nums[val_idx] TypeError: only integer scalar arrays can be converted to a scalar index

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

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

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

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

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

guest

回答1

0

ベストアンサー

train_test_splitは、
Split arrays or matrices into random train and test subsets
のためのものです。
特に複雑なことをやっているわけではありません。

固定して分割したデータでやりたいのであれば、train_test_splitを使う必要はありませんし、使わない方がわかりやすいです。

投稿2021/08/11 11:45

編集2021/08/12 06:50
ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問