【问题标题】:Python scikit-learn SVM Classifier "ValueError: Found array with dim 3. Expected <= 2"Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”
【发布时间】:2016-01-14 18:10:50
【问题描述】:

我正在尝试在 MNIST 数据集上实现 SVM 分类器。 由于我的参数是 3 维的,因此会引发以下错误:

ValueError: Found array with dim 3. Expected <= 2

以下是我的代码 sn-p:

import mnist
from sklearn import svm

training_images, training_labels = mnist.load_mnist("training", digits = [1,2,3,4])
classifier = svm.SVC()
classifier.fit(training_images, training_labels)

sklearn 是否支持多维分类器?

【问题讨论】:

标签: python scikit-learn svm


【解决方案1】:

解决该问题的一种方法是将输入数据重新整形为二维数组。

假设您的训练数据由 10 张图像组成,每张图像都表示为 3x3 矩阵,因此您的输入数据是 3 维的。

[ [[1,2,3],   [[1,2,3],           [
   [4,5,6],    [4,5,6],            image 10 
   [7,8,9]] ,  [7,8,9]]  , ... ,           ] ]

我们可以将每张图像转换为一个由 9 个元素组成的数组,以便将数据集转换为二维。

dataset_size = len(training_images)
TwoDim_dataset = dataset.reshape(dataset_size,-1)

这会将数据变成以下形状:

[ [1,2,3,4,5,6,7,8,9]  ,  [1,2,3,4,5,6,7,8,9]  , ... ,  [image 10] ]

【讨论】:

    【解决方案2】:

    问题在于您的输入数据。

    您也可以使用sklearn 来加载数字数据集:

    from sklearn.datasets import load_digits
    from sklearn import svm
    
    digits = load_digits()
    X = digits.data
    y = digits.target
    
    classifier = svm.SVC()
    classifier.fit(X[:1000], y[:1000])
    predictions = classifier.predict(X[1000:])
    

    【讨论】:

    • 谢谢,像 sklearn.datasets 一样将我的数据集转换为更低的维度。
    猜你喜欢
    • 2019-07-19
    • 2020-10-04
    • 2021-04-16
    • 2019-06-01
    • 2016-11-28
    • 1970-01-01
    • 2022-01-16
    • 2016-04-30
    • 2023-02-18
    相关资源
    最近更新 更多