Python机器学习数据清洗到特征工程策略

Python机器学习数据清洗到特征工程策略

目录

  1. ✨ 数据清洗:处理缺失值与异常值的策略
  2. 🔄 特征选择:筛选与数据目标高度相关的特征
  3. 🛠 特征工程:数据转换与生成新特征的多样化方法
  4. 📊 类别型变量的数值化:数值编码与独热编码的实践
  5. 🚀 数据标准化与归一化:确保特征数据的一致性
  6. 💡 时间序列数据的预处理:日期特征提取与滞后特征生成

1. ✨ 数据清洗:处理缺失值与异常值的策略

在机器学习任务中,数据预处理的首要步骤是数据清洗。数据清洗的目的是识别和处理缺失值、重复数据以及异常值,以确保数据的完整性与质量。未经过清洗的原始数据通常存在各种不完美,这些问题若不处理,将直接影响模型的训练效果与预测结果。常见的数据清洗步骤包括处理缺失值、重复值和异常值。

处理缺失值

缺失值是数据预处理中最常见的问题之一。缺失值的处理方式有很多种,包括删除缺失值所在的行、用统计量(如均值、中位数等)填充,或使用插值法、建模填充等高级方法。以下是几种处理缺失值的方式:

  • 删除缺失值 :当缺失值的比例较小或该特征对模型无关紧要时,可以选择直接删除这些数据行。Pandas库中的dropna()函数可以方便地执行这一操作:

    python 复制代码
    import pandas as pd
    
    # 创建包含缺失值的DataFrame
    data = {'Age': [25, 30, None, 35], 'Salary': [50000, None, 60000, 65000]}
    df = pd.DataFrame(data)
    
    # 删除包含缺失值的行
    df_cleaned = df.dropna()
    print(df_cleaned)
  • 填充缺失值 :如果删除数据行会导致样本量不足,可以采用均值、中位数或众数来填充缺失值。Pandas库的fillna()函数可以直接进行填充操作:

    python 复制代码
    # 用列的均值填充缺失值
    df_filled = df.fillna(df.mean())
    print(df_filled)
  • 插值法填充:对于时间序列数据或有序数据,可以采用插值法来填充缺失值,以保证数据的连续性和合理性。通过插值法,可以根据数据的趋势进行预测填充:

    python 复制代码
    # 使用插值法填充缺失值
    df_interpolated = df.interpolate()
    print(df_interpolated)

处理重复值

重复值通常会降低模型的泛化能力,使模型对某些特定模式产生偏倚。因此,必须检测并处理重复数据。在Pandas中,可以使用duplicated()drop_duplicates()方法来检测和删除重复值。

python 复制代码
# 检查重复值
duplicates = df.duplicated()

# 删除重复值
df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)

处理异常值

异常值(outliers)是指偏离数据整体分布规律的值,它们可能对模型产生极大的负面影响。在处理异常值时,可以采用统计分析法(如箱线图法)或基于算法的检测方法(如局部异常因子)。一种常见的处理方法是将异常值替换为特定的统计值,或者通过过滤策略删除异常值。

python 复制代码
import numpy as np

# 创建包含异常值的数据
data_with_outliers = {'Age': [22, 25, 30, 120, 28], 'Salary': [50000, 60000, 55000, 90000, 65000]}
df_outliers = pd.DataFrame(data_with_outliers)

# 使用Z-score方法识别异常值
df_outliers['Age_Zscore'] = (df_outliers['Age'] - df_outliers['Age'].mean()) / df_outliers['Age'].std()
df_outliers = df_outliers[(df_outliers['Age_Zscore'].abs() <= 3)]  # 保留Z-score在3以内的数据
print(df_outliers)

清洗后的数据更加可靠且具备更好的模型适应性。通过合理处理缺失值、重复值与异常值,可以大大提高机器学习模型的训练效果。


2. 🔄 特征选择:筛选与数据目标高度相关的特征

特征选择是机器学习中提高模型性能和可解释性的重要步骤。特征选择的目的是筛选出对目标变量最有帮助的特征,同时删除不相关或冗余的特征,以减少数据噪音、提高模型效率。

