sklearn维度问题"找到具有暗淡的数组3.估计的估计值< = 2"

时间:2017-12-28 07:10:13

标签: python numpy machine-learning scikit-learn signal-processing

我正在尝试使用KNN将.wav文件正确分类为两组,即组0和组1。

我提取数据,创建模型,适合模型,但是当我尝试使用.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.

我找到了这两个描述类似问题的stackoverflow帖子:

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

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

而且,如果我错了,请纠正我,但似乎scikit-learn只能接受二维数据。

我的训练数据有形(3240,20,5255) 其中包括:

  • 此数据集中的3240 .wav文件(这是训练数据的索引0) 对于
  • 对于每个 .wav文件,有一个(20,5255)numpy数组,它代表MFCC系数(MFCC系数尝试并以数字方式表示声音)。

我的测试数据有形状(3240,)#category是0或1

我可以使用哪些代码来操纵我的训练和测试数据,将其转换为scikit-learn可用的形式?另外,当我从3维向2维下降时,如何确保数据不会丢失?

1 个答案:

答案 0 :(得分:2)

确实,sklearn仅适用于2D数据。

你可以尝试做什么:

  • 只需在训练数据上使用np.reshape即可将其转换为(3240, 20*5255)形状。它将保留所有原始信息。但是sklearn将无法利用此数据中的隐式结构(例如,功能1,21,41等是同一变量的不同版本)。
  • 在原始数据上构建卷积神经网络(例如,使用tensorflow+Keras堆栈)。 CNN专门设计用于处理这种多维数据并利用其结构。但他们有很多超参数可供调整。
  • 对重塑为(3240, 20*5255)的数据使用降维(例如PCA)。它尽量保留尽可能多的信息,同时保持较低的功能数量。
  • 使用手动功能工程从数据结构中提取特定信息(例如,每个维度的描述性统计信息),并在此类功能上训练您的模型。

如果您有更多数据(例如100K示例),第一种方法可能效果最好。在您的情况下(3K示例和10K功能),您需要大量规范您的模型以避免过度拟合。