Different accuracy between OpenCV's SVM and sklearn's LinearSVM

What is the difference between OpenCVs linear SVM and sklearn LinearSVM? The accuracy differs by 10%.

sklearn:

clf = make_pipeline(MaxAbsScaler(), LinearSVC(C=1.0, tol=1e-8, max_iter=1000))
clf.fit(training_data, label_data.ravel())

s = clf.score(test_training_data, test_label_data.ravel())
print(s)

OpenCV:

tr_scalar = MaxAbsScaler().fit(training_data)
training_data = tr_scalar.transform(training_data)
test_training_data = tr_scalar.transform(test_training_data)

svm = cv.ml.SVM_create()
svm.setType(cv.ml.SVM_C_SVC)
svm.setKernel(cv.ml.SVM_LINEAR)
svm.setC(1.0)
svm.setTermCriteria((cv.TERM_CRITERIA_MAX_ITER, 1000, 1e-8))
svm.train(np.asarray(training_data, dtype=np.float32), cv.ml.ROW_SAMPLE, label_data)

predictions = svm.predict(np.asarray(test_training_data, dtype=np.float32))

sklearn has 89% accuracy and OpenCV has 79% accuracy. Do I have to set some specific flags?
sklearn’s LinearSVM uses liblinear.

1 Like