kNN 的数学表达式

kNN 是机器学习的基础算法. 程序容易写, 但要用数学式子来表达, 却有一定难度. 今天我们就来杠一下吧.

1. 基本符号

Table 1. Notations.

符号涵义
U = { x 1 , … , x n } \mathbf{U} = \{x_1, \dots, x_n\} U={x1,,xn}样本集
δ i j = δ ( x i , x j ) \delta_{ij} = \delta(x_i, x_j) δij=δ(xi,xj) x i x_i xi x j x_j xj 的距离
δ B ( x i , x j ) \delta_{\mathbf{B}}(x_i, x_j) δB(xi,xj)使用属性子集 B \mathbf{B} B x i x_i xi x j x_j xj 的距离
d ( x i ) d(x_i) d(xi) x i x_i xi 的决策属性值, 即类别

说明: 由于 d d d 要用于表示决策属性, 距离只好用 δ \delta δ. 也可以考虑换成 d i s dis dis 之类.

2. 方案一: 刚好考虑 k k k 个邻居

作为 k k kNN 的基本方案, 邻居刚好考虑 k k k 个.

2.1 邻域的表示

对于 x ∉ U x \not\in \mathbf{U} xU, 由于它到不同样本的距离可能相等, 其 k k k 个邻居并不一定唯一, 定义如下:

Definition 1. any X ⊆ U \mathbf{X} \subseteq \mathbf{U} XU is a set of k k k-nearest neighbors of x ∉ U x \not\in \mathbf{U} xU iff

  1. ∣ X ∣ = k |\mathbf{X}| = k X=k;
  2. ∀ x i ∈ X \forall x_i \in \mathbf{X} xiX and x j ∈ U ∖ X x_j \in \mathbf{U} \setminus \mathbf{X} xjUX, δ ( x , x i ) ≤ δ ( x , x j ) \delta(x, x_i) \leq \delta(x, x_j) δ(x,xi)δ(x,xj).

换种写法:
The set family of all k k k-nearest neighbors of x ∉ U x \not\in \mathbf{U} xU is given by
T k ( x , U ) = { X ⊆ U ∣ ∣ X ∣ = k , ∀ x i ∈ X  and  x j ∈ U ∖ X , d i s ( x , x i ) ≤ d i s ( x , x j ) } , (1) \Tau_k(x, \mathbf{U}) = \{\mathbf{X} \subseteq \mathbf{U} \vert |\mathbf{X}| = k, \forall x_i \in \mathbf{X} \textrm{ and } x_j \in \mathbf{U} \setminus \mathbf{X}, dis(x, x_i) \leq dis(x, x_j)\}, \tag{1} Tk(x,U)={XUX=k,xiX and xjUX,dis(x,xi)dis(x,xj)},(1)
where ∣ ⋅ ∣ \vert \cdot \vert denotes the cardinality of a set.

下面来定义比 x i x_i xi 更靠近 x x x 的集合.
The set of instances that are closer to x x x than x i x_i xi is given by
C ( x , x i , U ) = { x j ∈ U ∣ δ ( x , x j ) < δ ( x , x i ) } . C(x, x_i, \mathbf{U}) = \{x_j \in \mathbf{U} \vert \delta(x, x_j) < \delta(x, x_i)\}. C(x,xi,U)={xjUδ(x,xj)<δ(x,xi)}.

如果想要 k k k-近邻的唯一性, 就需要加一个条件.
Definition 2. Suppose that δ ( x , x i ) \delta(x, x_i) δ(x,xi) is different for any x i ∈ U x_i \in \mathbf{U} xiU. The set of k k k-nearest neighbors of x x x is given by
τ k ( x , U ) = { x i ∈ U ∣ ∣ C ( x , x i , U ) ∣ < k } . (2) \tau_k(x, \mathbf{U}) = \{x_i \in \mathbf{U} \vert |C(x, x_i, \mathbf{U})| < k\}. \tag{2} τk(x,U)={xiUC(x,xi,U)<k}.(2)

2.2 投票过程的表示

根据邻域进行投票, 就可以获得支持率最高的类, 所为最终的分类.

p ( x , τ k ( x , U ) ) = arg max ⁡ c ∣ { x i ∈ τ k ( x , U ) ∣ d ( x i ) = c } ∣ . (3) p(x, \tau_k(x, \mathbf{U}) ) = \argmax_{c}\vert \{x_i \in \tau_k(x, \mathbf{U}) \vert d(x_i) = c\} \vert. \tag{3} p(x,τk(x,U))=cargmax{xiτk(x,U)d(xi)=c}.(3)

注意到这里的值其实也不是唯一的, 因为得数最多的类别可能不止一个.

2.3 鹏鹏提供的方式

标签为 c c c 的实例集合为:
D c ( U ) = { x i ∈ U ∣ d ( x i ) = c } . (4) D_c(\mathbf{U}) = \{x_i \in \mathbf{U} \vert d(x_i) = c\}. \tag{4} Dc(U)={xiUd(xi)=c}.(4)

