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

数据预处理:机器学习中的关键步骤

一、处理缺失值

在现实世界的数据集中,缺失值是常见的问题。处理缺失值的方法有很多种,常见的有删除包含缺失值的行或列,以及用特定的值填充缺失值。

1. 删除缺失值

Pandas 提供了 dropna() 方法,可以方便地删除包含缺失值的行或列。例如:

import pandas as pd# 加载数据
data = pd.read_csv('property-data.csv')# 删除包含缺失值的行
cleaned_data = data.dropna()

dropna() 方法的参数非常灵活,例如 axis=0 表示删除行,axis=1 表示删除列;how='any' 表示只要有一个缺失值就删除,how='all' 表示只有当所有值都缺失时才删除。

2. 填充缺失值

如果数据集中的缺失值较多,直接删除可能会导致数据量大幅减少。此时,可以用特定的值填充缺失值。常见的填充方法包括使用均值、中位数、众数或常数等。

# 使用均值填充缺失值
data.fillna(data.mean(), inplace=True)# 使用中位数填充缺失值
data.fillna(data.median(), inplace=True)# 使用常数填充缺失值
data.fillna(0, inplace=True)

此外,还可以使用 SimpleImputer 类来处理缺失值。例如:

from sklearn.impute import SimpleImputer# 使用均值填充
imputer = SimpleImputer(strategy='mean')
data_imputed = imputer.fit_transform(data)

二、数据标准化

数据标准化是将数据按比例缩放,使之落入一个特定的小区间,如 [0,1] 或 [-1,1]。标准化的目的是消除不同特征之间的量纲影响,使数据具有可比性。

1. 最大最小值标准化

最大最小值标准化(MinMaxScaler)将数据缩放到 [0,1] 区间:

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)

2. Z值标准化

Z值标准化(StandardScaler)将数据转换为均值为 0、方差为 1 的标准正态分布:

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

三、特征编码

特征编码是将分类变量转换为数值变量,以便机器学习模型能够处理。

1. 独热编码(OneHotEncoder)

独热编码将分类变量转换为二进制稀疏矩阵,每个类别对应一个特征:

from sklearn.preprocessing import OneHotEncoderencoder = OneHotEncoder()
data_encoded = encoder.fit_transform(data[['category']])

2. 序号编码(OrdinalEncoder)

序号编码将有序分类变量转换为整数编码,保留类别间的顺序关系:

from sklearn.preprocessing import OrdinalEncoderencoder = OrdinalEncoder()
data_encoded = encoder.fit_transform(data[['category']])

3. 目标标签编码(LabelEncoder)

目标标签编码将目标标签转换为 0 到 n_classes-1 的整数编码:

from sklearn.preprocessing import LabelEncoderencoder = LabelEncoder()
data_encoded = encoder.fit_transform(data['target'])

四、数据二值化

数据二值化是将数据分为两类(0 或 1),通常用于二分类问题。二值化可以根据数值是否大于某个阈值来完成:

from sklearn.preprocessing import Binarizerbinarizer = Binarizer(threshold=0.5)
data_binarized = binarizer.fit_transform(data)

五、其他

为了加深对数据预处理的理解,以下是一些常见的数据预处理函数及其功能,并附上具体的代码示例。

1. preprocessing.scale()

功能:标准化,将数据转换为均值为 0、方差为 1 的标准正态分布。

代码示例

from sklearn.preprocessing import scale
import numpy as np# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 标准化
data_scaled = scale(data)print(data_scaled)

2. preprocessing.MinMaxScaler()

功能:最大最小值标准化,将数据缩放到 [0,1] 区间。

代码示例

from sklearn.preprocessing import MinMaxScaler# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建标准化器
scaler = MinMaxScaler()# 拟合并转换数据
data_scaled = scaler.fit_transform(data)print(data_scaled)

3. preprocessing.StandardScaler()

