Day 5:KNN算法与相似K线匹配

张开发
2026/4/15 1:28:04 15 分钟阅读

分享文章

Day 5:KNN算法与相似K线匹配
Day 5KNN算法与相似K线匹配 目录KNN算法基础原理距离度量方法详解K值选择策略维度灾难与解决方案KNN的优缺点与变体KNN在量化交易中的应用第一部分KNN算法基础原理1.5小时理论1.1 什么是KNNK-近邻K-Nearest Neighbors是一种基于实例的监督学习算法不需要显式训练过程。核心思想如果一个样本在特征空间中的K个最相似的样本中的大多数属于某个类别则该样本也属于这个类别。KNN的三个基本要素K值选择多少个近邻距离度量如何计算样本间的相似度决策规则如何根据近邻做预测分类用投票回归用平均1.2 KNN算法流程# 伪代码defknn_predict(new_sample,training_data,labels,K):# 1. 计算新样本与所有训练样本的距离distances[]fori,train_sampleinenumerate(training_data):distcalculate_distance(new_sample,train_sample)distances.append((dist,labels[i]))# 2. 按距离排序取前K个distances.sort(keylambdax:x[0])k_nearestdistances[:K]# 3. 投票/平均得到预测结果ifclassification:returnmajority_vote([labelfor_,labelink_nearest])else:returnmean([labelfor_,labelink_nearest])1.3 分类 vs 回归任务类型决策规则示例分类多数投票预测涨/跌回归加权平均预测收益率数值加权KNN距离越近的样本权重越大weight1/(distanceepsilon)第二部分距离度量方法详解2.1 常用距离公式距离名称公式特点适用场景欧氏距离∑i1n(xi−yi)2\sqrt{\sum_{i1}^{n}(x_i - y_i)^2}∑i1n​(xi​−yi​)2​最常用直观特征尺度一致曼哈顿距离$\sum_{i1}^{n}x_i - y_i$切比雪夫距离$\max_ix_i - y_i$闵可夫斯基距离$(\sumx_i - y_ip){1/p}$余弦相似度$\frac{x·y}{x马氏距离(x−y)TΣ−1(x−y)\sqrt{(\boldsymbol{x} - \boldsymbol{y})^T\Sigma^{-1}(\boldsymbol{x} - \boldsymbol{y})}(x−y)TΣ−1(x−y)​考虑特征相关性尺度无关特征相关的多元数据汉明距离∑i1nI(xi≠yi)\sum_{i1}^n \mathbb{I}(x_i \ne y_i)∑i1n​I(xi​yi​)衡量等长序列的位差异分类/二进制数据动态时间规整(DTW)$\min_{\pi} \sqrt{\sum_{(i,j) \in \pi} d(x_i, y_j)^2} $处理不等长、时间偏移序列语音、手势、金融时间序列2.2 欧氏距离详解二维空间d(x1−y1)2(x2−y2)2 d \sqrt{(x_1 − y_1)^2 (x_2 − y_2)^2}d(x1​−y1​)2(x2​−y2​)2​n维空间d∑i1n(xi−yi)2 d \sqrt{\sum_{i1}^{n}(x_i − y_i)^2}di1∑n​(xi​−yi​)2​特点对特征缩放敏感需要所有特征在同一量纲2.3 曼哈顿距离详解d∑i1n∣xi−yi∣ d \sum_{i1}^n |x_i - y_i|di1∑n​∣xi​−yi​∣特点计算更快无平方根对异常值更鲁棒适合高维数据2.4 马氏距离 (Mahalanobis Distance)详解(x−y)TΣ−1(x−y) \sqrt{(\boldsymbol{x} - \boldsymbol{y})^T\Sigma^{-1}(\boldsymbol{x} - \boldsymbol{y})}(x−y)TΣ−1(x−y)​公式中的Σ\SigmaΣ是数据的协方差矩阵。它通过Σ−1\Sigma^{-1}Σ−1对数据进行“白化”处理消除了量纲和相关性的影响。特点尺度无关衡量一个点与一个数据分布之间的距离而不仅仅是点与点之间的距离协方差矩阵为单位矩阵时退化为欧氏距离2.5 汉明距离 (Hamming Distance)详解∑i1nI(xi≠yi) \sum_{i1}^n \mathbb{I}(x_i \ne y_i)i1∑n​I(xi​yi​)公式中I(⋅)\mathbb{I}(\cdot)I(⋅)是指示函数当括号内条件为真时值为1否则为0。它计算的是两个等长序列在对应位置上不同元素的总数。特点专门用于衡量离散序列的差异计算简单高效2.6 动态时间规整 (Dynamic Time Warping, DTW)min⁡π∑(i,j)∈πd(xi,yj)2 \min_{\pi} \sqrt{\sum_{(i,j) \in \pi} d(x_i, y_j)^2}πmin​(i,j)∈π∑​d(xi​,yj​)2​这是一个优化问题。它寻找两个时间序列XXX和YYY之间的一个最优对齐路径π\piπ使得沿该路径的累积距离通常用欧氏距离d(xi,yj)d(x_i,y_j)d(xi​,yj​)最小。特点通过非线性地对齐时间轴DTW能够有效处理序列长度不同、速度不一或存在相位偏移的问题这是传统欧氏距离无法做到的。2.7 距离度量选择指南数据特征推荐距离原因连续值尺度一致欧氏距离几何直观连续值尺度不同马氏距离考虑协方差二值特征汉明距离匹配位数时间序列动态时间规整(DTW)处理时间偏移文本/模式余弦相似度忽略幅度第三部分K值选择策略3.1 K值的影响K值特点风险K太小(如K1)对噪声敏感过拟合决策边界复杂K太大决策边界平滑欠拟合忽略局部模式K适中平衡偏差和方差需要调参3.2 选择K值的方法1. 经验法则K≈NK\approx \sqrt NK≈N​其中NNN是样本数2. 交叉验证fromsklearn.model_selectionimportcross_val_scoreforkinrange(1,31):knnKNeighborsClassifier(n_neighborsk)scorescross_val_score(knn,X,y,cv5)print(fK{k}, Accuracy{scores.mean():.4f})3. 肘部法则选择使误差下降趋缓的K值3.3 奇偶性考虑避免平局通常选择奇数K值二分类时# 示例K2时可能出现1:1平局# 解决方案使用加权投票或选择奇数K第四部分维度灾难4.1 什么是维度灾难随着特征维度增加数据变得稀疏距离计算失去意义。表现所有点之间的距离趋近相等需要指数级增长的样本量4.2 维度灾难的数学解释高维球体体积单位球体积随维度增加趋近0大部分体积集中在表面距离分布在高维空间中最近邻和最远邻的距离比趋近1# 可视化高维空间中的距离分布importnumpyasnpimportmatplotlib.pyplotaspltdefhigh_dim_distance_ratio(dimensions,n_points1000):ratios[]fordindimensions:pointsnp.random.randn(n_points,d)distances[]foriinrange(min(100,n_points)):distnp.linalg.norm(points[i]-points,axis1)min_distnp.min(dist[dist0])max_distnp.max(dist)ratios.append(min_dist/max_dist)ratios.append(np.mean(ratios))returnratios4.3 缓解维度灾难的方法方法原理实现特征选择只保留重要特征方差阈值、互信息特征降维投影到低维空间PCA、t-SNE距离加权使用更适合高维的距离余弦相似度增加样本需要指数级增长数据增强近似方法使用ANN近似最近邻KD-Tree、LSH4.4 有效维度 vs 名义维度名义维度原始特征数量有效维度数据实际占据的维度常小于名义维度# 使用PCA分析有效维度fromsklearn.decompositionimportPCA pcaPCA()pca.fit(X)cumsum_variancenp.cumsum(pca.explained_variance_ratio_)effective_dimnp.argmax(cumsum_variance0.95)1print(f有效维度保留95%方差:{effective_dim})第五部分KNN的优缺点与变体5.1 优点优点说明简单直观无需训练易于理解无假设不对数据分布做假设多用途分类、回归、异常检测增量学习新数据直接加入5.2 缺点缺点说明解决方案计算量大预测时需计算所有距离KD-Tree、Ball Tree内存消耗需要存储所有训练数据原型选择维度灾难高维性能下降降维、特征选择对噪声敏感异常值影响大加权KNN5.3 KNN变体1. 加权KNN# 距离越近权重越大weights1/(distances1e-5)predictionweighted_vote(labels,weights)2. Radius Neighbors# 固定半径内的所有点fromsklearn.neighborsimportRadiusNeighborsClassifier rnnRadiusNeighborsClassifier(radius1.0)3. 编辑KNN (ENN)移除错误分类的样本减少噪声4. 压缩KNN (CNN)选择原型样本减少存储第六部分KNN在量化交易中的应用6.1 典型应用场景应用描述特征相似K线匹配找历史相似形态收益率序列市场状态识别分类当前市场环境技术指标组合配对交易找相似股票基本面因子异常检测识别异常波动量价特征6.2 相似K线匹配原理核心思想历史会重演。找到与当前K线形态最相似的过去时间段观察其后续走势作为参考。特征构造N日收益率序列N日价格归一化序列技术指标序列应用方式找到K个最相似的日期统计这些日期的后续走势作为交易决策的参考6.3 注意事项过拟合风险相似不等于因果市场环境变化可能导致模式失效参数敏感性N观察窗口K近邻数量距离度量方式验证方法滚动回测样本外测试

更多文章