用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 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

用 OpenCV 检测图像中各物体大小

在图像中测量物体的大小与计算从相机到物体之间的距离是相似的,在这两种情况下,我们需要定义一个比值,它测量每个给定指标的像素个数。

2881
来自专栏逸鹏说道

验证码识别,发票编号识别

毕业设计做了一个简单的研究下验证码识别的问题,并没有深入的研究,设计图形图像的东西,水很深,神经网络,机器学习,都很难。这次只是在传统的方式下分析了一次。 今...

4449
来自专栏社区的朋友们

3D 图形学基础 (下)

本文主要针对一些对3D有兴趣的同学,普及图形学知识,不涉及深入的技术探讨和样例介绍。对于不是从事相关开发的同学也能了解相关的知识。

4690
来自专栏一棹烟波

全景图转小行星视角投影原理详解

全景图是2:1比例的图片,一般是多张图像拼接而成。全景图2:1的比例可以很方便的映射到球面,而球坐标可以很方便的实现各种有趣的投影。比如小行星,水晶球,局部透视...

542
来自专栏大数据杂谈

【Excel系列】Excel数据分析:抽样设计

一、随机数发生器 1. 随机数发生器主要功能 “随机数发生器”分析工具可用几个分布之一产生的独立随机数来填充某个区域。可以通过概率分布来表示总体中的主体特征。...

2768
来自专栏数说工作室

面板数据与Eviews操作指南(下)

三、动态面板数据及Eviews实现 (1)动态面板数据简介 在现实社会中,很多经济关系是动态的,有时需要引入滞后项去解释这些经济关系。动态面板数据模型,即面板数...

4127
来自专栏懒人开发

(4.5)James Stewart Calculus 5th Edition:Summary of Curve Sketching

其实,上面(D)Asymptotes, 渐近线 的第3个,也提到了 Slant Asymptotes 偏渐近线 这里我们给出定义:

962
来自专栏机器之心

听说你用JavaScript写代码?本文是你的机器学习指南

3716
来自专栏AI科技评论

开发 | 机器学习之确定最佳聚类数目的10种方法

AI科技评论按,本文作者贝尔塔,原文载于知乎专栏数据分析与可视化,AI科技评论获其授权发布。 在聚类分析的时候确定最佳聚类数目是一个很重要的问题,比如kmean...

34512
来自专栏用户2442861的专栏

相似图片搜索的原理

你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。

1141

扫码关注云+社区