Scikit learn Scikit SVM对STL-10数据集的精度非常差
我正在使用Scikit学习支持向量机对STL-10数据集的模型进行训练,该数据集包含5000个训练图像(10个预定义的折叠)。所以我有5000*96*96*3大小的数据集用于培训和测试。我使用以下代码来训练它,并测量测试集的准确性。(80% 20%). 最终结果的准确度为0.323。如何提高支持向量机的精度 这是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。这通常不是一个好主意(实际上相当糟糕) 我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些
因此,您似乎直接在图像上使用原始SVM。这通常不是一个好主意(实际上相当糟糕) 我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些步骤(一种非常不同的方法;过去几年进行了大量研究!)
- 第一步:
- 需要进行预处理!
- 标准化均值和方差(我不希望您的数据集已经标准化)
- 可选:直方图均衡化
- 需要进行预处理!
- 第二步:
- 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
- (内核-)PCA
- (内核-)LDA
- 字典学习
- 矩阵分解
- 本地二进制模式
- 。。。(最初只需使用LDA进行测试)
- 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
- 第三:
- SVM用于分类
- 在这之前可能还需要一个规范化步骤,正如@David Batista在评论中提到的:可能需要一些参数调整(特别是对于内核SVM)
- SVM用于分类
为什么要进行预处理?:有些算法假设中心样本具有单位方差,因此需要标准化。这(至少)对PCA、LDA和SVM非常重要。因此,您似乎直接在图像上使用原始SVM。这通常不是一个好主意(实际上相当糟糕) 我将描述过去几十年流行的经典图像分类管道!请记住,目前性能最好的方法可能会使用深度神经网络来结合其中一些步骤(一种非常不同的方法;过去几年进行了大量研究!)
- 第一步:
- 需要进行预处理!
- 标准化均值和方差(我不希望您的数据集已经标准化)
- 可选:直方图均衡化
- 需要进行预处理!
- 第二步:
- 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
- (内核-)PCA
- (内核-)LDA
- 字典学习
- 矩阵分解
- 本地二进制模式
- 。。。(最初只需使用LDA进行测试)
- 特征提取->您应该从这些图像中了解一些特征。有很多方法,包括
- 第三:
- SVM用于分类
- 在这之前可能还需要一个规范化步骤,正如@David Batista在评论中提到的:可能需要一些参数调整(特别是对于内核SVM)
- 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)))