过滤法

过滤法通过统计指标(如相关系数、卡方检验、互信息等)来评估每个特征与目标变量之间的关联性。相关性高的特征保留,相关性低的特征则删除。这种方法简单高效,适用于大规模数据集。

python 复制代码
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_iris

# 加载Iris数据集
X, y = load_iris(return_X_y=True)

# 选择与目标变量最相关的两个特征
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)

包装法

包装法则通过反复训练模型来评估特征的组合效果。递归特征消除(Recursive Feature Elimination, RFE)是一种常见的包装法,通过递归地移除最不重要的特征,最终选出最优特征子集。

python 复制代码
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier

# 使用随机森林作为基模型
model = RandomForestClassifier()

# 实例化递归特征消除工具
rfe = RFE(estimator=model, n_features_to_select=2)

# 进行特征选择
X_rfe = rfe.fit_transform(X, y)
print(X_rfe)

嵌入法

嵌入法则结合了模型训练和特征选择过程,直接通过模型的权重或特征重要性来决定特征的去留。例如,决策树和随机森林等模型本身就能够评估特征的重要性。

python 复制代码
# 使用随机森林评估特征重要性
model.fit(X, y)
importances = model.feature_importances_

# 打印特征的重要性
for i, importance in enumerate(importances):
    print(f"Feature {i}: Importance {importance}")

特征选择不仅能够提高模型的性能,还可以减少过拟合风险,使模型的泛化能力更强。通过合理选择特征,可以有效提高机器学习模型的精度和效率。


3. 🛠 特征工程:数据转换与生成新特征的多样化方法

特征工程是一项非常关键的任务,涉及对原始数据进行处理、转化甚至生成新特征。高质量的特征工程可以极大提升模型的表现。特征工程包括对连续变量的处理、离散化,以及生成派生特征等。

数值特征的处理

数值型特征往往需要进行适当的变换,以便更好地用于机器学习模型中。常见的操作包括对数变换、平方根变换等,以解决特征的分布不均衡问题。

python 复制代码
import numpy as np

# 对数变换
df['log_Age'] = np.log(df['Age'] + 1)

# 平方根变换
df['sqrt_Age'] = np.sqrt(df['Age'])

离散化

对于连续变量,可以将其离散化为多个区间,从而帮助模型更好地捕捉变量的分布特征。cut()函数可以将数据分箱处理:

python 复制代码
# 使用Pandas对连续变量进行分箱
df['Age_binned'] = pd.cut(df['Age'], bins=[0, 20, 40, 60, 80], labels=['Young', 'Adult', 'Middle-aged', 'Senior'])
print(df)

派生特征

派生特征是从已有数据中创建的新特征。例如,在时间序列数据中,可以提取出月份、季度等时间特征,这样能够增强模型对时间模式的捕捉能力。

python 复制代码
# 提取日期特征
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
df['quarter'] = df['date'].dt.quarter

特征工程通过合理转换与生成特征,能够帮助模型更好地学习数据中的模式,提高预测效果。


相关推荐
sunneo3 分钟前
专栏D-团队与组织-03-产品文化
人工智能·产品运营·aigc·产品经理·ai编程
Muyuan19983 分钟前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
AI科技星8 分钟前
精细结构常数α作为SI 7大基本量纲统一耦合常数的量子几何涌现理论
算法·机器学习·数学建模·数据挖掘·量子计算
代码小书生14 分钟前
statistics,一个统计的 Python 库!
开发语言·python
小呆呆66616 分钟前
Codex 穷鬼大救星
前端·人工智能·后端
摇滚侠18 分钟前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
薛定猫AI22 分钟前
【深度解析】Kimi K2.6 的长上下文 Agentic Coding 能力与 OpenAI 兼容 API 接入实践
人工智能·自动化·知识图谱
星爷AG I25 分钟前
20-6 记忆整合(AGI基础理论)
人工智能·agi
AI创界者27 分钟前
人工智能 GPT-Image DMXAPI Python AI绘画
人工智能
知识分享小能手28 分钟前
R语言入门学习教程,从入门到精通,R语言数据计算与分组统计(9)
开发语言·学习·r语言