当前位置: 首页 > news >正文

特征预处理

作为机器学习初学者,理解特征预处理就像学做菜前必须学会的"洗菜、切配、腌制"——它直接决定了最终模型的口感(性能)。我会用最生活化的比喻+代码示例带你轻松掌握这个必备技能。

一、为什么要特征预处理?

原始数据的问题

  • 有的食材(特征)用"克"做单位,有的用"斤" → 量纲不统一

  • 洋葱味道太冲,盖过其他食材 → 数值差异过大

  • 有些食材已经变质 → 存在缺失值或异常值

预处理的目标:让所有特征站在同一起跑线上,公平竞争。


二、数值型特征处理

1. 标准化(Standardization)

作用:把数据变成均值为0、标准差1的正态分布
公式

x′=x−均值标准差x′=标准差x−均值​

类比:把所有人的身高减去平均身高,再除以"高矮的波动程度"

from sklearn.preprocessing import StandardScalerdata = [[170], [180], [160]]
scaler = StandardScaler()
print(scaler.fit_transform(data))

输出:

[[ 0. ][ 1. ][-1. ]]
2. 归一化(Normalization)

作用:把数据压缩到[0,1]或[-1,1]区间
公式

x′=x−最小值最大值−最小值x′=最大值−最小值x−最小值​

类比:把考试成绩从0-100分换算成0-1分

from sklearn.preprocessing import MinMaxScalerdata = [[100], [80], [60]]
scaler = MinMaxScaler()
print(scaler.fit_transform(data))

输出:

[[1. ][0.5][0. ]]
 
3. 处理异常值

方法

  • 截断(Clipping):设定上下限

    np.clip(data, a_min=10, a_max=90)

  • 鲁棒缩放(Robust Scaling):用中位数和四分位距

    from sklearn.preprocessing import RobustScaler


三、类别型特征处理

1. 独热编码(One-Hot Encoding)

作用:把类别变成二进制向量
类比:把"颜色"(红/绿/蓝)变成三个开关

import pandas as pddf = pd.DataFrame({"颜色": ["红", "绿", "蓝"]})
print(pd.get_dummies(df))
 

输出:

   颜色_红  颜色_绿  颜色_蓝
0     1     0     0
1     0     1     0
2     0     0     1
 
2. 标签编码(Label Encoding)

作用:给类别分配数字编号(注意:可能引入虚假大小关系)

from sklearn.preprocessing import LabelEncoderle = LabelEncoder()
df["颜色编码"] = le.fit_transform(df["颜色"])

四、缺失值处理

常见方法:
方法代码示例适用场景
删除缺失样本df.dropna()缺失值很少时
用均值/中位数填充df.fillna(df.mean())数值型数据
用众数填充df.fillna(df.mode()[0])类别型数据
预测填充用其他特征预测缺失值缺失值与其他特征相关

五、时间型特征处理

df["日期"] = pd.to_datetime(df["日期"])
df["年份"] = df["日期"].dt.year
df["是否周末"] = df["日期"].dt.weekday > 4
 

六、特征选择技巧

1. 过滤式(Filter)
  • 方差阈值:删除方差接近0的特征

    from sklearn.feature_selection import VarianceThreshold
     
  • 相关性筛选:选择与目标值相关性高的特征

2. 嵌入式(Embedded)
  • 用L1正则化让模型自动选择特征

    from sklearn.linear_model import Lasso
     

七、完整预处理流水线

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputerpipeline = Pipeline([('imputer', SimpleImputer(strategy='median')),  # 缺失值填充('scaler', StandardScaler()),                   # 标准化('selector', VarianceThreshold(threshold=0.1))  # 特征选择
])
X_processed = pipeline.fit_transform(X)
 

八、避坑指南

  • ❌ 不要先切分数据集再预处理:会导致数据泄露(应该先切分,再分别预处理)

  • ✅ 分类变量很多时:优先用Target Encoding代替One-Hot

  • 📊 可视化验证:预处理前后用箱线图对比分布变化


九、实战案例:预测房价

  1. 数值特征面积 → 标准化

  2. 类别特征地段 → One-Hot编码

  3. 时间特征建造年份 → 计算房龄

  4. 异常值面积>1000㎡ → 截断处理

# 完整示例
df["房龄"] = 2023 - df["建造年份"]
df["面积"] = np.clip(df["面积"], 0, 500)
 

记住:数据和特征决定了模型的上限,而预处理就是逼近这个上限的关键步骤!下一步可以用Kaggle的House Prices数据集练习完整流程。

相关文章:

  • QML混合编程图像刷新策略
  • JavaSE核心知识点03高级特性
  • JavaScript数据类型及内置函数详解目录
  • 【MYSQL】索引、存储引擎
  • Next.js V15 在异步页面中,获取路由动态参数的几个坑
  • 【二刷力扣】【力扣热题100】今天的题目是:283.移动零
  • 2025.5.22 Axure 基础与线框图制作学习笔记
  • 大数据Spark(六十):Spark On Yarn 配置
  • 软件工程重点复习
  • C++学习之打车软件—高德地图API
  • 图解 | 大模型智能体LLM Agents
  • 网络原理入门详解:从零理解互联网如何工作
  • mysql知识点1--了解数据库
  • c/c++的opencv椒盐噪声
  • 学习日志12 java
  • 【IPMV】图像处理与机器视觉:Lec12 Blob Detector 斑点检测
  • MLA:Transformer的智能变形金刚——解密多头潜在注意力的进化密码
  • DOM事件的传播机制
  • Dify 本地源码安装教程
  • Llama 4中文调优全流程解
  • 泊头公司做网站/媒体软文推广平台
  • 腾宁网络做网站/stp营销战略
  • rap做词网站/电视剧百度风云榜
  • 网站开发深入浅出 - python篇/网店推广方法有哪些
  • 迈肯奇迹做网站/三十个知识点带你学党章
  • 企业网站建设市场报价/快速排名优化系统