请问我用支持向量回归(SVR)为什么预测出来总是正弦曲线?

问题1:试了几组不同的数据,效果都差不多,都是正弦的趋势,并没有很符合原数据的趋势,这是什么原因啊?

代码如下:

from sklearn import svm
import matplotlib.pyplot as plt
import numpy as np
X = [[300], [301], [302], [303], [304], [305], [306], [307], [308], [309], [310], [311], [312], [313], [314], [315], [316], [317], [318], [319],[320],[321], [322], [323], [324], [325], [326], [327], [328], [329], [331], [332], [333], [334], [335], [336], [337], [338], [339], [340], [341], [342], [343], [344], [345], [346], [347], [348], [349], [350], [351], [352], [353], [354], [355], [356], [357], [358], [359], [360]]
y = [1681, 1680, 1678, 1675, 1672, 1670, 1670, 1668, 1666, 1665, 1664, 1664, 1663, 1664, 1666, 1666, 1667, 1669, 1671, 1672, 1673, 1675, 1677, 1679, 1680, 1680, 1684, 1687, 1691, 1693, 1700, 1703, 1706, 1709, 1711, 1712, 1717, 1720, 1722, 1724, 1726, 1729, 1731, 1733, 1736, 1738, 1740, 1741, 1742, 1744, 1746, 1748, 1750, 1751, 1753, 1754, 1756, 1757, 1758, 1759]

regr = svm.SVR()
regr.fit(X, y)
x2=np.random.uniform(300,360,size=100)
x3=x2.reshape(-1,1)
y1 = regr.predict(x3)

print(y1)
plt.title('SVR')
plt.scatter(x3,y1,marker='.')
plt.plot(X,y,marker='o',color='k')

print(x3)

x4=[[330]]
y3=regr.predict(x4)
print('y_predict=', y3)
error=abs(y3-1697)/1697
print('error=', error)

plt.xlabel('A')
plt.ylabel('B')
plt.show()

效果如下:

img

问题2:我的原始数据里的y其实并不是1000多而是1点多,但是我用原始的1点多进行训练,预测出来的都是一条水平线,乘一千倍后训练才得到了上图的预测(蓝点),这个我也不知道是什么原因。
.
以上两个问题求指点,非常感谢!

该回答内容部分引用GPT,GPT_Pro更好的解决问题
SVR(支持向量回归)是一种机器学习模型,可以用来预测数据的趋势。在本例中,经过模型的训练,我们得到的预测值呈正弦曲线趋势。这是因为我们使用的数据量太少,而且数据样本之间存在较大差异,所以模型无法准确地匹配原始数据,所以只能得到一条正弦曲线。

要想得到更加准确的预测结果,我们应该先进行数据的采集,选择尽可能多的数据样本,并且数据之间的差异也要尽量小。然后再进行SVR的训练,将对应的X,Y坐标作为输入,让SVR自动学习X,Y坐标之间的关系。最后我们就可以得到准确的预测值了。

另外,如果在使用SVR时只想得到正弦曲线,可以使用正弦函数作为输入参数,将正弦函数作为SVR的输入,就可以得到正弦函数形式的预测结果。

总之,SVR是一种有效的机器学习方法,通过正确使用SVR,可以得到准确的预测结果。
如果回答有帮助,望采纳。