【问题标题】:Why are all of my results from SVM the same in scikit learn?为什么我在 scikit learn 中从 SVM 得到的所有结果都相同?
【发布时间】:2017-07-26 16:29:43
【问题描述】:

我正在尝试使用 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]])

【问题讨论】:

  • 为什么“train_y”有两列?
  • Train_y 有一个索引列

标签: machine-learning scikit-learn svm libsvm


【解决方案1】:

从预处理开始!

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

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

之后的下一步是参数调整(C、gamma 和 co.)。这通常由GridSearch 完成。 但我通常希望人们在尝试 Kernel-SVM 之前先尝试一个简单的 LinearSVM(更少的超参数、更少的计算时间、更好的非最优参数选择泛化)

【讨论】:

  • 谢谢!我尝试进行网格搜索,但这需要很长时间。任何加速它的最佳实践。
  • 当然从粗网格和良好的初始值开始。阅读文档。它们非常好,并根据分类器推荐一些值。但在修复预处理之前不要这样做。
猜你喜欢
  • 2019-09-22
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多