SVM始终返回相同的值

时间:2018-06-26 15:39:07

标签: python opencv svm

我一直遇到SVM问题,因为无论输入什么,它总是返回相同的值...

为了解释我的问题,我尽可能地简化了它:假设我希望我的SVM能够识别一位等于1还是0。它的输入是位,并且我希望它标记它们取值为1或0。

所以我在做什么:我选择一个等于1的位,另一个等于0,我训练SVM识别它们,然后想在相同的位上测试SVM(在我的情况下,train = test) 。这是代码,可以直接执行:

import cv2
import numpy as np
from sklearn import preprocessing

# 1. Train data           
train_1 = np.array([[1]]).astype(np.float32)
train_0 = np.array([[0]]).astype(np.float32)

# 2. Test data
test_1 = np.array([[1]]).astype(np.float32)
test_0 = np.array([[0]]).astype(np.float32)

# 3. Labels
labels = np.array([[1], [0]]).astype(np.float32)

# 4. SVM init
svm       = cv2.SVM()      
svm_param = dict(kernel_type = cv2.SVM_RBF,
                 svm_type    = cv2.SVM_C_SVC,
                 C           = 4, 
                 gamma       = 0.125) 

# 5. SVM  train
train  = np.vstack((train_1, train_0)) 
scaler = preprocessing.StandardScaler().fit(train)  # comment
train  = scaler.transform(train)                    # comment
svm.train(train, labels, params = svm_param)

# 6. SVM  predict
print "Test 0 : ", svm.predict(test_0)
print "Test 1 : ", svm.predict(test_1)

(我们不在乎SVM参数,因为无论它们有什么值我总是会遇到相同的问题)

有人告诉我,必须对数据进行预处理,以抑制均值和方差(末尾带有“#comment”的行)。如果我按原样放置代码,它将无法正常工作并始终产生0。[1,0]训练变量在处理后变为[1,-1]。

如果我评论这两行,那么我的SVM在那种非常特殊的情况下工作,但是我没有给它正确的数据(由于均值和方差)...

我做错了什么?

谢谢。

0 个答案:

没有答案