用R语言预测股票价格涨跌—基于KNN分类器
时间:2022-05-04
本文章向大家介绍用R语言预测股票价格涨跌—基于KNN分类器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。 kNN算法的核心思想是如果一个样本在特征空间相邻的样本中的大多数属中的k个最于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。
kNN算法属于非参方法,即不需要假设数据服从某种分布。
kNN算法R语言实现
- 载入程序包&读入数据
library(class)
library(dplyr)
library(lubridate)
library(scatterplot3d)
stocks <- read.csv(file.choose())
- 数据查看
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散点图中,红色表示股价上涨,绿色表示下跌。
- 数据集划分
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)
- 进行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%,略强于抛硬币。
- 通过蒙特卡洛模拟选出最好的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分类器的股票价格预测模型既简单又实用。
- 深入解析快速排序算法的原理及其Go语言版实现
- Hadoop3.0: YARN Resource配置说明
- GO语言利用K近邻算法实现小说鉴黄
- Why Spring Boot
- 如何使用HammerDB进行MySQL基准测试
- 一个不可思议的MySQL慢查分析与解决
- Apache Spark 2.2中基于成本的优化器(CBO)
- golang的HTTP基本认证机制实例详解
- hdu----(3065)病毒侵袭持续中(AC自动机)
- Spark机器学习库(MLlib)指南之简介及基础统计
- 监控利器之 Prometheus
- C线程同步/异步
- Spring-Security-入门(一):登录与退出
- Shell系列-Shell概述
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解Laravel5.6通过路由进行API版本控制的简单方法
- php+layui数据表格实现数据分页渲染代码
- thinkPHP框架乐观锁和悲观锁实例分析
- PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
- laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
- Laravel框架实现即点即改功能的方法分析
- PHP使用PDO实现mysql防注入功能详解
- laravel接管Dingo-api和默认的错误处理方式
- PHP接入微信H5支付的方法示例
- PHP中用Trait封装单例模式的实现
- laravel 解决Validator使用中出现的问题
- php文件上传原理与实现方法详解
- PHP常见的序列化与反序列化操作实例分析
- Laravel jwt 多表(多用户端)验证隔离的实现
- Laravel实现通过blade模板引擎渲染视图