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

相关文章

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

数据处理的统计学习(scikit-learn教程)

Scikit-learn 是一个紧密结合Python科学计算库(Numpy、Scipy、matplotlib),集成经典机器学习算法的Python模块。 一、统...

4585
来自专栏梦里茶室

CNCC2017中的深度学习与跨媒体智能

转载请注明作者:梦里茶 目录 机器学习与跨媒体智能 传统方法与深度学习 图像分割 小数据集下的深度学习 语音前沿技术 生成模型 基于贝叶斯的视觉信息编解码 ...

2607
来自专栏机器学习算法原理与实践

文本主题模型之非负矩阵分解(NMF)

    在文本主题模型之潜在语义索引(LSI)中,我们讲到LSI主题模型使用了奇异值分解,面临着高维度计算量太大的问题。这里我们就介绍另一种基于矩阵分解的主题模...

743
来自专栏州的先生

Python AI极简入门4:使用机器学习回归模型预测房价

1607
来自专栏李智的专栏

斯坦福CS231n - CNN for Visual Recognition(8)-lecture6学习率更新、超参数调优

  训练深度网络时,让学习率随着时间退火通常很有帮助。如果学习率很高,系统的动能就过大,参数向量就会无规律地跳动,不能够稳定到损失函数更深更窄的部分去。

762
来自专栏SimpleAI

【DL碎片1】神经网络参数初始化的学问

从【DL笔记1】到【DL笔记N】,以及【DL碎片】系列,是我学习深度学习一路上的点点滴滴的记录,是从Coursera网课、各大博客、论文的学习以及自己的实践中总...

734
来自专栏大数据文摘

史上最全!27种神经网络简明图解:模型那么多,我该怎么选?

1433
来自专栏量化投资与机器学习

【Python机器学习】系列五决策树非线性回归与分类(深度详细附源码)

查看之前文章请点击右上角,关注并且查看历史消息 所有文章全部分类和整理,让您更方便查找阅读。请在页面菜单里查找。 相关内容:(点击标题可查看原文) 第1章 机...

3076
来自专栏机器学习算法与Python学习

支持向量机之最小二乘(LS)-------6

上次了解了核函数与损失函数之后,支持向量机的理论已经基本完成,今天将谈论一种数学优化技术------最小二乘法(Least Squares, LS)。现在引用一...

4219

跨语言嵌入模型的调查

注意:如果您正在查找调查报告,此博客文章也可作为arXiv上的一篇文章。

27710

扫码关注云+社区