在 scikit-learn 中使用图像数据拟合支持向量分类器会产生错误

乔恩

我正在尝试为图像数据训练 SVC 分类器。然而,当我运行这段代码时:

classifier = svm.SVC(gamma=0.001)
classifier.fit(train_set, train_set_labels)

我收到此错误:

ValueError: setting an array element with a sequence.

我使用 Matplotlib: 将图像生成到一个数组中plt.imread(image)

该错误似乎不在数组中,但是当我检查数据类型和标签时,它们都是列表(我手动添加到标签数据的列表中):

print(type(train_set))
print(type(train_set_labels))

<class 'list'>
<class 'list'>

如果我这样做,plt.imshow(items[0])则图像在输出中正确显示。

我也叫train_test_splitscikit-learn

train_set, test_set = train_test_split(items, test_size=0.2, random_state=42)

示例输入:

train_set[0]

array([[[212, 134,  34],
    [221, 140,  48],
    [240, 154,  71],
    ..., 
    [245, 182,  51],
    [235, 175,  43],
    [242, 182,  50]],

   [[230, 152,  51],
    [222, 139,  47],
    [236, 147,  65],
    ..., 
    [246, 184,  49],
    [238, 179,  43],
    [245, 186,  50]],

   [[229, 150,  47],
    [205, 122,  28],
    [220, 129,  46],
    ..., 
    [232, 171,  28],
    [237, 179,  35],
    [244, 188,  43]],

   ..., 
   [[115, 112, 103],
    [112, 109, 102],
    [ 80,  77,  72],
    ..., 
    [ 34,  25,  28],
    [ 55,  46,  49],
    [ 80,  71,  74]],

   [[ 59,  56,  47],
    [ 66,  63,  56],
    [ 48,  45,  40],
    ..., 
    [ 32,  23,  26],
    [ 56,  47,  50],
    [ 82,  73,  76]],

   [[ 29,  26,  17],
    [ 41,  38,  31],
    [ 32,  29,  24],
    ..., 
    [ 56,  47,  50],
    [ 59,  50,  53],
    [ 84,  75,  78]]], dtype=uint8)

示例标签:

 train_set_labels[0]

 'Picasso'

我不确定我缺少哪个步骤来以分类器需要的形式获取数据以训练它。谁能看到可能需要什么?

约书亚·西蒙·塔西西奥·费内奇

您收到的错误消息:

 ValueError: setting an array element with a sequence,

当您尝试将列表放在需要单个值的地方时,通常会产生结果。这向我表明您的 train_set 由多维元素列表组成,尽管您确实声明您的输入是列表。你能发布一个输入和标签的例子吗?

更新 是的,就像我想的那样。训练数据的第一个元素 train_set[0] 对应于一个长列表(我不知道有多长),其中的每个元素都由 3 个元素的列表组成。因此,当分类器需要列表列表(m 行对应于每行由 n 个特征组成的列表的训练示例的数量)时,您将在列表列表中调用分类器。您的 train_set 数组中还有什么?train_set[0] 中是完整的数据集吗?如果是这样,您将需要创建一个新数组,其中每个元素对应于 train_set[0] 的每个子元素,然后我相信您的代码应该运行,尽管我对该分类器不太熟悉。或者,您可以尝试使用 train_set[0] 运行分类器。

更新 2

我没有使用 scikit-learn.svc 的经验,所以我无法告诉你预处理数据的最佳方法是什么,以便算法可以接受它,但一种方法是像我一样做前面说过,对于由列表组成的 train_set 的每个元素,将递归遍历并将 sublist 的所有元素放入上面的列表中。例如

new_train_set = []
    for i in range(len(train_set)):
        for j in range(len(train_set[i]):
        new_train_set.append([train_set[i,j])

然后我会用 new_train_set 和训练标签进行训练。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scikit-Learn中的分类数据转换

来自分类Dev

使用scikit-learn处理分类特征

来自分类Dev

使用scikit-learn处理分类特征

来自分类Dev

使用scikit-learn训练多维数据

来自分类Dev

处理 scikit-learn MLPClassifier 的分类标签

来自分类Dev

在Scikit-Learn中使用近似最近邻进行分类

来自分类Dev

使用 Scikit-Learn 使用分类数据制作回归模型

来自分类Dev

使用scikit-learn生成困难分类数据集

来自分类Dev

pip 安装 scikit-learn 错误

来自分类Dev

Scikit Learn Pipeline的定制转换器

来自分类Dev

使用scikit-learn分割阵列后,图像会失真

来自分类Dev

使用scikit-learn让熊猫玩得开心

来自分类Dev

使用Scikit Learn进行Unigram分析

来自分类Dev

如何使用 scikit learn 预测目标标签

来自分类Dev

使用 Anaconda 更新 scikit-learn 失败

来自分类Dev

Scikit-Learn管道拟合和转换错误

来自分类Dev

scikit-learn:如何使用拟合概率模型?

来自分类Dev

scikit-learn中处理nan / null的分类器

来自分类Dev

scikit-learn中多类问题的级联分类器

来自分类Dev

Scikit-learn Ridge分类器:提取类概率

来自分类Dev

Scikit-learn Ridge分类器:提取类概率

来自分类Dev

在Android中使用经过训练的Scikit-learn svm分类器

来自分类Dev

使用scikit-learn处理太多分类功能

来自分类Dev

使用scikit-learn进行二次采样+分类

来自分类Dev

使用scikit-learn预测单个值会导致ValueError

来自分类Dev

如何克隆包括数据的scikit-learn估算器?

来自分类Dev

如何在scikit-learn中使用tfidf计算功能?

来自分类Dev

在Scikit-Learn中使用非线性SVM时出错

来自分类Dev

我可以在Django框架中使用scikit-learn吗?