ナイーブベイズ分類器でクロスバリデーションをしようと思っていますが、下記エラーが出てきてしまいました。
原因を教えていただけないでしょうか?よろしくおねがします
clf = MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)#ベイズの多項分布 x_train=xx.as_matrix().data.shape >>>(7484, 2838) y_train=Y.as_matrix().T.data.shape >>>(7484, 1) from sklearn.model_selection import cross_val_score cross_val_score(clf, x_train, y_train, cv=10) Cannot have number of splits n_splits=10 greater than the number of samples: 2.#エラーメッセージ
質問追記
クロスバリデーションのためにサンプル数が足らないとのエラーメッセージが出ていますが、サンプル数は2000ほどあります。
行が単語の塊で、列がmecabで分けた単語です。特徴ベクトル抽出にCountVectorizer、TfidfVectorizerなどのベクタライザは使用していません。普通にトレーニングセットで学習&テストセットで予測では確率はでますが、クロスバリデーションをしようとするとこのように上手くいきません。
サンプル数が十分にあるのにこのようなエラーが出てしまうのは、行列の配列など、サンプル数を的確に処理できる形にできてないなどの「サンプル数が足りない」とは別の問題があると考えられるのですがこの推測は正しいでしょうか?
質問追記2
cv=2の時のエラーメッセージは
All the n_groups for individual classes are less than n_splits=2.
です。その前に.data.shapeでトレーニングセットとテストセットの値を変形する前は逆に配列が多すぎるとでてしまいます。
x_train=xx.as_matrix() y_train=Y.as_matrix().T from sklearn.model_selection import cross_val_score cross_val_score(clf, x_train, y_train, cv=10) too many indices for array#エラーメッセージ
トレーニングデータの概要は下記の図のようになっています(見える部分の文字は特定されない情報です。)
行は単語の塊ですがインデックス表記になっています。列が単語で行の単語の塊に該当する部分の値が1になっています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 07:45
2017/04/25 12:35 編集