功能:Z值标准化,将数据转换为均值为 0、方差为 1 的标准正态分布。

代码示例

from sklearn.preprocessing import StandardScaler# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建标准化器
scaler = StandardScaler()# 拟合并转换数据
data_scaled = scaler.fit_transform(data)print(data_scaled)

4. preprocessing.MaxAbsScaler()

功能:绝对值最大标准化,将数据缩放至 [-1,1] 范围。

代码示例

from sklearn.preprocessing import MaxAbsScaler# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建标准化器
scaler = MaxAbsScaler()# 拟合并转换数据
data_scaled = scaler.fit_transform(data)print(data_scaled)

5. preprocessing.RobustScaler()

功能:抗离群值标准化,基于中位数和四分位距(IQR)转换数据。

代码示例

from sklearn.preprocessing import RobustScaler# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建标准化器
scaler = RobustScaler()# 拟合并转换数据
data_scaled = scaler.fit_transform(data)print(data_scaled)

6. preprocessing.QuantileTransformer()

功能:分位数变换,将数据映射到均匀分布或正态分布。

代码示例

from sklearn.preprocessing import QuantileTransformer# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建变换器
transformer = QuantileTransformer(n_quantiles=10, random_state=0)# 拟合并转换数据
data_transformed = transformer.fit_transform(data)print(data_transformed)

7. preprocessing.PowerTransformer()

功能:幂变换,将非正态分布数据映射到正态分布。

代码示例

from sklearn.preprocessing import PowerTransformer# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建变换器
transformer = PowerTransformer(method='yeo-johnson')# 拟合并转换数据
data_transformed = transformer.fit_transform(data)print(data_transformed)

8. preprocessing.Normalizer()

功能:正则化,将样本特征缩放至单位范数。

代码示例

from sklearn.preprocessing import Normalizer# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建正则化器
normalizer = Normalizer()# 拟合并转换数据
data_normalized = normalizer.fit_transform(data)print(data_normalized)

9. preprocessing.OrdinalEncoder()

功能:序号编码,将有序分类特征转换为整数编码。

代码示例

from sklearn.preprocessing import OrdinalEncoder# 示例数据
data = np.array([['low'], ['medium'], ['high']])# 创建编码器
encoder = OrdinalEncoder()# 拟合并转换数据
data_encoded = encoder.fit_transform(data)print(data_encoded)

10. preprocessing.LabelEncoder()

功能:标签编码,将目标标签转换为 0 到 n_classes-1 的整数编码。

代码示例

from sklearn.preprocessing import LabelEncoder# 示例数据
labels = ['cat', 'dog', 'bird', 'cat', 'dog']# 创建编码器
encoder = LabelEncoder()# 拟合并转换数据
labels_encoded = encoder.fit_transform(labels)print(labels_encoded)

11. preprocessing.MultiLabelBinarizer()

功能:多标签二值化,将多标签数据转换为二进制矩阵。

代码示例

from sklearn.preprocessing import MultiLabelBinarizer# 示例数据
data = [['cat', 'dog'], ['dog', 'bird'], ['cat', 'bird']]# 创建二值化器
binarizer = MultiLabelBinarizer()# 拟合并转换数据
data_binarized = binarizer.fit_transform(data)print(data_binarized)

12. preprocessing.OneHotEncoder()

功能:独热编码,将无序分类特征转换为二进制稀疏矩阵。

代码示例

from sklearn.preprocessing import OneHotEncoder# 示例数据
data = np.array([['cat'], ['dog'], ['bird']])# 创建编码器
encoder = OneHotEncoder()# 拟合并转换数据
data_encoded = encoder.fit_transform(data)print(data_encoded.toarray())

13. preprocessing.KBinsDiscretizer()

功能:k箱离散化,将连续数据离散化为 k 个区间。

代码示例

