【问题标题】:Sklearn svr give wrong results when the training data obvious show a pattern当训练数据明显显示模式时,Sklearn svr 给出错误结果
【发布时间】:2018-04-13 12:14:06
【问题描述】:

我有以下训练数据:

x = [
    [0.914728682,5.217,5,0.217,3.150362319,33.36,35,-1.64,4.220113852],
    [0.885057471,7.793,8,-0.207,3.380911063,46.84,48,-1.16,4.448243115],
    [0.871345029,7.152,7,0.152,3.976205037,44.98,47,-2.02,5.421236592],
    [0.821428571,8.04,8,0.04,2.909880565,52.02,54.5,-2.48,2.824104235],
    [0.931372549,8.01,8,0.01,4.616714697,48.04,48,0.04,9.650462033],
    [0.66367713,5.424,5.5,-0.076,1.37804878,32.6,35.5,-2.9,1.189781022],
    [0.78,8.66,9,-0.34,2.272965879,48.47,55,-6.53,2.564550265],
    [0.227272727,19.55,21,-1.45,1.860133206,128.23,147,-18.77,1.896893491],
    [0.47826087,10.09,8,2.09,1.155519927,74.43,64,10.43,1.169547454],
    [0.652694611,6.775,4,2.775,1.05529595,43.1,30,13.1,1.062885327],
    [0.798561151,3.986,2,1.986,0.656563993,25.38,13,12.38,0.652442159],
    [0.666666667,5.419,3,2.419,1.057985162,34.37,16,18.37,0.981719509],
    [0.5625,7.719,2,5.719,0.6421797,46.91,12,34.91,0.665673336]
]

以及以下标签(分数):

y = [0.237113402,0.168831169,0.104166667,0.086419753,0.063147368,0.016042781,
     0.014814815,0,0,-0.0794,-0.14,-0.1832,-0.2385]

似乎很明显,第 5 列和第 9 列中的值越大,分数越高。

我在提供的训练数据上编写了以下代码,利用 SVR:

rb = RobustScaler()
xScaled = rb.fit_transform(x)
model = SVR(C=1.0, epsilon=0.1)
model.fit(xScaled,y)

但无论我使用以下哪个进行预测,它都没有给出看起来正确的分数。

1 分 = model.predict(rb.fit_transform(testData))

2 分数 = model.predict(testData)

如果我在训练期间执行以下操作:

 xScaled = preprocessing.scale(x)
 model = SVR(C=1.0, epsilon=0.1)
 model.fit(xScaled,y)

然后:
score = svmModel.predict(testData)

我得到了接近原点 y 的东西。

但我在 x 中选择一行,将其放入一个二维数组中,其中一行名为 testData,然后执行以下操作:

score = svmModel.predict(testData)

我得到了错误的分数。事实上,无论我使用 x 中的哪一行来创建具有一行的二维数组,我都得到相同的分数。

我做错了什么?如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

  • 你能发布你的testData吗?
  • 谢谢。就像 [[0.78,8.66,9,-0.34,2.272965879,48.47,55,-6.53,2.564550265]]
  • 问题解决了吗?

标签: python scikit-learn


【解决方案1】:

1) score = model.predict(rb.fit_transform(testData))

当您执行上述操作时,您将 RobustScaler 重新拟合到新数据。这意味着它将被缩放到新数据,并且与训练数据的比例不匹配。所以结果不会好。

2) score = model.predict(testData)

在上面,您没有缩放测试数据,因此它与 SVC 学到的不同。因此,这里的结果也会很糟糕。

你需要做什么:-

score = model.predict(rb.transform(testData))

调用transform() 将根据训练数据的比例缩放提供的数据,因此 SVC 可以更好地预测输出。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2013-10-10
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2015-06-25
    • 2017-11-10
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多