Scikit SVM对STL-10数据集的准确性非常差



我正在使用Scikit learn SVM为STL-10数据集训练我的模型,该数据集包含5000个训练图像(10个预定义折叠)。因此,我有5000*96*96*3大小的数据集用于训练和测试目的。我使用以下代码来训练它,并测量测试集的准确性。(80%20%)。最终结果准确度为0.323。如何提高SVM的准确性。

这是STL10数据集

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)))

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

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

  • 第一步

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

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

    • SVM用于分类
      • 在此之前可能需要一个归一化步骤,正如@David Batista的评论中所提到的:可能需要一些参数调整(尤其是内核SVM)

这里也不清楚使用颜色信息是否明智。对于更简单的方法,我希望黑白图像更出色(您正在丢失信息,但调整管道更稳健;高性能方法当然会使用颜色信息)。

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

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

相关内容

  • 没有找到相关文章

最新更新