我正在使用Python和Scikit- n+1创建一个基本的应用程序来预测股票在第n天的收盘价
我的dataframe中的样例行如下所示(2000行)
Open Close High Low Volume
0 537.40 537.10 541.55 530.47 52877.98
类似于这个视频https://www.youtube.com/watch?v=SSu00IRRraY,他使用“日期”和“公开价格”。在本例中,日期是功能,Open price是目标。
现在,在我的示例中,我的数据集中没有'Dates‘值,而是希望使用Open、High、Low、Volume data作为要素,因为我认为这样会更准确
我是这样定义我的特征和目标的
features = df.loc[:,df.columns != 'Closing']
targets = df.loc[:,df.columns == 'Closing']
这将返回如下所示的df:
Open High Low Vol from
29 670.02 685.11 661.09 92227.36
目标:
Close
29 674.57
然而,我意识到数据需要在numpy数组中,所以我现在像这样获取我的特征和目标
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]
然后,我使用以下命令拆分数据
X_training, X_testing, y_training, y_testing = train_test_split(features, targets, test_size=0.8)
我尝试遵循Scikit-Learn文档,其结果如下
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)
我假设这将预测给定测试特征的Y值,然后我可以将其与实际的y_testing值进行比较,看看它们有多相似。但是,预测将为每个X_testing特征打印相同的值。
[3763.84681818 3763.84681818 3763.84681818 3763.84681818 3763.84681818
我尝试更改epsilon、c和gamma的值,但这似乎改变不了预测总是给出相同值的事实
我知道预测股票价格可能不准确,但在将模型应用于各种不同的测试数据时,我肯定做错了什么,以获得相同的值。
发布于 2019-03-04 19:18:22
在使用SVM进行分类任务之前,应该对特征进行归一化。支持向量机通常对非归一化特征敏感。因为你的第五个特征比你的其他四个特征大一万倍,所以从字面上看它支配着你的其他特征。
看看这个链接,它很清楚地解释了你的问题:https://stats.stackexchange.com/questions/57010/is-it-essential-to-do-normalization-for-svm-and-random-forest
https://stackoverflow.com/questions/54967651
复制相似问题