读书笔记 - 机器学习(Cornell) - 第16节 KD树

第16节 KD树


KD Trees


%matplotlib inline

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.patches import Circle
from sklearn.neighbors import KDTree, BallTree

k-NN算法时间复杂度(Time Complexity of k-NN)

考虑 d d d维空间

训练时:k-NN记录每个数据样本的标签,易知再添加一个数据样本的时间复杂度为 O ( d ) O(d) O(d)

测试时:需要计算新数据样本与所有训练数据样本间的距离。

n n n表示训练数据样本数,则训练时间复杂度为 O ( d n ) O(dn) O(dn);分类测试样本时间复杂度也为 O ( d n ) O(dn) O(dn)

为提高精度,需要增大的训练数据集规模( n ≫ 0 n \gg 0 n0),这严重制约测试阶段性能。

目标:使k-NN在测试阶段更快。

KD树(k-dimensional Trees)

KD树的核心在于划分特征空间(partition feature space)。由于大部分数据样本所处分区位于 k k k个最近邻样本之外,因此可不予考虑。

  • 划分方法:

(1)将数据沿某一特征分成两个分区;

(2)记录每个训练样本所处分区。

  • 测试阶段,考虑最近邻情况:

(1)识别测试样本 x t x_t xt所处分区;

(2)查找该分区内 x t x_t xt的最近邻样本(nearest neighbor) x N N x_{NN} xNN

(3)计算 x t x_t xt与分区边界的距离 d w d_w dw

你可能感兴趣的:(读书笔记 - 机器学习(Cornell) - 第16节 KD树)