Kennard-Stone (KS) 算法详解 ------ 从实验设计到样本划分的经典方法
论文标题 :Computer Aided Design of Experiments
作者 :R. W. Kennard & L. A. Stone (杜邦公司)
发表:Technometrics, Vol. 11, No. 1, 1969 年 2 月, pp. 137--148
一、引言:这篇论文到底解决了什么问题?
1969 年,Kennard 和 Stone 在统计学顶级期刊 Technometrics 上发表了一篇看似冷门、但后来被无数领域引用的论文。论文的初衷是:在实际工业实验中,如何从一堆候选实验点中,挑出一个"分布均匀"的子集去做实验?
这个问题听起来简单,但在当时------甚至在今天------都面临几个棘手挑战:
- 模型不明确。你还没做实验,怎么可能知道因素和响应之间是什么函数关系?可能是线性的,可能是二次的,可能是你完全没想到的形式。
- 因子空间"乱七八糟"(messy)。书本上的实验设计教材喜欢假设"因子空间是一个漂亮的超立方体或超球体",但实际工业场景中,某些因子组合根本做不出来(设备限制、安全限制),导致因子空间缺角、挖洞、形状不规则。
- 重复实验是另一个独立问题。实验者通常先关心"我能不能把整个空间覆盖好",然后才考虑"要在某些点重复几次来评估误差"。
Kennard 和 Stone 的核心思想是 :不管空间长什么样,不管模型是什么,我就只追求一件事------让我选出来的实验点,在整个候选空间中尽可能均匀地分布。这就是 KS 算法的起点。
二、设计准则:什么叫"覆盖得好"?
论文没有给出一个显式的"覆盖率"公式,而是定性地提出了两条指导原则:
原则 1 :设计完成后,任何一个没有被选中的候选点 ,都不应该"离某个被选中的设计点太远"。
原则 2 :覆盖应该从因子空间的边界开始。
为什么从边界开始?论文给出了一个非常直观的解释:
如果因子数是 (p),实验次数是 (n),且 (n) 并不比 (p) 大多少,那么不管你怎么想,都只能拟合出一个线性可加模型。要搞清楚"斜率",最好的办法就是先跑到空间的极值点去。
这个逻辑非常工程化:样本量少的时候,先把边角撑住,再去填充内部。
三、KS 算法核心:Max-Min 距离选择
这是整篇论文最核心的部分,也是后世引用最多的地方。
3.1 问题设定
- 有 (p) 个因子(自变量),记为 ( x 1 x_1 x1, x 2 x_2 x2, ... \ldots ..., x p x_p xp)
- 有 (N) 个候选点,每个点是一个 (p) 维向量
- 目标:从 (N) 个候选中选出 (n) 个点((n < N)),让它们"均匀覆盖"整个空间
将 (N) 个候选点记为矩阵 (X)((N × \times × p)):
X = [ x 11 x 21 ⋯ x p 1 x 12 x 22 ⋯ x p 2 ⋮ ⋮ ⋱ ⋮ x 1 N x 2 N ⋯ x p N ] X = \begin{bmatrix} x_{11} & x_{21} & \cdots & x_{p1} \\ x_{12} & x_{22} & \cdots & x_{p2} \\ \vdots & \vdots & \ddots & \vdots \\ x_{1N} & x_{2N} & \cdots & x_{pN} \end{bmatrix} X= x11x12⋮x1Nx21x22⋮x2N⋯⋯⋱⋯xp1xp2⋮xpN
3.2 距离定义
任意两点 (v) 和 ( μ \mu μ) 之间的平方欧氏距离(Squared Euclidean Distance):
D v μ 2 = ∥ x v − x μ ∥ 2 = ∑ k = 1 p ( x k v − x k μ ) 2 D_{v\mu}^2 = \|x_v - x_\mu\|^2 = \sum_{k=1}^{p} (x_{kv} - x_{k\mu})^2 Dvμ2=∥xv−xμ∥2=k=1∑p(xkv−xkμ)2
为什么用平方距离而不是距离本身? 因为开方运算在计算机上更慢,而且不影响排序结果------平方距离的大小关系和距离的大小关系完全一致。
3.3 算法步骤
第一步:初始化(选前两个点)
如果用户没有指定必须包含的点,则找到所有候选点对中距离最远的那一对作为设计的起点:
$
D_{max}^2 = \max_{v < \mu} |x_v - x_\mu|^2
$
这两个点记为 ( P 1 ∗ P_1^* P1∗) 和 ( P 2 ∗ P_2^* P2∗),构成设计的初始集合。
为什么选最远的两个点?------这直接对应"从边界开始"的设计原则。最远的两个点一定位于候选点云的"两端"。
第二步:定义"到已有设计的最小距离"
假设当前已经选了 (k) 个点进入设计(( P 1 ∗ P_1^* P1∗, P 2 ∗ P_2^* P2∗, ... \ldots ..., P k ∗ P_k^* Pk∗))。对于每个还没被选中 的候选点 (v),计算它到已选集合中最近的点的距离:
Δ v ( k ) = min { D v 1 2 , D v 2 2 , ... , D v k 2 } , v = 1 , 2 , ... , N \Delta_v(k) = \min \{ D_{v1}^2, D_{v2}^2, \ldots, D_{vk}^2 \}, \quad v = 1, 2, \ldots, N Δv(k)=min{Dv12,Dv22,...,Dvk2},v=1,2,...,N
通俗理解:( Δ v ( k \Delta_v(k Δv(k)) 衡量的是"候选点 (v) 到当前设计覆盖范围的最近距离"。
第三步:选下一个点(Max-Min 准则)
在剩下的 (N - k) 个候选点中,选择那个 ( Δ v ( k ) \Delta_v(k) Δv(k)) 最大的作为第 (k+1) 个设计点:
Δ k + 1 = max v { Δ v ( k ) } \Delta_{k+1} = \max_v \{ \Delta_v(k) \} Δk+1=vmax{Δv(k)}
这就是著名的 Max-Min 准则:
- Min:每个候选点到已有设计的最短距离
- Max:选最短距离最大的那个候选点
通俗理解:每一步都把"最孤单"的那个点拉进设计里------也就是离当前设计点最远的那个。
第四步:重复直到选满
重复第二步和第三步,直到选够 (n) 个点。
3.4 平局打破规则
距离相等的情况虽然在小样本中少见,但论文也给出了处理规则:
- 如果多个候选点有相同的 ( Δ k + 1 \Delta_{k+1} Δk+1) 值,选索引最小的(其余的记录备用)
- 对起始对的选择,如果多对点距离相同,选包含较小索引的那一对
这个规则看起来有点"随意",但论文坦言:在"乱糟糟"的因子空间中,平局概率很低;在规则空间中,如果 (n) 足够大,平局的点最终都会进入设计。
3.5 一张图理解整个流程
用论文中的经典例子------一个 (5 × \times × 5) 格点(25 个候选点)来演示:
2 (1) (2) (3) (4) (5)
1 (6) (7) (8) (9) (10)
X₂ 0 (11) (12) (13) (14) (15)
-1 (16) (17) (18) (19) (20)
-2 (21) (22) (23) (24) (25)
-2 -1 0 1 2
X₁
选点过程(对照论文原文 Technometrics, 1969, pp.141--142):
-
起始 :距离最远的两对------(1, 25) ,所以 点1 = (-2, 2) 和 点25 = (2, -2) 首批入选 ✓
-
第 3 点 :算剩下 23 个点到 {点1, 点25} 的最近距离。点5 = (2, 2) 到点1 和点25 的距离² 均为 4 2 = 16 4^2=16 42=16,点21 = (-2, -2) 同理也是 16。两者并列最远。按索引选 点5 = (2, 2) ✓
勘误 :论文原文此处写的是 "minimum squared distance of 25",但实际应为 16。25 是 5 2 5^2 52,推测作者将"5 个水平"误当作"水平差 5",实际相邻水平差为 ∣ 2 − ( − 2 ) ∣ = 4 |2-(-2)| = 4 ∣2−(−2)∣=4,平方后为 16。此笔误不影响算法逻辑与选点顺序。
-
第 4 点 :点21 = (-2, -2) 入选 ✓
-
第 5 点 :唯一最远 → 点13 = (0, 0)(中心点)✓
可以看到,算法首先把四个角 都选上了(形成一个 2 2 2^2 22 全因子设计),然后才选择中心点。这个顺序完美体现了"先边界、后内部"的策略。
如果类比我们熟悉的领域(如近红外光谱建模中的训练集挑选),就是把最能"撑开"光谱空间的样本先选了,保证训练集的代表性。
四、数据预处理:为什么要标准化和正交化?
这是论文中容易被忽略但非常重要的部分。
4.1 标准化(Standardization)
KS 算法基于距离,因此对各因子的量纲非常敏感。如果因子 (x_1) 的取值范围是 0~1000,因子 (x_2) 的取值范围是 0~1,那么距离计算几乎完全被 (x_1) 主导。
推荐的做法是先将每列标准化为均值为 0、方差为 1(余弦矩阵,即相关矩阵):
x ~ i v = x i v − x ˉ i ∑ v = 1 N ( x i v − x ˉ i ) 2 \tilde{x}{iv} = \frac{x{iv} - \bar{x}i}{\sqrt{\sum{v=1}^{N} (x_{iv} - \bar{x}_i)^2}} x~iv=∑v=1N(xiv−xˉi)2 xiv−xˉi
其中 (\bar{x}i = \frac{1}{N} \sum x{iv})。
如果因子空间不太偏离超立方体或超球体,这样做就够了。
4.2 正交化(Orthonormalization)------关键难点展开
标准化虽然解决了量纲问题,但还有一个隐藏的问题:如果因子空间形状不规则(messy),Max-Min 过程会"过分忠实"地跟随空间的形状。
什么意思呢?举个例子:如果候选点云是一个细长条形状,算法会倾向于在"长条的两端"选很多点,而在"宽度方向"选很少的点。这显然不是我们想要的"均匀覆盖"。
解决方案:在计算距离之前,先对坐标矩阵 (X) 做一个正交化变换。
具体步骤:
(1) 用 Cholesky 分解(论文称之为"Choleski variant of Gaussian elimination")将 (X'X) 分解:
X ′ X → T ′ T X'X \rightarrow T'T X′X→T′T
其中 (T) 是一个上三角矩阵。(前提:(X) 是列满秩的,即 (\text{rank}(X) = p)。如果秩不足 (p),说明这个实验系统的因子定义本身就有问题。)
(2) 做变换:
W = X T − 1 W = X T^{-1} W=XT−1
(3) 变换后的 (W) 满足什么性质?
W ′ W = ( T − 1 ) ′ X ′ X T − 1 = ( T − 1 ) ′ T ′ T T − 1 = I W'W = (T^{-1})' X'X T^{-1} = (T^{-1})' T'T T^{-1} = I W′W=(T−1)′X′XT−1=(T−1)′T′TT−1=I
也就是说,变换后的矩阵 (W) 的列是正交归一的:
- 每列的平方和为 1
- 不同列之间的内积为 0
这个变换的几何意义是什么? 它相当于把原来可能"歪斜"的候选点云,通过一个线性变换"拉正",使其近似于一个球状分布。在这样的空间中做 Max-Min 距离选择,才能得到真正均匀的覆盖。
为什么要理解这一步? 在很多后来的 KS 算法实现中(特别是化学计量学领域),这一步常常被简化为普通的标准化(autoscaling)。理解正交化的本意,有助于我们在遇到"因子空间严重不规则"的场景时,知道从哪里入手改进。
五、三个经典实验验证
5.1 例一:(5^2) 全因子格点
- (N = 25) 个候选点,(p = 2),因子水平为 {-2, -1, 0, 1, 2}
- 结果:算法先选四个角点,再选中心点,再填四边中点,自然产生了一个 (3^2) 因子结构
- 启示:当空间本身是规则的,KS 算法能自动"发现"因子设计结构
5.2 例二:(4^4) 全因子格点
- (N = 256) 个候选点,(p = 4),水平为 {-3, -1, 1, 3}
- 中间结果 :
- (n=8) 时:自动产生了一个 (2^{4-1})(半部分因子设计),只使用 ±3 水平
- (n=16) 时:形成了完整的 (2^4) 全因子设计
- (n=18) 时:在 16 点基础上增加了两个"类中心点"
- (n=26) 时:实现了一个非常均衡的设计,每个因子 ±3 水平出现 9 次,±1 水平出现 4 次
- 启示 :KS 算法能在高维规则空间中产生具有良好平衡性和近乎正交的设计向量
5.3 例三:"Messy" 设计(不规则因子空间)
这是最能体现 KS 算法独特价值的例子:
- 一个 (3^4 \times 4) 结构,某些因子组合不可操作(阴影区域),导致 324 个理论点只剩 216 个可用
- 这种不规则的缺失导致各因子列之间产生了不均衡------全因子时 (X'X)(相关形式)的特征值全是 1,但缺失后变为:1.577, 1.000, 1.000, 0.924, 0.499
- 注意第一个特征值明显大于 1,最后一个特征值明显小于 1------说明因子间产生了歪斜
- 算法处理:先正交化(用 Cholesky 变换把歪斜"拉正"),再执行 Max-Min
- 结果 :得到的 25 点设计向量近乎正交,相关矩阵的非对角元绝对值都小于 0.14,特征值为 1.266, 1.103, 0.961, 0.861, 0.809
- 相比原始候选集的歪斜(1.577~0.499),设计点的特征值明显更均衡
这正是 KS 算法在化学计量学中被广泛使用的本质原因------它能从一个"长相不规则"的海量候选集中,挑出一个"分布均匀"的代表性子集。
论文还展示了另一个 25 点设计(图 4),其中有 11 个点是事先已经做过的实验(即"强制包含"),剩余 14 个由算法补充------这对应了算法的 "boss option" 功能,允许强制纳入已有实验点。
六、算法延伸与应用
6.1 "Boss Option"(老板选项)
用户可以事先指定某些候选点必须纳入设计(例如已经做过的实验、经验上认为重要的点)。算法会自动将这些点作为起点,然后用 Max-Min 补充剩余的点。这让 KS 算法非常实用------它不要求从零开始。
6.2 混合系统和非线性模型
论文提到(虽未给出具体例子),KS 方法对混合物实验系统(mixture systems)和非线性模型同样适用。如果需要拟合一个确定形式的模型,可以把设计向量"扩展"为模型矩阵的列,再作为输入------然后评价不同的候选设计时,可以看方差等高线、(\det(X'X)^{-1})(D-最优准则)等。
6.3 大数据量处理技巧
KS 算法需要计算和存储所有 (\binom{N}{2}) 个点对间的距离,时间复杂度 (O(N^2)),内存占用也很大。对于超大规模候选集,论文建议:
先算每个点的"半径",排个序,选出若干"半径带",只用带内的点作为算法输入。
这是一个早期的"数据精简"思路。
6.4 事后数据分析
论文还提到 KS 算法被用于"数据分析的验尸报告"------当数据采集过程导致伪重复、(X'X) 矩阵条件很差时,可以用 KS 筛选出一个能改善条件数的子集。
七、KS 算法在化学计量学中的现代地位
虽然论文的原始出发点是实验设计 ,但 KS 算法真正的"第二春"来自化学计量学(Chemometrics) 。在近红外光谱(NIR)分析、拉曼光谱等领域,需要从大量样品中挑选出一个有代表性的训练集来建立校正模型。
KS 的做法是:
- 每个样本的光谱(或 PCA 降维后的得分向量)作为"候选点"
- 用 KS 算法选出一个分布均匀的训练子集
- 剩下的作为测试集,或进一步用其他方法划分
这种做法保证了训练集中化学值范围广、样本间差异大,从而建立的模型泛化能力更强。相比随机划分,KS 选出的训练集在化学值分布上更均匀,极端样本更容易被纳入训练集。
此外,后续研究者还提出了 SPXY(Sample set Partitioning based on joint X-Y distances) 等改进版本------在 KS 的距离计算中同时考虑光谱空间(X)和化学值空间(Y),进一步提升训练集的代表性。
八、计算机程序 CADEX-I
论文最后一节提到,完整的算法实现(CADEX-I)已用 FORTRAN IV 编写,运行于 UNIVAC 1107/1108 计算机,并利用了该机型的高速磁鼓(一个时代感很强的细节)。
如今,KS 算法已在多种编程环境中实现了(Python、R、MATLAB 等),但其核心逻辑 55 年来从未改变。
九、总结
| 维度 | 说明 |
|---|---|
| 核心思想 | 从边界开始,每次选"离已有设计最远"的点,逐步覆盖整个空间 |
| 关键操作 | ① 计算候选点对间距离(一次性);② 选最远对作为起点;③ 迭代 Max-Min |
| 预处理 | 标准化(去量纲)+ 可选的 Cholesky 正交化(处理不规则空间) |
| 算法复杂度 | (O(N^2)) 距离存储 + (O(n \cdot N)) 选择过程 |
| 原始动机 | 不规则因子空间中的计算机辅助实验设计 |
| 现代应用 | 化学计量学中的代表性样本挑选(训练集/测试集划分) |
| 最大优势 | 不依赖模型假设,只追求空间覆盖的均匀性 |
Kennard 和 Stone 在 1969 年这篇不足 12 页的论文中,提出了一个极致简洁又极度灵活的思想。55 年来,从 FORTRAN 时代到 Python 时代,从实验设计到光谱分析,这个算法的核心------"每次把最孤单的点拉进来"------一直被证明是理解"代表性"的最佳方式之一。
参考文献
1\] Kennard, R. W., \& Stone, L. A. (1969). Computer Aided Design of Experiments. *Technometrics* , 11(1), 137--148. Stable URL: