局部邻域平均
K近邻(KNN)回归
不长树、不估计超平面,只在标准化后的面积–楼层空间里找到最近的 K 套房,对它们的总价取平均(或距离加权平均)。
这篇能回答什么
K 近邻回归要回答的是:这套房在标准化坐标里最像已经成交的哪几套,那几套总价的局部平均是多少。它和决策树回归走的是相反的几何:树用全局切缝把空间切成矩形叶子,叶均值对整片矩形生效;KNN 没有叶子,预测只活在查询点周围的 K 个邻居里。拟合阶段几乎只做 Z-score 与存表,真正的计算发生在预测时。没有基尼,没有 MSE 切点,也没有 ε 管道。
教学表按「局部平均之后残差有多大」分成三层(表头仍印着类别 A/B/C)。完整个案 370。大残差层 A 70 条(18.92%),中层 B 最瘦,只有 43 条(11.62%),贴合层 C 257 条(69.46%)。C 近七成说明多数查询点的邻居袋里总价比较齐;B 的 43 条是邻域内部已经打架、局部平均最不稳的一薄层,读均值时必须连人数一起写。
什么时候不该用
特征以城市、区域为主时,欧氏距离没有定义,应改CatBoost回归。需要一条最大间隔曲面、并且能接受核映射时,用支持向量机回归。要可打印的面积门槛,用树。Y 是档位标签时改K近邻分类,那里邻居做的是投票而不是平均。没有标签、只想把点收成团,用K-Means 聚类分析——聚类的 K 是簇数,这里的 K 是邻居个数。
如何选择方法
先问坐标是否成立。面积、楼层、总楼层、建筑年份经 Z-score 后,远近有单位一的含义,局部平均说得通。若你真正想要的是「隔得最开的一条 ε 管道」,那是 SVR;若想要「乱切或贪心切出叶子再平均」,那是树集成。KNN 没有任何参数向量可写入方法节,只能写 K、距离和是否标准化。
K近邻回归:≥2 个定量特征,K 个邻居的 Y 平均;输出残差三层与 RMSE。
决策树 / 森林回归:全局矩形叶,叶均值对整片叶生效,不是按查询点找邻居。
SVR:同样要标准化,但决策来自管壁上的支持向量,不是数邻居。
K-Means:无标签;K 表示簇数,与邻居数无关。
输入、输出与限制
输入
因变量必须是定量。特征必须是定量。K 是超参数,不是数据列。有效行数必须严格大于 K,否则每个点的邻居袋装不满。城市、区域没有欧氏含义,不要塞进来。
因变量:正好 1 个定量列(本例总价(万元))。
特征:最少 2 个,最多 30 个定量列。本练习用面积(平米)、楼层、总楼层、建筑年份。
输出
结果表把局部平均后的残差分成 A / B / C:A 70、B 43、C 257,合计 370。这是残差层厚度,不是三类房源。另给出拟合/残差图。默认 K=5、欧氏距离、先做 Z-score。
产品限制
有效行必须 > K,且不少于 20。
K 默认 5;K=1 等于抄最近一套的总价,训练误差可以接近 0。
特征一律 Z-score;关掉标准化去对 SPSS,邻居名单会对不上。
超过 8000 行时预测阶段按种子抽样查询点,残差层人数以当次查询为准。
房源 ID、小区名称、城市、区域拒绝作为距离坐标。
案例
研究问题。 综合评价表要一条「像哪几套就报那几套均价」的基线:不估计斜率,也不切面积门槛。研究者关心的是,标准化之后局部平均对多少套房已经够用,还有薄薄一层邻域内部总价打架的点。
工作表「Sheet1」。完整个案 370。残差三层:A 70(18.92%)、B 43(11.62%)、C 257(69.46%)。B 只有约一成一,却是局部平均最不该被对外推广的一层。下载后:Y 勾总价(万元),特征只勾面积、楼层、总楼层、建筑年份;不要勾城市、区域、房源 ID。
在 StatsX 中操作
步骤 1 · 载入可当坐标的住房列
Sheet1 里先确认面积、楼层、总楼层、建筑年份都是数字。文本型城市不要参与距离。
步骤 2 · 确认工作台会做 Z-score
单价若被误勾进特征,未标准化时会吞掉楼层。产品默认标准化;对 SPSS 时必须打开同样的标准化。
步骤 3 · 选 K近邻回归勿点分类
目录同时有 K近邻分类。Y 是总价时必须点回归:分类会让邻居投票,叶上不再是万元平均。
步骤 4 · 只放定量坐标列
因变量:总价(万元)。特征:面积(平米)、楼层、总楼层、建筑年份。K 保持 5,先看残差层再决定是否改 K。
步骤 5 · 按最瘦残差层决定是否改 K
合计应对上 370。B 层若仍是 43 条,加大 K 会把远处不相似的总价拉进平均,C 层变肥不等于预测更好。




