欢迎访问369期货网 369会员登录 注册

当前位置: 主页 > 期货量化

量化交易实战02 - 机器学习在交易中的基本应用(二)机器学习工具的基本使用方法(KNN算法用于分类)

时间:2025-10-15 16:14|来源:369期货网|作者:369期货网|点击:
昨天我们了解了机器学习的概念,对于刚接触机器学习的朋友来说,有一个好消息就是:在Pyhon中有各种各样的第三方库可以直接调用,如scikit-leamn、深度学习框架TensorFlow、Pytorch及Keras等。

今天,西西就带大家来熟悉-下scikit-learn的基本使用方法。
温馨提示:本篇幅较长,本期所讲内容代码都可以用AI生成,这些都是已经被写在各类数据分析教材里面了。


一、KNN算法的基本原理

机器学习算法中,KNN(K-Near-est Neighbor,K最近邻)算得上是较基础且易于理解的算法之一了。它既可以用于分类任务,也可以用于回归任务。

KNN算法的原理十分容易理解:它识别k个最近的数据点(基于欧几里得距离)来进行预测,它分别预测邻域中最频繁的分类或是回归情况下的平均结果。用通俗的话讲,已知过去三个月房地产板块在跌,过去三个月银行板块在涨。现在给你一个公司让你判断他过去三个月股票的走势。通过简短的了解,你发现这家公司主营业务是房地产,企图转型还未实施,这时,你大概率会判断他过去三个月的股价是跌的。

对于回归任务来说,KNN的工作机理也是相似的。例如,你打算去吃一顿饭,在同一家饭店发现菜价都十分接近的菜单。鱼香肉丝的价格是12元,青椒肉丝的价格是10元,而你想吃小煎肉的售价未知,基于这家饭店的菜价都十分相近,你觉得可能小煎肉的价格为11元,即前面两种菜的的均值。

今天我们来逐一演示一下KNN在分类当中的应用,回归就下次演示了。

、KNN算法用于分类

1.载入数据集并查看

scikit-learn内置了一些供大家学习的玩具数据集(toy dataset),其中有些是分类任务的数据,有些是回归任务的数据。

首先西西使用一个最简单的数据集来给大家演示KNN算法在分类中的应用。输入代码如下:

图片
如果程序没有报错,就说明所有的库都已经成功载入。接下来我们就用数据集载入工具加载数据。输入代码如下:
图片
【结果分析】如果朋友们也得到了同样的结果,就说明代码运行成功。可以看到,该数据集存储了若干个键(key),这里我们重点关注一下其中的target和feature_names,因为这两个键对应的分别是样本的分类标签和特征名称。

首先我们看下数据集存储了样本的哪些特征,代码如下:

图片


可以看出,数据集中的样本共有4个特征,分别是sepallength(萼片长度)、sepal width(萼片宽度)、petal length(花瓣长度)和petal width(花瓣宽度)。

下面再来看一下这些样本被分为几类,输入代码如下:

图片

可以发现系统返回了一个数组,数组中的数字有0,1和2。这说明数据集中的样本分为3类,分别用0、1、2这3个数字来表示。

到这里,相信朋友们也已经明白,这个数据集的目的是:根据样本鸢尾花萼片和花瓣的长度及宽度,结合分类标签来训练模型,以便让模型可以预测出某一种鸢尾花属于哪个分类。


2.拆分数据集

下面,我们就来把数据集拆分为训练集和验证集,以便验证模型的准确率。先输入如下代码:

图片

上面的运行结果可以看出,我们将数据集的特征赋值给了X,而将分类标签赋值给了y。通过查看X的形态,可知样本数量共有150个,每个样本有4个特征。

下面来对数据集进行拆分,代码如下:

图片

上面的运行结果可以看到,通过拆分,训练集中的样本数量为112个其余的38个样本则进入了验证集。

3.训练模型并评估准确率

下面训练一个最简单的KNN模型,代码如下:

图片

使用KNN算法训练的分类模型,在训练集中的准确率达到了98%,在验证集中的准确率达到了0.95%。

需要说明的是,在scikit-leam中,KNN可以通过调节n_neighbors参数来改进模型的性能。在不手动指定的情况下,KNN默认的近邻参数n_neighbors为5。那么这个参数是最优的吗?

使用网格搜索法来寻找到模型的最优参数。

图片

运行结果可以看到,当n_neighbors参数为6时,模型的准确率是最高的。

下面我们就来看一下当把n_neighbors设置为6时,模型的准确率。

图片

【结果分析】从上面的代码运行结果可以看到,当把n_neighbors参数设置为6时,模型在训练集中的准确率提高到了96%,可以说倒退了;而在验证集中的准确率保持在100%左右,显著提升、


编辑推荐

Copyright © 2024-2025 成都宁时科技有限公司 版权所有

蜀ICP备2022023994号