SVR预测所有功能的价值相同

时间:2019-03-03 10:02:12

标签: python pandas numpy machine-learning scikit-learn

在使用Python和Scikit-learn给出给定的股票n功能的情况下,我正在创建一个基本应用程序来预测股票n + 1天的“平仓”价值

数据框中的示例行如下所示(2000行)

PDF

与该视频https://www.youtube.com/watch?v=SSu00IRRraY类似,他在视频中使用“日期”和“开盘价”。在此示例中,日期是功能,而开盘价是目标。

现在在我的示例中,我的数据集中没有'Dates'值,而是要使用Open,High,Low,Volume数据作为特征,因为我认为这样可以使其更加准确

我正在这样定义自己的功能和目标

       Open     Close    High     Low      Volume     
0      537.40   537.10   541.55   530.47   52877.98  

哪个会返回像这样的df 功能:

features = df.loc[:,df.columns != 'Closing']
targets = df.loc[:,df.columns  == 'Closing']

目标:

       Open      High      Low      Vol from  
29     670.02    685.11    661.09   92227.36

但是我意识到数据需要存储在一个numpy数组中,所以我现在有了这样的功能和目标

       Close
29     674.57

所以现在我的功能看起来像这样

features = df.loc[:,df.columns != 'Closing'].values
targets = df.loc[:,df.columns  == 'Closing'].values

我的目标看起来像这样

[6.70020000e+02 6.85110000e+02 6.61090000e+02 9.22273600e+04
  6.23944806e+07]
 [7.78102000e+03 8.10087000e+03 7.67541000e+03 6.86188500e+04
  5.41391322e+08]

然后我使用

拆分数据
[  674.57]
[ 8042.64]

我试图遵循Scikit-Learn文档,结果如下

X_training, X_testing, y_training, y_testing = train_test_split(features, targets, test_size=0.8)

我假设这将根据给定的测试功能预测Y值,然后可以将它们与实际的y_testing值作图,以了解它们之间的相似程度。但是,预测为每个X_testing功能输出了相同的值。

svr_rbf = svm.SVR(kernel='rbf', C=100.0, gamma=0.0004, epsilon= 0.01 )
svr_rbf.fit(X_training, y_training)
predictions = svr_rbf.predict(X_testing)
print(predictions)

我尝试更改epsilon,c和gamma的值,但这似乎并没有改变预测总是给出相同值的事实

我知道预测股价可能并不准确,但是在将模型应用于各种不同的测试数据时,要获得相同的值我一定做错了事

1 个答案:

答案 0 :(得分:1)

在将SVM用于分类任务之前,应先对功能进行规范化。 SVM通常对非标准化功能很敏感。由于您的第5个功能要比其他4个功能大10,000倍,因此它实际上在您的其他功能中占主导地位。

请查看此链接,该链接非常清楚地说明了您的问题:https://stats.stackexchange.com/questions/57010/is-it-essential-to-do-normalization-for-svm-and-random-forest