我有以下培训数据:
double
以及以下标签(分数):
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]
]
似乎很清楚,第5列和第9列中的值越大,得分越高。
我在提供的训练数据上编写了以下代码,使用了SVR:
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]
但无论以下哪一项用于预测,都不会给出看起来正确的分数。
如果我在训练期间做了以下类似的事情:
rb = RobustScaler()
xScaled = rb.fit_transform(x)
model = SVR(C=1.0, epsilon=0.1)
model.fit(xScaled,y)
然后:
得分= svmModel.predict(testData)
我回到原点附近的东西。
但是我在x中选择一行,将其放入一个名为testData的一行的二维数组中,然后执行:
xScaled = preprocessing.scale(x)
model = SVR(C=1.0, epsilon=0.1)
model.fit(xScaled,y)
我得分错了。事实上,无论我使用哪一行来创建一行的2d数组,我都得到相同的分数。
我做错了什么?如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:1)
1)score = model.predict(rb.fit_transform(testData))
执行上述操作时,您将重新拟合RobustScaler到新数据。这意味着它将扩展到新数据,并且不会与训练数据的比例相匹配。所以结果不会很好。
2)score = model.predict(testData)
在上面,您没有缩放测试数据,因此它与SVC学到的不同。因此,结果也会很糟糕。
您需要做什么: -
score = model.predict(rb.transform(testData))
调用transform()
将根据训练数据比例缩放提供的数据,因此SVC可以更好地预测输出。