计算机系统应用教程网站

网站首页 > 技术文章 正文

Pandas第十三课:特征工程与数据预处理

btikc 2024-10-12 13:23:11 技术文章 10 ℃ 0 评论

在实际的数据分析和机器学习项目中,特征工程(Feature Engineering)和数据预处理是至关重要的步骤。本章将详细介绍如何使用 pandas 进行特征工程和数据预处理,以确保数据适合用于后续的建模和分析工作。

1. 特征工程概述

特征工程是指通过对原始数据进行转换、组合、衍生等操作,创造出更有意义的特征(Features),从而改善模型的性能。

2. 数据预处理

数据预处理包括数据清洗、填充缺失值、数据标准化或归一化、类别变量编码等步骤。

2.1 数据清洗

数据清洗是指处理数据中存在的错误、不一致或不准确的信息。

示例代码

import pandas as pd

# 加载数据
data = pd.read_csv('example_data.csv')
print(data.head())

# 检查缺失值
print(data.isnull().sum())

# 填充缺失值
data.fillna(data.mean(), inplace=True)  # 使用均值填充数值型缺失值
data.fillna(data.mode().iloc[0], inplace=True)  # 使用众数填充类别型缺失值

3. 数据标准化与归一化

数据标准化(Normalization)和归一化(Standardization)是为了使数据具有相同的尺度,从而避免某些特征由于数值较大而主导模型训练的情况。

示例代码

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 创建标准化器
scaler = StandardScaler()
# 创建归一化器
normalizer = MinMaxScaler()

# 对数值型特征进行标准化
data['Numerical_Feature'] = scaler.fit_transform(data[['Numerical_Feature']])

# 对数值型特征进行归一化
data['Another_Numerical_Feature'] = normalizer.fit_transform(data[['Another_Numerical_Feature']])

4. 类别变量编码

类别变量(Categorical Variables)需要编码为数值形式,以便机器学习模型能够处理。

示例代码

# 使用 Pandas 的 get_dummies 方法进行 one-hot 编码
data = pd.get_dummies(data, columns=['Category_Column'])

# 或者使用 LabelEncoder 进行标签编码
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
data['Category_Column'] = label_encoder.fit_transform(data['Category_Column'])

5. 特征衍生

特征衍生是指通过已有特征创造新的特征,以增强模型的预测能力。

示例代码

# 创建新的特征
data['Combined_Feature'] = data['Feature_1'] + data['Feature_2']
data['Ratio_Feature'] = data['Feature_1'] / data['Feature_2']

6. 特征选择

特征选择是指从众多特征中选择最有影响力的特征,以提高模型的性能和减少过拟合的风险。

示例代码

from sklearn.feature_selection import SelectKBest, f_classif

# 选择最好的 k 个特征
selector = SelectKBest(score_func=f_classif, k=3)
selected_features = selector.fit_transform(data.drop('Target', axis=1), data['Target'])

# 获取所选特征的列名
selected_columns = data.columns[selector.get_support()]
print(selected_columns)

7. 示例代码

下面是一个完整的示例代码,展示了如何使用 pandas 进行特征工程和数据预处理:

import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.preprocessing import OneHotEncoder

# 加载数据
data = pd.read_csv('example_data.csv')
print(data.head())

# 检查缺失值
print(data.isnull().sum())

# 填充缺失值
data.fillna(data.mean(), inplace=True)  # 使用均值填充数值型缺失值
data.fillna(data.mode().iloc[0], inplace=True)  # 使用众数填充类别型缺失值

# 数据标准化
scaler = StandardScaler()
data['Numerical_Feature'] = scaler.fit_transform(data[['Numerical_Feature']])

# 数据归一化
normalizer = MinMaxScaler()
data['Another_Numerical_Feature'] = normalizer.fit_transform(data[['Another_Numerical_Feature']])

# 类别变量编码
data = pd.get_dummies(data, columns=['Category_Column'])

# 特征衍生
data['Combined_Feature'] = data['Feature_1'] + data['Feature_2']
data['Ratio_Feature'] = data['Feature_1'] / data['Feature_2']

# 特征选择
selector = SelectKBest(score_func=f_classif, k=3)
selected_features = selector.fit_transform(data.drop('Target', axis=1), data['Target'])

# 获取所选特征的列名
selected_columns = data.columns[selector.get_support()]
print(selected_columns)

8. 运行结果

当你运行上述代码时,将会输出各个部分的结果,并显示出所选特征的列名:


9. 小结

在这一章中,我们介绍了如何使用 pandas 进行特征工程和数据预处理。通过数据清洗、标准化、归一化、类别变量编码、特征衍生和特征选择等步骤,我们可以更好地准备数据,使其适用于后续的建模和分析工作。

下一章我们将继续探讨如何使用 pandas 进行高级统计分析方法,包括描述性统计、相关性分析等。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表