from sklearn.preprocessing import KBinsDiscretizer# 示例数据
data = np.array([[1], [3], [5], [7], [9]])# 创建离散化器
discretizer = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')# 拟合并转换数据
data_discretized = discretizer.fit_transform(data)print(data_discretized)

14. preprocessing.FunctionTransformer()

功能:自定义函数变换,将用户自定义函数应用于数据。

代码示例

from sklearn.preprocessing import FunctionTransformer# 自定义函数
def log_transform(x):return np.log(x + 1)# 创建变换器
transformer = FunctionTransformer(log_transform)# 示例数据
data = np.array([[1], [3], [5], [7], [9]])# 拟合并转换数据
data_transformed = transformer.fit_transform(data)print(data_transformed)

15. preprocessing.Binarizer()

功能:二值化,将数据缩放到指定范围(默认 [0,1])。

代码示例

from sklearn.preprocessing import Binarizer# 示例数据
data = np.array([[1], [3], [5], [7], [9]])# 创建二值化器
binarizer = Binarizer(threshold=5)# 拟合并转换数据
data_binarized = binarizer.fit_transform(data)print(data_binarized)

16. preprocessing.PolynomialFeatures()

功能:多项式特征生成,生成特征的高次项和交互项。

代码示例

from sklearn.preprocessing import PolynomialFeatures# 示例数据
data = np.array([[1, 2], [3, 4]])# 创建多项式特征生成器
poly = PolynomialFeatures(degree=2)# 拟合并转换数据
data_poly = poly.fit_transform(data)print(data_poly)

17. preprocessing.Imputer()

功能:缺失值填充,通过均值、中位数、常数、众数等策略填补数据中的缺失值。

代码示例

from sklearn.impute import SimpleImputer# 示例数据
data = np.array([[1, 2], [np.nan, 4], [5, 6]])# 创建填充器
imputer = SimpleImputer(strategy='mean')

六、总结

数据预处理是机器学习中不可或缺的一步。通过处理缺失值、数据标准化、特征编码和数据二值化等操作,可以显著提高数据的质量,从而提升模型的性能。希望这篇文章能帮助你更好地理解和应用数据预处理技术。

http://www.lryc.cn/news/626870.html

相关文章:

  • 【iOS】NSRunLoop
  • 25_基于深度学习的行人检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 解决程序无响应自动重启
  • 织梦素材站网站源码 资源付费下载交易平台源码
  • DeepSeek V3.1 完整评测分析:2025年AI编程新标杆
  • 【数据结构】快速排序算法精髓解析
  • 牛津大学xDeepMind 自然语言处理(4)
  • 【Linux仓库】进程等待【进程·捌】
  • AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
  • SQL详细语法教程(七)核心优化
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • Android 资源替换:静态替换 vs 动态替换
  • 猫头虎开源AI分享|基于大模型和RAG的一款智能text2sql问答系统:SQLBot(SQL-RAG-QABot),可以帮你用自然语言查询数据库
  • Https之(二)TLS的DH密钥协商算法
  • FFmpeg的基本概述(二)
  • 基于 Java 和 MySQL 的精品课程网站
  • 零知开源——基于STM32F103RBT6与ADXL362三轴加速度计的体感迷宫游戏设计与实现
  • AV1视频编码器2024-2025技术进展与行业应用分析
  • 全球首款 8K 全景无人机影翎 A1 发布解读:航拍进入“先飞行后取景”时代
  • 《算法导论》第 33 章 - 计算几何学
  • 189.轮转数组
  • Linux多线程——线程池
  • Dubbo 的 Java 项目间调用的完整示例
  • 新手向:Python实现文件加密解密工具
  • 【java面试day16】mysql-覆盖索引
  • 害虫检测识别数据集:近4K图像,6类,yolo标注
  • 【CocosCreator】electron/Cocos双窗口本地模拟聊天系统
  • Spring事务源码
  • PyTorch API 1
  • 【数据结构】递归与非递归:归并排序全解析