如何阅读输出
下表是局部平均之后的残差分层,不是户型频数。合计 N=370。A 70(18.92%)邻居袋里总价已经散开,B 43(11.62%)最薄,C 257(69.46%)局部平均贴得近。预测值是这 K 个邻居总价的算术平均(若开启距离加权,则近的权更大),单位仍是万元。
| 项目 | 类别 | 统计量 | 取值 |
|---|---|---|---|
| K近邻(KNN)回归 | 类别 A | 频数 | 70 |
| K近邻(KNN)回归 | 类别 B | 频数 | 43 |
| K近邻(KNN)回归 | 类别 C | 频数 | 257 |
| K近邻(KNN)回归 | 合计 | 有效样本 N | 370 |
| K近邻(KNN)回归 | 类别 A | 占比(%) | 18.92 |
| K近邻(KNN)回归 | 类别 B | 占比(%) | 11.62 |
| K近邻(KNN)回归 | 类别 C | 占比(%) | 69.46 |
左右滑动可查看完整表格
教学示例表在 StatsX 工作台中的计算结果口径。


阅读顺序:是否已标准化 → N 是否远大于 K(370 ≫ 5)→ 最瘦层人数(本例 B=43)→ 训练/测试 RMSE → 高价段残差是否扇形张开。不要把 A/B/C 写成「三类客户」。本页没有系数,也没有叶路径可念。
K 改成 1,训练误差几乎总能再降,那是抄最近一套。K 改成 15,C 层往往会更肥,因为平均窗把尖峰抹平——验证 RMSE 不一定更好。本页数字只对 K=5 成立。再加十几个定量列,最近的五套在高维里不再「近」,应减维或换树/核方法。惰性模型把全部有效行存下来,不能当一条可部署的闭合公式。
理论与公式
先把面积、楼层等列改成零均值单位方差,再量查询点到存表各行的欧氏长度。长度最短的 K 个下标组成邻域 N_K(x)。回归吐出的是这袋邻居的总价平均,不是众数:
距离加权时,权与距离成反比(产品避免除零):
本例 n=370,三层 70/43/257。树把 I(t) 定义成叶内 MSE 再切全局缝,KNN 从不切缝:偏差–方差由 K 调节,K 小方差大,K 大把远处点拉进来、偏差升。分类 KNN 把平均换成投票——那是另一页。覆盖半径随维度上升而膨胀,这就是最多 30 个定量列的产品上限所针对的现象。
注意事项
B 层仅 43 条时,不要把这些点上的局部平均写成稳健均价。
未标准化时,量纲大的列会主宰邻居名单。
K 必须预先写进分析方案;看完残差层再改 K 属于数据窥探。
城市、装修情况没有欧氏含义,拒绝它们不是缺陷。
惰性方法把全部有效行存下来,预测阶段对大表可能抽样。
C 层肥 ≠ 分界清晰;邻域内部可以一半高价一半低价而平均刚好居中。
常见问题
参考文献
Cover, T., & Hart, P. Nearest neighbor pattern classification[J]. IEEE Transactions on Information Theory, 1967, 13(1): 21–27.
Altman, N. S. An introduction to kernel and nearest-neighbor nonparametric regression[J]. The American Statistician, 1992, 46(3): 175–185.
Hastie, T., Tibshirani, R., & Friedman, J. The Elements of Statistical Learning. Springer.