在 R 中使用 SVM 进行股票预测 + 新闻情绪?
Posted
技术标签:
【中文标题】在 R 中使用 SVM 进行股票预测 + 新闻情绪?【英文标题】:Stock prediction + news sentiment with SVM in R? 【发布时间】:2019-11-16 03:18:18 【问题描述】:我想在 R 中与 SVM 一起预测股票价格和新闻情绪得分,以查看新闻是否对股票价格及其预测产生影响。我读到支持向量机(svm)是解决这个问题的一种很好的机器学习方法。我有一栏代表股票和新闻的日期,一栏代表当天的股价,四栏代表基于不同词汇的情绪得分。我想先用其中一个词典进行测试,如果模型有效,再尝试另一个。数据集包括在下面。我找到了一些使用 python 的示例,但找不到 R 的内容。我喜欢使用 e1071 package
中的 svm()
函数
我将数据分成训练集和测试集:
sample <- sample(nrow(sentGI),nrow(sentGI)*0.70)
df.trainGI = sentGI[sample,]
df.testGI = sentGI[-sample,]
我已经尝试过这个 SVM 代码,但我的错误预测率为 100
plot(df.trainGI$GSPC.Close, df.trainGI$SentimentGI, pch = 19, col = c("red", "blue"))
svm_model_GI <- svm(SentimentGI.Class ~ ., df.trainGI)
print(svm_model_GI)
plot(svm_model_GI, df.trainGI)
svm_pred_GI <- predict(svm_model_GI, newdata = df.testGI, type="response")
rmse <- sqrt(mean((svm_pred_GI - df.testGI$GSPC.Close)^2))
rmse
我在这里做错了什么?希望有人能帮助我!
Dataset
【问题讨论】:
【参考方案1】:您正在使用模型准确性来评估模型。准确性用于分类问题,但您的响应变量是连续的。您应该使用 RMSE。
pred <- predict(radial.svm, newdata=df.test, type='response')
rmse <- sqrt(mean((pred - df.test$GSPC.Close)^2))
rmse
来自 cmets 的继续:
第一个图 GSPC.Close 与日期(左)和第二个图 SentimentGI 与日期(右)。请注意,股票价格通常会随着时间的推移而上涨,而情绪在同一时间范围内的斜率为 0。这告诉你什么?
【讨论】:
感谢您的回复。我尝试了您的代码,但得到了 1816.42 的 rmse。我将分类列的类更改为数字,以便预测代码起作用。但我猜有些东西出了问题。我更新了我使用的代码以及我使用的数据集,也许你有一个想法。 如果我将我的SentimentGI.Class
列更改为因子,我可以打印 svm 分类,它似乎工作良好,但预测代码不是工作。收到 "-" not meaningful for factors
的错误
而且我还需要计算准确度,以便了解可以根据财经新闻预测股票价格的百分比。研究人员总是计算该度量值。
现在你正在解决一个不同的问题。你需要决定你的响应变量是什么。例如,在您的新代码中,您将响应变量 SentimentGI.Class
作为分类变量,因此您不会使用用于连续变量的 RMSE。此外,您在计算 RMSE 时将SentimentGI.Class
与df.testGI$GSPC.Close
进行比较。最后,你是怎么得到SentimentGI.Class
的?如果它来自SentimentGI
,那么您的带有SentimentGI.Class ~ .
的模型需要排除此变量。确定您要回答的问题是情绪评分还是股价?
你真的帮了我很多,我真的很感激。我从SentimentGI
得到SentimentGI.Class
。我检查了summary function
SentimentGI
的中位数是多少,基于此我决定所有values < the median
都是0
和更大的1
。但是如果我的想法是错误的,我们可以做不同的事情,我只是这个领域的新手,知道的不多。我想回答这个问题:基于财经新闻的股价预测。所以我想看看当包含新闻文章(基于情绪得分)时,股票预测的准确性有多高。以上是关于在 R 中使用 SVM 进行股票预测 + 新闻情绪?的主要内容,如果未能解决你的问题,请参考以下文章
如何去除 sklearn 线性 SVM 中 10% 最具预测性的特征
在Kaggle的使用新闻预测股票涨跌的AI 建模竞赛(2-Sigma 赞助)