因此
p ( x , τ k ( x , U ) ) = arg max ⁡ c ∣ { τ k ( x , U ) ∩ D c ( U ) } ∣ . (5) p(x, \tau_k(x, \mathbf{U}) ) = \argmax_{c}\vert \{\tau_k(x, \mathbf{U}) \cap D_c(\mathbf{U})\} \vert. \tag{5} p(x,τk(x,U))=cargmax{τk(x,U)Dc(U)}.(5)
甚至
p ( x , τ k ( x , U ) ) = arg max ⁡ c ∣ { D c ( τ k ( x , U ) ) } ∣ . (6) p(x, \tau_k(x, \mathbf{U}) ) = \argmax_{c}\vert \{D_c(\tau_k(x, \mathbf{U}))\} \vert. \tag{6} p(x,τk(x,U))=cargmax{Dc(τk(x,U))}.(6)

3. 方案二: 处理距离相等更好的方式

假设班上有 1 名同学考了 100 分, 3 名同学考了 99 分, 其他同学都是 98 分及以下. 如果想取前 2 名, 怎么办?
按上一节的方案, 按照某种策略 (包括随机, 低序号优先), 把考 99 分的 3 名同学中选择 1 位作为第 2 名, 其余同学机会.
本节讨论另一种方案: 将这 3 名同学并列第 2. 这种方案的优势是公平, 但劣势是已经不再取刚好 2 名.

3.1 邻域的表示

首先来定义 x x x U \mathbf{U} U 中的 δ \delta δ 邻域.
Definition 2. The ε \varepsilon ε-neighborhood of x x x in U \mathbf{U} U is given by
n ε ( x , U ) = { x i ∈ U ∣ δ ( x , x i ) ≤ ε } . n_\varepsilon(x, \mathbf{U}) = \{x_i \in \mathbf{U} \vert \delta(x, x_i) \leq \varepsilon\}. nε(x,U)={xiUδ(x,xi)ε}.

然后来讨论刚好达到或超过 k k k 个邻居的域值.
Definition 3. ε = ε ( k , x , U ) \varepsilon = \varepsilon(k, x, \mathbf{U}) ε=ε(k,x,U) is called the k k k-nearest neighbors threshold of x x x wrt. U \mathbf{U} U iff
a) ∣ n ε ( x , U ) ∣ ≥ k \vert n_\varepsilon(x, \mathbf{U}) \vert \geq k nε(x,U)k;
b) Any ε ′ < ε \varepsilon' < \varepsilon ε<ε, ∣ n ε ′ ( x , U ) ∣ < k \vert n_{\varepsilon'}(x, \mathbf{U}) \vert < k nε(x,U)<k.

其中 a) 为达到邻域个数的约束, 条件 b) 为最小性的约束. 两个综合, 就是“刚好达到”.

Definition 4. The extended k k k nearest neighbors of x x x in U \mathbf{U} U is given by τ k ( x , U ) = { x i ∈ U ∣ δ ( x , x i ) ≤ ε ( k , x , U ) } . \tau_k(x, \mathbf{U}) = \{x_i \in \mathbf{U} \vert \delta(x, x_i) \leq \varepsilon(k, x, \mathbf{U})\}. τk(x,U)={xiUδ(x,xi)ε(k,x,U)}.

用这三个定义, 感觉有些绕, 我们再来想想更好的办法.

Definition 3’. The k k k-nearest neighbors threshold of x x x wrt. U \mathbf{U} U is given by
ε ( k , x , U ) = min ⁡ ∣ n ε ( x , U ) ∣ ≥ k ϵ . \varepsilon(k, x, \mathbf{U}) = \min_{\vert n_\varepsilon(x, \mathbf{U}) \vert \geq k} \epsilon. ε(k,x,U)=nε(x,U)kminϵ.

用它来代替 Definition 3 好像更简洁. min 下方的条件虽然有点奇怪, 但也是可接受的.

3.2 投票

与上一节相同.


欢迎在留言区拍砖

这里也只是提供一些建模的思路, 只要能说清楚, 内容没毛病都行.

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
回答: KNN算法的数学表达式可以表示为以下形式:对于一个未知样本x,KNN算法通过计算该样本与训练集中所有样本的距离,并选择与该样本距离最近的K个训练样本。然后,根据这K个最近邻样本的标签,通过投票或者加权投票的方式来确定未知样本的标签。具体而言,对于分类问题,KNN算法可以表示为以下公式: y = mode(y_1, y_2, ..., y_K) 其中,y表示未知样本的标签,y_1, y_2, ..., y_K表示K个最近邻样本的标签,mode表示取众数操作。对于回归问题,KNN算法可以表示为以下公式: y = mean(y_1, y_2, ..., y_K) 其中,y表示未知样本的标签,y_1, y_2, ..., y_K表示K个最近邻样本的标签,mean表示取平均值操作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [最简单的分类算法之一:KNN(原理解析+代码实现)](https://blog.csdn.net/Cyril_KI/article/details/107302163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [机器学习3—分类算法之K邻近算法(KNN)](https://blog.csdn.net/ex_6450/article/details/126090631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值