Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”
Posted
技术标签:
【中文标题】Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”【英文标题】:Python scikit-learn SVM Classifier "ValueError: Found array with dim 3. Expected <= 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 是否支持多维分类器?
【问题讨论】:
相关:***.com/questions/34972142/… 【参考方案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 一样将我的数据集转换为更低的维度。以上是关于Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”的主要内容,如果未能解决你的问题,请参考以下文章
使用 scikit-learn python 的线性 SVM 时出现 ValueError
机器学习:SVM(scikit-learn 中的 SVM:LinearSVC)
将经过训练的 SVM 从 scikit-learn 导入到 OpenCV
Python 元组和列表操作(作为 scikit-learn 中 SVM 模型的输入)