💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在优快云上与你们相遇~💖
本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】
🧠 Sklearn 机器学习实战:数值离散化(指定区间)详解
在机器学习的数据预处理中,我们经常需要将连续型数值变量离散化(又称分箱),尤其在特征工程阶段,这有助于提升模型的泛化能力或适配某些对离散特征更敏感的算法(如树模型、Naive Bayes)。
本篇博文将深入讲解如何使用 Sklearn
对数值进行 “指定区间”离散化,即我们自己定义好划分边界,而不是让机器自动等距或等频划分。
📚 一、为什么要进行数值离散化?
数值离散化是指将连续型变量转换为离散型(分段)变量。常见的应用场景包括:
- 用于分类模型中,将连续值转为类别值
- 提升模型的解释性(如“年龄在30-40之间”更具语义)
- 处理异常值对模型影响
- 与某些特定算法的特征类型要求匹配(如朴素贝叶斯)
🔧 二、Sklearn 中的离散化工具
Sklearn 提供了非常强大的 sklearn.preprocessing.KBinsDiscretizer
工具来进行离散化,支持:
策略名 | 描述 |
---|---|
uniform |
等宽分箱(自动) |
quantile |
等频分箱(自动) |
kmeans |
基于聚类的分箱(自动) |
❗ 自定义边界 | 不是 KBinsDiscretizer 直接支持的,需要手动实现 |
🎯 三、手动指定区间进行离散化
✅ 示例场景:年龄分组
我们有一组连续的“年龄”数据,希望分成以下类别:
- 0-18岁:青少年
- 18-35岁:青年
- 35-60岁:中年
- 60岁以上:老年
📌 代码实现(使用 np.digitize
或 pd.cut
)
方法一:使用 np.digitize
(返回整数 bin 编号)
import numpy as np
# 模拟一组年龄数据
ages = np.array([