为什么我的所有SVM结果都与scikit相同?

时间:2017-03-06 17:22:58

标签: machine-learning scikit-learn svm libsvm

我正在尝试使用scikit learn计算多类数据集的概率。但是,出于某种原因,我对每个例子都有相同的概率。知道发生了什么事吗?这与我的模型,我对图书馆的使用或其他什么有关吗?感谢任何帮助!

svm_model = svm.SVC(probability=True, kernel='rbf',C=1, decision_function_shape='ovr', gamma=0.001,verbose=100)
svm_model.fit(train_X,train_y)
preds= svm_model.predict_proba(test_X)

train_X看起来像这样

array([[2350, 5550, 2750.0, ..., 23478, 1, 3],
       [2500, 5500, 3095.5, ..., 23674, 0, 3],
       [3300, 6900, 3600.0, ..., 6529, 0, 3],
       ..., 
       [2150, 6175, 2500.0, ..., 11209, 0, 3],
       [2095, 5395, 2595.4, ..., 10070, 0, 3],
       [1650, 2850, 2000.0, ..., 25463, 1, 3]], dtype=object)

train_y看起来像这样

0        1
1        2
10       2
100      2
1000     2
10000    2
10001    2
10002    2
10003    2
10004    2
10005    2
10006    2
10007    2
10008    1
10009    1
1001     2
10010    2

test_X看起来像这样

array([[2190, 3937, 2200.5, ..., 24891, 1, 5],
       [2695, 7000, 2850.0, ..., 5491, 1, 4],
       [2950, 12000, 4039.5, ..., 22367, 0, 4],
       ..., 
       [2850, 5200, 3000.0, ..., 15576, 1, 1],
       [3200, 16000, 4100.0, ..., 1320, 0, 3],
       [2100, 3750, 2400.0, ..., 6022, 0, 1]], dtype=object)

我的结果看起来像

array([[ 0.07819139,  0.22727628,  0.69453233],
       [ 0.07819139,  0.22727628,  0.69453233],
       [ 0.07819139,  0.22727628,  0.69453233],
       ..., 
       [ 0.07819139,  0.22727628,  0.69453233],
       [ 0.07819139,  0.22727628,  0.69453233],
       [ 0.07819139,  0.22727628,  0.69453233]])

1 个答案:

答案 0 :(得分:3)

从预处理开始!。

将数据标准化为零均值和单位差异非常重要。 scikit-learn文档说this

  

支持向量机算法不是规模不变的,因此强烈建议您扩展数据。例如,将输入向量X上的每个属性缩放为[0,1]或[-1,+ 1],或将其标准化为均值0和方差1.请注意,必须将相同的缩放应用于测试向量获得有意义的结果有关缩放和规范化的更多详细信息,请参阅预处理数据一节

此后的下一步是参数调整(C,gamma和co。)。这通常由GridSearch完成。 但我通常希望人们在尝试使用Kernel-SVM之前先尝试一个简单的LinearSVM(参数越少,计算时间越少,对非最佳参数选择的推广越好)