大规模最近邻数据挖掘的高效模型选择
1. 未知 K* 下的执行
算法 1 和算法 2 都需要 K 作为输入。但在一些应用中,k 的合理上限是未知的。不过,我们可以对这两个算法进行修改,以动态确定合适的 K 值。
首先引入一个谓词 nextk(),它会检查到目前为止的交叉验证结果,只要值得检查更大的 k 值,就返回 true。后续分析假设 nextk() 的运行时间可以忽略不计。
1.1 修改算法以确定 K*
- 算法 1 的修改 :将 “for k = 1 to K do” 替换为 “while nextk() do”,这样既支持 K 已知的情况,也支持需要动态确定 K 的情况。例如,当 K = √n 时,只要 k ≤ √n,nextk() 就返回 true;在 K* 未知的情况下,只要 k ≤ argmini loss(i) + 15,nextk() 就返回 true。
- 算法 2 的修改 :由于算法 2 假设 K 已知,我们在其外部添加一个循环来选择 K ,运行算法 2,然后调用 nextk() 来判断 K 是否足够大。如果不够大,外层循环将 K 加倍并重复。这个包装器可以从先验知识建议的 K 值开始,否则从 K = 1 开始。
我们定义 K N(K O)为算法 1(2)中考虑的 k 的最大值。注意,K N ≤ K O,因为 K
超级会员免费看
订阅专栏 解锁全文
898

被折叠的 条评论
为什么被折叠?



