python - sklearn 维度问题 "Found array with dim 3. Estimator expected <= 2"

标签 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 is 0 or 1

我可以使用什么代码来操纵我的训练和测试数据,将其转换为 scikit-learn 可用的形式?还有,从3维降到2维,如何保证数据不丢失?

最佳答案

没错,sklearn 只适用于二维数据。

你可以尝试做什么:

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

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

关于python - sklearn 维度问题 "Found array with dim 3. Estimator expected <= 2",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48003185/

相关文章:

python - Numpy:如何将观察结果转换为概率?

python - 在 groupby 之后的 1 列内从另一个值中减去 2 个值

python - 使用 Docker 执行任意代码

python - 如何在subprocess.Popen.communicate()中释放GIL

R - 给定训练集和测试集的训练模型,计算测试 MSE

matlab - 神经网络中的竞争性学习

python - Tensorflow 序列扩展的动态 __len__?

python - 在 Python 中以特定格式从嵌套 JSON 对象中提取数据

python - 使用python对3D中的2D表面点进行Delaunay三角剖分?

python - 使用for循环在numpy中填充二维矩阵