用R语言预测股票价格涨跌—基于KNN分类器

K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。 kNN算法的核心思想是如果一个样本在特征空间相邻的样本中的大多数属中的k个最于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

kNN算法属于非参方法,即不需要假设数据服从某种分布。

kNN算法R语言实现

  1. 载入程序包&读入数据
library(class)

library(dplyr)

library(lubridate)

library(scatterplot3d)

stocks <- read.csv(file.choose())
  1. 数据查看
head(stocks)
summary(stocks[,-1])
cl <- stocks$Increase 
#已知涨跌

colors <- 3-cl

scatterplot3d(stocks[,2:4],color=colors, col.axis=5,            
  col.grid="lightblue", main="scatterplot3d - stocks", pch=20)

数据包由Date、Apple、Google、MSFT、Increase五列数据构成,Increase列表示的是苹果股价当日的涨跌情况。 3D散点图中,红色表示股价上涨,绿色表示下跌。

  1. 数据集划分
stocks$Date <- ymd(stocks$Date)

stocksTrain <- year(stocks$Date) < 2014

predictors <- cbind(lag(stocks$Apple, default = 210.73), 
                    lag(stocks$Google, default = 619.98),                    lag(stocks$MSFT, default = 30.48))

colnames(predictors)=c("Apple","Google","MSFT")

train <- predictors[stocksTrain, ] 
#2014年以前的数据为训练数据

test <- predictors[!stocksTrain, ] 
#2014年以后的数据为测试数据

par(mfrow=c(3,2))

acf(stocks$Apple)

#查看自相关图

pacf(stocks$Apple)

#查看偏相关图

acf(stocks$Google)

pacf(stocks$Google)

acf(stocks$MSFT)

pacf(stocks$MSFT)
  1. 进行KNN算法分类
cl <- stocks$Increase[stocksTrain] 
#已知涨跌

prediction <- knn(train, test, cl, k = 1) 
  #建立kNN预测模型 

table(prediction, stocks$Increase[!stocksTrain])

  #查看预测情况
mean(prediction == stocks$Increase[!stocksTrain])  #计算准确率
## [1] 0.5076923

k=1时,基于KNN分类器的苹果股票价格预测准确率只有50.8%,略强于抛硬币。

  1. 通过蒙特卡洛模拟选出最好的k值
accuracy <- rep(0, 10)

k <- 1:10for(x in k){
  prediction <- knn(predictors[stocksTrain, ], predictors[!stocksTrain, ],                    stocks$Increase[stocksTrain], k = x)


  accuracy[x] <- mean(prediction == stocks$Increase[!stocksTrain])}plot(k, accuracy, type = 'b', col=125,lwd=3)

通过模拟可以发现,当k = 5时,模型的准确率达到了52.5%。此外,我还用BP神经网络做了对比测试,BP神经网络模型的预测准确率只有51.5%,可见,基于KNN分类器的股票价格预测模型既简单又实用。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

教你如何使用深度学习识别交通标志,准确度高达93%

原作者 Priya Dwivedi 编译 CDA 编译团队 本文为 CDA 数据分析师原创作品,转载需授权 自动驾驶已经迎来发展的热潮。自动驾驶车在行驶时,需...

3345
来自专栏大数据文摘

斯坦福CS231N深度学习与计算机视觉第二弹:图像分类与KNN

1524
来自专栏机器之心

从算法到训练,综述强化学习实现技巧与调试经验

选自GitHub 作者:WilliamFalcon 机器之心编译 参与:乾树、黄小天 本文整理自 John Schulman 题为「深度强化学习研究的具体内容...

2686
来自专栏大数据挖掘DT机器学习

分别用sklearn和tensorflow做房价预测

本篇是后面用tensorflow做回归时的一个参照,忍不住要说的是sklearn真是简单好用,要不是他没有卷积cnn等时髦模型,真是不想用其他家的了。 经典的s...

3773
来自专栏大数据挖掘DT机器学习

NLP中自动生产文摘(auto text summarization)

最近几年在人工智能领域中大热的工程技术deep learning,将机器对图像,语音,人类语言的认知能力都提升了不少,前前后后也涌现出不少不仅仅是很cool而且...

4455
来自专栏机器之心

深度 | 如何使用神经网络弹奏出带情感的音乐?

机器之心(海外)原创 作者:Shixin Gu 参与:Joni、Nurhachu Null 神经网络在音乐方面的应用已经不是一个新鲜的话题了。在音频检索领域中...

2738
来自专栏专知

春节充电系列:李宏毅2017机器学习课程学习笔记30之集成学习 (Ensemble Learning)

【导读】我们在上一节的内容中已经为大家介绍了台大李宏毅老师的机器学习课程的Recurrent Neural Network。这一节将主要针对讨论Ensemble...

3375
来自专栏计算机视觉战队

学习迁移架构用于Scalable图像的识别

论文出自Google Brain,是对前一篇论文的改进,前一篇文章讲述了用RNN去搜索一个最好的网络结构,而这篇文章认为之前的搜索空间太大,效果不好,所以改成搜...

3185
来自专栏AI科技大本营的专栏

迁移学习到底是什么?让我们来解读一下杨强、Bengio和龙盛明的论文

作者 | 王晋东不在家 《小王爱迁移》之一:迁移成分分析(TCA)方法简介 之前整理总结迁移学习资料的时候有网友评论,大意就是现在的类似资料大全的东西...

5755

机器学习 - 朴素贝叶斯分类器的意见和文本挖掘

人们倾向于知道他人是如何看待他们和他们的业务的,不管是什么东西,不管是汽车,饭店等产品还是服务本身。如果你知道你的客户如何看待你,那么你可以保持或改善甚至改变你...

2385

扫描关注云+社区