南昌市会做网站有哪几家,国内搜索引擎排名,wordpress登录工具,免费空间自助建站模板Python机器学习数据清洗到特征工程策略
目录
✨ 数据清洗#xff1a;处理缺失值与异常值的策略#x1f504; 特征选择#xff1a;筛选与数据目标高度相关的特征#x1f6e0; 特征工程#xff1a;数据转换与生成新特征的多样化方法#x1f4ca; 类别型变量的数值化…Python机器学习数据清洗到特征工程策略
目录
✨ 数据清洗处理缺失值与异常值的策略 特征选择筛选与数据目标高度相关的特征 特征工程数据转换与生成新特征的多样化方法 类别型变量的数值化数值编码与独热编码的实践 数据标准化与归一化确保特征数据的一致性 时间序列数据的预处理日期特征提取与滞后特征生成 1. ✨ 数据清洗处理缺失值与异常值的策略
在机器学习任务中数据预处理的首要步骤是数据清洗。数据清洗的目的是识别和处理缺失值、重复数据以及异常值以确保数据的完整性与质量。未经过清洗的原始数据通常存在各种不完美这些问题若不处理将直接影响模型的训练效果与预测结果。常见的数据清洗步骤包括处理缺失值、重复值和异常值。
处理缺失值
缺失值是数据预处理中最常见的问题之一。缺失值的处理方式有很多种包括删除缺失值所在的行、用统计量如均值、中位数等填充或使用插值法、建模填充等高级方法。以下是几种处理缺失值的方式 删除缺失值当缺失值的比例较小或该特征对模型无关紧要时可以选择直接删除这些数据行。Pandas库中的dropna()函数可以方便地执行这一操作 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()函数可以直接进行填充操作 # 用列的均值填充缺失值
df_filled df.fillna(df.mean())
print(df_filled)插值法填充对于时间序列数据或有序数据可以采用插值法来填充缺失值以保证数据的连续性和合理性。通过插值法可以根据数据的趋势进行预测填充 # 使用插值法填充缺失值
df_interpolated df.interpolate()
print(df_interpolated)处理重复值
重复值通常会降低模型的泛化能力使模型对某些特定模式产生偏倚。因此必须检测并处理重复数据。在Pandas中可以使用duplicated()和drop_duplicates()方法来检测和删除重复值。
# 检查重复值
duplicates df.duplicated()# 删除重复值
df_no_duplicates df.drop_duplicates()
print(df_no_duplicates)处理异常值
异常值outliers是指偏离数据整体分布规律的值它们可能对模型产生极大的负面影响。在处理异常值时可以采用统计分析法如箱线图法或基于算法的检测方法如局部异常因子。一种常见的处理方法是将异常值替换为特定的统计值或者通过过滤策略删除异常值。
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. 特征选择筛选与数据目标高度相关的特征
特征选择是机器学习中提高模型性能和可解释性的重要步骤。特征选择的目的是筛选出对目标变量最有帮助的特征同时删除不相关或冗余的特征以减少数据噪音、提高模型效率。
过滤法
过滤法通过统计指标如相关系数、卡方检验、互信息等来评估每个特征与目标变量之间的关联性。相关性高的特征保留相关性低的特征则删除。这种方法简单高效适用于大规模数据集。
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_iris# 加载Iris数据集
X, y load_iris(return_X_yTrue)# 选择与目标变量最相关的两个特征
selector SelectKBest(score_funcf_classif, k2)
X_new selector.fit_transform(X, y)
print(X_new)包装法
包装法则通过反复训练模型来评估特征的组合效果。递归特征消除Recursive Feature Elimination, RFE是一种常见的包装法通过递归地移除最不重要的特征最终选出最优特征子集。
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier# 使用随机森林作为基模型
model RandomForestClassifier()# 实例化递归特征消除工具
rfe RFE(estimatormodel, n_features_to_select2)# 进行特征选择
X_rfe rfe.fit_transform(X, y)
print(X_rfe)嵌入法
嵌入法则结合了模型训练和特征选择过程直接通过模型的权重或特征重要性来决定特征的去留。例如决策树和随机森林等模型本身就能够评估特征的重要性。
# 使用随机森林评估特征重要性
model.fit(X, y)
importances model.feature_importances_# 打印特征的重要性
for i, importance in enumerate(importances):print(fFeature {i}: Importance {importance})特征选择不仅能够提高模型的性能还可以减少过拟合风险使模型的泛化能力更强。通过合理选择特征可以有效提高机器学习模型的精度和效率。 3. 特征工程数据转换与生成新特征的多样化方法
特征工程是一项非常关键的任务涉及对原始数据进行处理、转化甚至生成新特征。高质量的特征工程可以极大提升模型的表现。特征工程包括对连续变量的处理、离散化以及生成派生特征等。
数值特征的处理
数值型特征往往需要进行适当的变换以便更好地用于机器学习模型中。常见的操作包括对数变换、平方根变换等以解决特征的分布不均衡问题。
import numpy as np# 对数变换
df[log_Age] np.log(df[Age] 1)# 平方根变换
df[sqrt_Age] np.sqrt(df[Age])离散化
对于连续变量可以将其离散化为多个区间从而帮助模型更好地捕捉变量的分布特征。cut()函数可以将数据分箱处理
# 使用Pandas对连续变量进行分箱
df[Age_binned] pd.cut(df[Age], bins[0, 20, 40, 60, 80], labels[Young, Adult, Middle-aged, Senior])
print(df)派生特征
派生特征是从已有数据中创建的新特征。例如在时间序列数据中可以提取出月份、季度等时间特征这样能够增强模型对时间模式的捕捉能力。
# 提取日期特征
df[date] pd.to_datetime(df[date])
df[month] df[date].dt.month
df[quarter] df[date].dt.quarter特征工程通过合理转换与生成特征能够帮助模型更好地学习数据中的模式提高预测效果。