SPSS 命令: SPSS KNN

在浏览器中做最近邻元素分析(KNN)

最近邻元素分析根据训练样本中 k 个最相似的个案,对每个个案进行分类或数值预测。

免费 · 无需注册 · 文件留在本机 · 更新于 2026年10月18日

能告诉你什么

Crosstabs 在你的设备上运行 SPSS KNN,提供调整归一化、欧氏或城市街区距离、V 折交叉验证选择 k、可选的前向特征选择,以及随机保留样本上的误差率。

  • 使用所选特征时,目标的分类准确度(错误百分比)或预测精度(平方和误差与相对误差)。
  • 哪个 k 最合适:设定范围内每个 k 的交叉验证误差。
  • 哪些特征重要:来自前向特征选择和预测变量重要性图。
  • 模型在哪些类别之间容易混淆:见训练与保留样本的分类表。

适用场景

适合使用

  • 根据少数几个画像变量将新受访者分配到已有细分中,且不假定线性边界。
  • 在拟合 Logistic 或判别模型之前,作为一个快速且假设较少的基准模型。
  • 以相似个案的平均值或中位数预测一个连续值(消费、得分)。

改用其他方法

  • 需要解释每个预测变量如何影响结果:KNN 不提供系数;请使用 Logistic 回归或决策树。
  • 存在大量无关特征:距离会被噪声淹没;请开启特征选择或先做降维。
  • 必须考虑调查权重:KNN 不使用个案权重,面板会给出提示。
  • 训练样本很小,尤其是某些类别只有少数个案时。

在 Crosstabs 中如何操作

  1. 01

    打开数据

    在工作区打开文件并切换到“统计”模式。

  2. 02

    选择最近邻元素分析

    在“机器学习”组中选择“最近邻元素分析”(KNN)。

  3. 03

    设置目标和特征

    在“变量”中选择“目标测量级别”(分类(分类预测)或标度(数值预测))、“目标”,以及“分类特征”和“标度特征”;保持勾选“标准化标度特征(调整归一化)”。

  4. 04

    设置近邻

    在“近邻”中保持勾选“自动选择 k”并设置“最小 k”“最大 k”,或取消勾选并设置“近邻数(k)”;选择欧氏距离或城市街区距离,可选勾选“计算距离时按重要性加权特征”。

  5. 05

    特征选择与分区

    可选勾选“执行前向特征选择”并设置“停止规则”。在“分区”中设置“训练样本(%)”“交叉验证折数”和“随机种子”,然后点击“运行”。

计算示例

以下结果由 Crosstabs 引擎在构建本页时根据模拟数据实际计算得出,并非手工填写。

数据

150 名模拟客户,特征为年收入(千元)、收入中用于消费的比例(%)和套餐档位(basic、plus、pro),目标为三类客户细分(储蓄型、均衡型、消费型)。按带种子的随机分区,约 70% 个案为训练样本,30% 为保留样本。

模型摘要
设置值
最近邻数(k)5
距离欧氏距离
模型中的特征income, spend_share, plan
训练 — 错误百分比28.2%
保留 — 错误百分比27.7%

训练个案由其最近的其他训练个案预测(留一法);保留个案由训练个案预测。

k 选择误差记录
k错误百分比
331.0%
436.9%
529.0%
633.0%
731.9%
832.9%
932.9%

误差为 5 个交叉验证折的平均值;并列时取较小的 k。

分类 — 保留
观测值均衡型储蓄型消费型正确百分比
均衡型71458.3%
储蓄型110090.9%
消费型701770.8%
总百分比31.9%23.4%44.7%72.3%

结果解读

在 k = 3 至 9 之间做 5 折交叉验证,选中 k = 5。使用该 k 值,47 名保留客户中有 27.7% 被错误分类(正确率 72.3%),训练样本的留一法误差为 28.2%。保留个案没有参与 k 的选择,因此保留样本误差才是模型在新客户上表现的可靠估计。

输出表格说明

个案处理摘要
训练和保留样本中的个案数、有效个案数,以及因目标或特征缺失而被排除的个案数。
模型摘要
所用 k 值、距离、模型中的特征,以及训练样本(留一法)和保留样本的误差:分类目标为错误百分比,标度目标为平方和误差。
分类
观测类别 × 预测类别的计数及正确百分比,分别针对训练和保留分区(分类目标)。
k 选择误差记录
每个候选 k 的交叉验证误差(各折平均);并列时取较小的 k。开启特征选择时为训练样本的留一法误差。
特征选择误差记录
特征进入的顺序及每一步后的误差,随后给出预测变量重要性图。

前提假设与注意事项

  • 相似的个案具有相似的目标:所选特征上的距离必须对该问题有意义。
  • 启用调整归一化时,标度特征按训练个案缩放到 −1…1,避免某个特征因单位而占主导;分类特征采用 one-of-c 编码。
  • 目标或任一特征缺失的个案被排除;不使用个案权重。
  • 训练误差按留一法计算;保留样本误差才是对新个案表现的可靠估计。

结果如何验证

KNN 与一个 Python 参考实现对照:该实现在独立编码的矩阵上用 scikit-learn 的暴力 NearestNeighbors 查找近邻,并重新实现 SPSS 的投票、平局处理、Laplace 概率、k 选择和特征选择规则。在固定 k、城市街区距离下交叉验证选 k、两种停止规则、按重要性加权以及标度目标的均值或中位数预测等情形下,近邻集合与预测类别完全一致,概率与误差至少在小数点后 8 位一致。 验证证据(英文)

常见问题

k 是如何选择的?

勾选“自动选择 k”时,从“最小 k”到“最大 k”的每个值都在训练个案上做 V 折交叉验证评分,误差最小者胜出,并列时取较小的 k。随机种子保证折划分可重现。

欧氏距离还是城市街区距离?

欧氏距离是默认选项,适合大多数数据。城市街区距离对绝对差求和,因此某个特征上的大差距所占分量比欧氏距离下小;可两者都试,比较保留样本误差。

为什么训练误差和保留样本误差接近?

训练个案按留一法预测——每个个案由其最近的其他训练个案预测——因此训练误差不会因个案把自己当作近邻而虚假地完美。

KNN 能预测数值型目标吗?

可以。将“目标测量级别”设为“标度(数值预测)”,预测值为 k 个近邻的平均值或中位数,面板报告平方和误差和相对误差。

我的数据会被上传吗?

不会。距离计算、交叉验证和特征选择都在浏览器的 Web Worker 中运行。

用你自己的数据运行最近邻元素分析(KNN)

打开 .sav、CSV 或 Excel 文件。所有计算都在浏览器中完成,文件不会离开你的设备。

打开分析工作区

SPSS 是 IBM Corp. 的商标。Crosstabs 与 IBM 无关联,也未获得 IBM 认可。