0

私が正しく二つのグループ、グループ0とグループ1sklearnの次元の問題「予想薄暗い3.見積もりで見つかり、アレイ<= 2」

私はデータを抽出に.wavファイルを分類するKNNを使用しようとしています、私がしようとすると.predict()メソッドを使用するときに、モデルを作成し、モデルを当てはめる、しかし、私は次のエラーを取得する:

Traceback (most recent call last): 
File "/..../....../KNN.py", line 20, in <module> 
    classifier.fit(X_train, y_train) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/neighbors/base.py", line 761, in fit 
    X, y = check_X_y(X, y, "csr", multi_output=True) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/utils/validation.py", line 521, in check_X_y 
    ensure_min_features, warn_on_dtype, estimator) 
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/utils/validation.py", line 405, in check_array 
    % (array.ndim, estimator_name)) 
ValueError: Found array with dim 3. Estimator expected <= 2. 

私は同様の問題を説明し、これらの2件のstackoverflowの記事を発見した:

sklearn Logistic Regression "ValueError: Found array with dim 3. Estimator expected <= 2."

Error: Found array with dim 3. Estimator expected <= 2

私が間違っていると私を修正しますが、scikit-learnは2次元データしか受け入れられないようです。このデータセットに

  • 3240 .wavファイルについては
  • については (これは、トレーニングデータのインデックス0である):

    私のトレーニングデータは、形状(3240、20、5255)で構成されてい を持っています .wavファイルには、MFCC係数を表す(20,5255)個の配列があります(MFCC係数は数値的に音を試して表現します)。

私の試験データは、形状(3240)#CATEGORYは私が-学ぶscikitで使用できる形式に変換するために操作私のトレーニングとテストデータに使用することができますどのようなコード0または1

ですがあります?また、3次元から2次元に移動するときにデータが失われないようにするにはどうすればよいですか?

+1

MFCC配列を単一の次元に変換し、形状が '(3240,20 * 5255)' –

+0

になるようにしてください。あるいは、形状(20,5255)の2次元配列についてもっと説明してください。行と列は何を表しますか?各列または行から単一の代表番号を取ることはできますか? –

答えて

2

実際、sklearnは2Dデータでのみ動作します。

  • だけ(3240, 20*5255)を形作るためにそれを変換するために、学習データにnp.reshapeを使用する:あなたがやろうとすることができる何

    。元の情報はすべて保存されます。しかし、sklearnはこのデータの陰的構造を利用することはできません(例えば、1,21,41などの特徴は同じ変数の異なるバージョンです)。

  • 元のデータに畳み込みニューラルネットワークを構築します(例:tensorflow+Kerasスタック)。 CNNは、そのような多次元データを扱い、その構造を利用するように特別に設計されました。しかし、彼らはチューニングするために多くのハイパーパラメータを持っています。
  • (3240, 20*5255)に再整形されたデータの次元削減(例:PCA)を使用します。できるだけ多くの情報を保存しながら、機能の数を減らしてください。
  • 手動フィーチャエンジニアリングを使用して、データ構造から特定の情報(各ディメンションに沿った記述統計情報)を抽出し、そのようなフィーチャについてモデルをトレーニングします。

さらに多くのデータ(例:100K)がある場合は、最初のアプローチが最も効果的な場合があります。あなたのケース(3Kの例と10Kの機能)では、オーバーフィットを避けるためにモデルを大量に正規化する必要があります。

+0

PCAを実行するために特定のライブラリをお勧めしますか?また、PCAを使用した後で、データをscikit学習モデルにプラグインして精度を向上させることができますか? –

+0

Scikit-learnはPCAの優れた実装です - http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html –

+0

PCAは機能の数を減らすのに役立ちます。線形モデル(ロジスティック回帰など)では、トレーニングデータの精度は低下しますが、MAYBEはテストデータの精度を向上させるため、テストする必要があります。 最初のオプションから開始することをお勧めします。モデルを再構成データに適合させ、電車とテストデータセットの精度を比較します。差が大きい場合は、過適合が発生し、PCAなどの技術が必要になることがあります。 –

関連する問題