You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python线性回归中编码城市位置数据?

针对高基数类别特征的编码方案

当你面对有100个唯一值的city特征时,确实不能直接用常规的One Hot或Label Encoding,以下是几种落地性强的解决方案:

1. 目标编码(Target Encoding)

这是处理这类问题最常用的方法:直接用每个城市对应的房价统计值(均值、中位数都可以)作为该城市的编码值。比如所有Boston样本的平均房价就是Boston的编码。

  • 优势:完全不增加特征维度,还能直接保留类别和目标变量的关联信息
  • 避坑提醒:直接用全数据集统计值容易过拟合,建议用交叉验证分fold处理——每个fold里只用训练集的统计值编码验证集,或者给全局均值和类别均值加个加权平滑(比如编码值 = α*全局房价均值 + (1-α)*城市房价均值,α是0-1之间的平滑系数)
  • 简单实现示例:
import pandas as pd
# 用transform直接生成每个样本对应的城市房价均值
df['city_encoded'] = df.groupby('city')['price'].transform('mean')

2. 频数/频率编码

用每个城市在数据集中的出现次数或频率作为编码值。比如某个城市出现了600次,编码就是600;频率就是600除以总样本数。

  • 适用场景:当城市的出现频率和房价有潜在关联时(比如热门大城市样本多,房价普遍更高)
  • 优势:计算简单,同样不新增维度

3. 嵌入编码(Embedding)

如果后续打算用深度学习模型(比如神经网络),可以给每个城市分配唯一整数ID(类似Label Encoding),然后在模型中加入Embedding层,让模型自动学习把这些ID映射到低维向量(比如10-20维)。

  • 优势:能捕捉城市间的潜在关联(比如同区域城市的向量会更接近),同时避免维度爆炸
  • 适用场景:用深度学习模型做预测时优先考虑

4. 分组编码

把相似的城市合并成少数几组再编码:

  • 可以借助外部数据,比如按区域(东北部、中西部)、人口规模、当地平均收入把100个城市分成5-10组;
  • 也可以用数据本身的房价分布聚类,比如用K-means把城市按平均房价分成6组,再对分组后的特征用One Hot编码。

为什么不建议直接用Label Encoding?

线性回归会把Label Encoding生成的整数当成有序数值,比如给Boston编1、Detroit编2、NY编3,模型会错误地认为NY比Detroit“数值更大”,Detroit比Boston“数值更大”,但这种顺序没有实际业务意义,会给模型引入错误的相关性,所以线性模型里千万别直接用。

内容的提问来源于stack exchange,提问作者Odiseon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:22:45