Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

5.5 其他预处理操作

Scikit-learn 预处理操作详解:二值化、多项式特征与归一化

Scikit-learn 中文教程

本教程深入讲解 Scikit-learn 中的三种预处理操作:二值化将数值转为布尔值,多项式特征生成用于特征交叉,数据归一化适用于文本和图像。通过简单示例,帮助新手快速上手数据预处理技术。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Scikit-learn 预处理操作:二值化、多项式特征和归一化

介绍

在机器学习项目中,数据预处理是提升模型性能的关键步骤。Scikit-learn 提供了一系列强大的预处理工具,本章将聚焦于三种常用操作:二值化、多项式特征生成和数据归一化。这些技术能帮助您优化数据,使其更适合各种算法。无论您是初学者还是有经验的开发者,都可以通过简单示例轻松掌握这些概念。

二值化(Binarizer)

二值化是将数值特征转换为布尔值(0 或 1)的过程,常用于简化数据或处理分类特征。它通过设置一个阈值来实现:数值大于阈值变为 1,否则变为 0。

如何使用

在 Scikit-learn 中,使用 Binarizer 类非常简单。首先,导入相关模块并准备数据,然后指定阈值进行转换。

from sklearn.preprocessing import Binarizer
import numpy as np

# 示例数据:一个包含数值的数组
data = np.array([[1.2], [2.5], [3.0], [0.8]])

# 初始化 Binarizer,阈值为 2.0
binarizer = Binarizer(threshold=2.0)

# 使用 fit_transform 方法转换数据
data_binarized = binarizer.fit_transform(data)
print("二值化后的数据:")
print(data_binarized)
# 输出:[[0.], [1.], [1.], [0.]]

应用场景

  • 特征简化:将连续特征转换为二元表示,减少模型复杂度。
  • 数据预处理:适用于需要二元输入的分类算法,如逻辑回归或某些决策树。
  • 异常检测:通过阈值过滤数据点。

注意事项

  • 选择合适的阈值很重要,过低可能导致过度敏感,过高可能丢失信息。
  • 二值化通常用于特征工程的后处理步骤,以优化特定模型。

多项式特征生成(PolynomialFeatures)

多项式特征生成用于创建特征之间的交叉项和幂项,有助于捕捉特征之间的非线性关系,提高模型表达能力。

如何使用

PolynomialFeatures 类可以生成多项式特征。指定度数后,它会自动创建原始特征、平方项和交叉项。

from sklearn.preprocessing import PolynomialFeatures
import numpy as np

# 示例数据:一个二维数组,代表两个特征
data = np.array([[1, 2], [3, 4], [5, 6]])

# 初始化 PolynomialFeatures,度数为 2
poly = PolynomialFeatures(degree=2)

# 生成多项式特征
data_poly = poly.fit_transform(data)
print("多项式特征后的数据(包括偏置项、原始特征、平方项和交叉项):")
print(data_poly)
# 输出示例:对于特征 x 和 y,生成 [1, x, y, x^2, x*y, y^2]

应用场景

  • 回归模型:如多项式回归,以拟合非线性数据。
  • 特征工程:增强线性模型的表达能力,例如在线性回归中加入交叉项。
  • 数据增强:在数据不足时,通过生成新特征来增加多样性。

注意事项

  • 高度数可能导致特征爆炸(维度灾难),增加计算成本。
  • 通常与正则化技术结合使用,防止过拟合。

数据归一化(Normalizer)

数据归一化是将每个样本向量缩放到单位范数的过程,常用于文本和图像数据,以确保样本间可比性。与标准化不同,它基于样本行而非特征列。

如何使用

在 Scikit-learn 中,Normalizer 类默认使用 L2 范数(欧几里得范数)进行归一化。

from sklearn.preprocessing import Normalizer
import numpy as np

# 示例数据:一个三维数组,代表多个样本
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 初始化 Normalizer
normalizer = Normalizer()

# 归一化数据
data_normalized = normalizer.fit_transform(data)
print("归一化后的数据(每个样本向量长度为 1):")
print(data_normalized)
# 输出:例如,[[0.267, 0.534, 0.801], ...]

应用场景

  • 文本处理:如 TF-IDF 向量的归一化,用于文本分类或聚类。
  • 图像数据:归一化像素值,例如在计算机视觉任务中。
  • 相似性计算:如余弦相似度,归一化后向量直接可比。

注意事项

  • 归一化不改变特征分布,仅调整样本尺度。
  • 适用于样本级操作,如果需要对特征列进行缩放,考虑使用 StandardScaler

总结

通过二值化、多项式特征生成和数据归一化,您可以灵活预处理数据以适应不同机器学习模型。记住:

  • 二值化:简化数据为二元形式。
  • 多项式特征生成:增强特征以捕捉非线性。
  • 数据归一化:确保样本间可比性,尤其用于文本和图像。

实际应用中,根据数据和模型需求选择合适的预处理步骤。建议结合交叉验证来评估预处理效果。

下一步建议

探索 Scikit-learn 中其他预处理工具,如 StandardScaler(标准化)、MinMaxScaler(归一化到范围)和编码分类特征的方法,以构建更全面的数据管道。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包