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

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

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

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

解決済

sckit-learnにおけるTypeError: Singleton array %r cannot be considered a valid collection.

shay
shay

総合スコア13

scikit-learn

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1回答

0評価

0クリップ

7603閲覧

投稿2020/01/22 13:42

前提・実現したいこと

約5万個の30*300のデータに対し、sklearn.ensembleRandomForestClassfierを用いて二値分類の層化k分割交差検証を行いたい。

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

最終的にTypeError: Singleton array %r cannot be considered a valid collection.というエラーが表示されます。このエラーが出なくなることが第一目標です。
以下エラー全文です(見やすさのため、1つのエラーを小分けにして表示しています)。

------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-762-10ee8ca88fe0> in <module> 3 from sklearn.model_selection import cross_val_score 4 rfc = RFC(verbose=True,n_jobs=-1,random_state=1) ----> 5 cvscore = cross_val_score(rfc, x, y, cv=StratifiedKFold)
~/.pyenv/versions/3.6.0/envs/mecab/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score) 388 fit_params=fit_params, 389 pre_dispatch=pre_dispatch, --> 390 error_score=error_score) 391 return cv_results['test_score'] 392
~/.pyenv/versions/3.6.0/envs/mecab/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_validate(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score) 234 return_times=True, return_estimator=return_estimator, 235 error_score=error_score) --> 236 for train, test in cv.split(X, y, groups)) 237 238 zipped_scores = list(zip(*scores))
~/.pyenv/versions/3.6.0/envs/mecab/lib/python3.6/site-packages/sklearn/model_selection/_split.py in split(self, X, y, groups) 728 to an integer. 729 """ --> 730 y = check_array(y, ensure_2d=False, dtype=None) 731 return super().split(X, y, groups) 732
~/.pyenv/versions/3.6.0/envs/mecab/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 579 580 if ensure_min_samples > 0: --> 581 n_samples = _num_samples(array) 582 if n_samples < ensure_min_samples: 583 raise ValueError("Found array with %d sample(s) (shape=%s) while a"
~/.pyenv/versions/3.6.0/envs/mecab/lib/python3.6/site-packages/sklearn/utils/validation.py in _num_samples(x) 150 if len(x.shape) == 0: 151 raise TypeError("Singleton array %r cannot be considered" --> 152 " a valid collection." % x) 153 # Check that shape is returning an integer or default to len 154 # Dask dataframes may not return numeric shape[0] value TypeError: Singleton array array(None, dtype=object) cannot be considered a valid collection.

上記のエラーから、cross_val_scoreの第二引数であるyの要素の中身に問題があると判断しました。
そこで中身がラベル(0,1)以外の要素を調べましたが、そのような要素は存在しませんでした。

該当のソースコード

Python

from sklearn.ensemble import RandomForestClassifier as RFC from sklearn.model_selection import StratifiedKFold from sklearn.model_selection import cross_val_score rfc = RFC(verbose=True,n_jobs=-1,random_state=1) cvscore = cross_val_score(rfc, x, y, cv=StratifiedKFold)

x: 入力データ。x.shape=(48366, 30, 300)のndarray。
y: ラベルデータ。y.shape=(48366,)のndarray。
どちらもPandasDataFrameのカラムから生成したデータです。

xの作り方

Python

# xの形を(48366,1) から (48366, 30, 300) に変える x = df.values[:,2:] xl = [x[i][0] for i in range(len(x))] x = np.array(xl)

yの作り方

Python

from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y = df.values[:,:1] y = le.fit_transform(y)

バージョン情報

Python==3.6.0
sckit-learn==0.22.1

どなたかご教授いただけたら幸いです。
「こうするのはどうだろう?」といった提案でも構いません。
よろしくお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

scikit-learn

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。