前提・実現したいこと
約5万個の30*300のデータに対し、sklearn.ensemble
のRandomForestClassfier
を用いて二値分類の層化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
1from sklearn.ensemble import RandomForestClassifier as RFC 2from sklearn.model_selection import StratifiedKFold 3from sklearn.model_selection import cross_val_score 4rfc = RFC(verbose=True,n_jobs=-1,random_state=1) 5cvscore = cross_val_score(rfc, x, y, cv=StratifiedKFold)
x
: 入力データ。x.shape=(48366, 30, 300)
のndarray。
y
: ラベルデータ。y.shape=(48366,)
のndarray。
どちらもPandas
のDataFrame
のカラムから生成したデータです。
xの作り方
Python
1# xの形を(48366,1) から (48366, 30, 300) に変える 2x = df.values[:,2:] 3xl = [x[i][0] for i in range(len(x))] 4x = np.array(xl)
yの作り方
Python
1from sklearn.preprocessing import LabelEncoder 2le = LabelEncoder() 3y = df.values[:,:1] 4y = le.fit_transform(y)
バージョン情報
Python==3.6.0
sckit-learn==0.22.1
どなたかご教授いただけたら幸いです。
「こうするのはどうだろう?」といった提案でも構いません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/24 05:49
2020/01/24 06:22 編集
2020/02/04 02:31