Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scikit learn Scikit SVM对STL-10数据集的精度非常差_Scikit Learn_Svm_Scikit Image - Fatal编程技术网

Scikit learn Scikit SVM对STL-10数据集的精度非常差

Scikit learn Scikit SVM对STL-10数据集的精度非常差,scikit-learn,svm,scikit-image,Scikit Learn,Svm,Scikit Image,我正在使用Scikit学习支持向量机对STL-10数据集的模型进行训练,该数据集包含5000个训练图像(10个预定义的折叠)。所以我有5000*96*96*3大小的数据集用于培训和测试。我使用以下代码来训练它,并测量测试集的准确性。(80% 20%). 最终结果的准确度为0.323。如何提高支持向量机的精度 这是 因此,您似乎直接在图像上使用原始SVM。这通常不是一个好主意(实际上相当糟糕) 我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些

我正在使用Scikit学习支持向量机对STL-10数据集的模型进行训练,该数据集包含5000个训练图像(10个预定义的折叠)。所以我有5000*96*96*3大小的数据集用于培训和测试。我使用以下代码来训练它,并测量测试集的准确性。(80% 20%). 最终结果的准确度为0.323。如何提高支持向量机的精度

这是


因此,您似乎直接在图像上使用原始SVM。这通常不是一个好主意(实际上相当糟糕)

我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些步骤(一种非常不同的方法;过去几年进行了大量研究!)

  • 第一步

    • 需要进行预处理
      • 标准化均值和方差(我不希望您的数据集已经标准化)
      • 可选:直方图均衡化
  • 第二步

    • 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
      • (内核-)PCA
      • (内核-)LDA
      • 字典学习
      • 矩阵分解
      • 本地二进制模式
      • 。。。(最初只需使用LDA进行测试)
  • 第三

    • SVM用于分类
      • 在这之前可能还需要一个规范化步骤,正如@David Batista在评论中提到的:可能需要一些参数调整(特别是对于内核SVM)
还不清楚在这里使用颜色信息是否明智。对于更简单的方法,我希望黑白图像更出色(您正在丢失信息,但调整管道更可靠;高性能方法当然会使用颜色信息)

有关描述类似问题的随机教程,请参见。虽然我不知道这是否是一项好的工作,但您可以立即识别上面提到的处理管道(预处理、特征提取、分类器学习)

编辑:
为什么要进行预处理?:有些算法假设中心样本具有单位方差,因此需要标准化。这(至少)对PCA、LDA和SVM非常重要。

因此,您似乎直接在图像上使用原始SVM。这通常不是一个好主意(实际上相当糟糕)

我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些步骤(一种非常不同的方法;过去几年进行了大量研究!)

  • 第一步

    • 需要进行预处理
      • 标准化均值和方差(我不希望您的数据集已经标准化)
      • 可选:直方图均衡化
  • 第二步

    • 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
      • (内核-)PCA
      • (内核-)LDA
      • 字典学习
      • 矩阵分解
      • 本地二进制模式
      • 。。。(最初只需使用LDA进行测试)
  • 第三

    • SVM用于分类
      • 在这之前可能还需要一个规范化步骤,正如@David Batista在评论中提到的:可能需要一些参数调整(特别是对于内核SVM)
还不清楚在这里使用颜色信息是否明智。对于更简单的方法,我希望黑白图像更出色(您正在丢失信息,但调整管道更可靠;高性能方法当然会使用颜色信息)

有关描述类似问题的随机教程,请参见。虽然我不知道这是否是一项好的工作,但您可以立即识别上面提到的处理管道(预处理、特征提取、分类器学习)

编辑:
为什么要进行预处理?:有些算法假设中心样本具有单位方差,因此需要标准化。这(至少)对PCA、LDA和SVM非常重要。

如何提高SVM的准确性?可能是功能工程,并尝试使用不同的内核,但您也可以提供有关数据集的更多详细信息。我认为问题在于将我的数据从(5000*96*96*3)重塑为(500027648)数据集。用数据链接更新了问题我可以提高SVM的精确度吗?可能是功能工程,并尝试使用不同的内核,但您也可以提供有关数据集的更多详细信息。我认为问题在于将我的数据从(5000*96*96*3)重塑为(500027648)数据集。使用数据集的链接更新了问题
def train_and_evaluate(clf, train_x, train_y):
    clf.fit(train_x, train_y)

#make 2D array as we can apply only 2d to fit() function
nsamples, nx, ny, nz = images.shape
reshaped_train_dataset = images.reshape((nsamples, nx * ny * nz))

X_train, X_test, Y_train, Y_test = train_test_split(reshaped_train_dataset, read_labels(LABEL_PATH), test_size=0.20, random_state=33)

train_and_evaluate(my_svc, X_train, Y_train)

print(metrics.accuracy_score(Y_test, clf2.predict(X_test)))