Code前端首页关于Code前端联系我们

机器学习使用numpy编写KNN算法,预测价格走势

terry 2年前 (2023-09-27) 阅读数 63 #数据结构与算法

KNN算法介绍

KNN算法其实是中国谚语智慧的体现:“鸟聚人聚” ,是一种聚类分析方法,也是目前最简单的无监督学习方法。

我们的日常生活都有这样的结局。身边有朋友都喜欢喝酒的人,才能成为喜欢喝酒的人。身边的朋友认为身边有朋友都喜欢喝酒的人,可能就是喜欢喝酒的人。认为自己的朋友都喝酒的人可能就是喝酒的人。

基于这个逻辑,如果我们现在有几个点分布在二维平面上:

机器学习用numpy撰写KNN算法 并预测价格走势

现在突然出现一个颜色未知的点(显然是黑色)

机器学习用numpy撰写KNN算法 并预测价格走势

这对我们来说很自然,不自觉地我认为这个点

是蓝色的!

好吧好吧,别这样。我们可以讨论一下。其实正常人肯定认为此时的颜色应该是红色。

机器学习用numpy撰写KNN算法 并预测价格走势

这个聚类思想可以应用到很多分类问题上,比如预测股票价格的未来走势(醒醒,随便说一句,如果准确率高的话,我还在这里写文章吗?)

该方法严格的数学表达式是:首先确定距离测量方法。其实数学中的距离测量方法有很多,比如切比雪夫距离、欧几里得距离、曼哈顿距离等。这些距离实际上对应的是一个称为范数的数学概念。由于本文不是数学讲座,我们也是靠流量点击养家糊口,所以就不一一描述了。这里给出欧几里得距离(L2-范数)的计算方法

对于 x ∈ Rn 存在 x, x1, x2 ∈ 的集合 X 读者可能会开始骂,试图搞点神秘,这不是吗n维空间中点的直线距离?没错,L2范数对应的是空间中点的线性距离。根据分类目标的不同,我们采用不同的距离测量方法来适应样本的独特特征。但一般直线距离就够了。毕竟我不是魔鬼,L2范数已经有相当不错的数学性质了。比如连续的、可微的……跑题了、咳……

既然我们刚刚理清了距离的概念,那么当我们有了非常完整的样本后,完整的特征标签就准备好了。当我们想要对一个新的点或者一些样本进行分类时,我们可以逐一计算新样本与已知样本点之间的距离,然后取距离该点最近的K个。知道测试。统计这些已知样本点对应的标签数量,选择出现次数最多的标签作为新样本点的分类。

当然这个K参数是你自己选择的。一个小技巧是尽量避免 K 参数是标签集数量的倍数。试过之后你就知道原因了。

KNN算法的优点是:对病理数据不敏感(毕竟是取K数据,一两个病理数据基本不会影响病理数据。有的家长一定要尝试一下,不得不问:如果所有样本都生病了怎么办?亲,建议殴打给你样本数据的人)分类准确率比较高对于数据没有任何先决条件要求(例如,约束服从XX分布...金融分析师最喜欢的东西ORZ)

KNN的缺点:①计算复杂度和计算时间高对于大样本。

KNN算法在实践中

1长②边缘样本的分类精度明显下降。选择目标:CSI 800

2。选择特征:5日均线、5日价格波动、日内交易量

3。分类目标:当日获取数据后3天回报率,正值标记为1,负值标记为-1,0变化标记为0

4。特征处理:对不同维度的数据进行标准化

机器学习用numpy撰写KNN算法 并预测价格走势

5。算法实现: 导入需要的库

机器学习用numpy撰写KNN算法 并预测价格走势

获取价格,计算三天退货率并标记数据

机器学习用numpy撰写KNN算法 并预测价格走势

提取函数值并合并统一示例和自己的训练测试

机器学习用numpy撰写KNN算法 并预测价格走势

定义计算 L2-norm 的方法

机器学习用numpy撰写KNN算法 并预测价格走势

预测和评估性能

机器学习用numpy撰写KNN算法 并预测价格走势

6。训练结果:

每个参数下最终全市场训练准确率,平均收敛到53.6%。虽然是平均水平,但是比随机样本好太多了

值得一提的是……emmmm,一只股票的预测准确率居然达到了100%……这明显是样本量啊。如果漏掉了,正好被覆盖了,不过没关系,只要你至少知道这个方法就可以了。

作者:刘建涛

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门