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

python-----机器学习中常用的数据预处理

在机器学习项目中,数据预处理是构建高性能模型的基础环节。高质量的数据预处理往往比复杂的算法选择对最终结果的影响更大。本文将全面介绍数据预处理的流程、技术和最佳实践。

为什么需要数据预处理?

现实世界的数据几乎总是"脏"的,常见问题包括:

  1. 缺失值
  2. 异常值
  3. 不一致的格式
  4. 噪声数据
  5. 不相关的特征

数据预处理的目标是将原始数据转化为适合机器学习算法的高质量数据集。

2. 数据预处理操作

2.1 数据分割

from sklearn.model_selection import train_test_split# 分离特征和目标变量
X = data.drop('Target', axis=1)
y = data['Target']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) #测试集占数据的20% 随机种子42个

2.2处理缺失值:​

isnull():

判断是否为空,是则是True不空则是False,将数据sum()即可获得究竟有几个缺失值。

# 检查缺失值
print(data.isnull().sum())# 处理方法
# 1. 删除缺失值
data_clean = data.dropna()# 2. 填充缺失值
data['Age'].fillna(data['Age'].median(), inplace=True)  # 数值型
data['Category'].fillna(data['Category'].mode()[0], inplace=True)  # 类别型

各列空值的个数

dropna():去除NaN值

2.3 数据收集与理解

import pandas as pd# 加载数据
data = pd.read_csv('dataset.csv')# 初步探索
print(data.head())  # 查看前几行
print(data.info())  # 数据概览
print(data.describe())  # 统计摘要

2.3特征标准化处理:

# 标准化 (Z-score标准化)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['Age', 'Income']] = scaler.fit_transform(data[['Age', 'Income']])# 归一化 (Min-Max缩放)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['Age', 'Income']] = scaler.fit_transform(data[['Age', 'Income']])

2.4 特征选择

选择与对模型训练更重要的特征

# 基于相关性的特征选择
correlation_matrix = data.corr()
high_corr_features = correlation_matrix[abs(correlation_matrix['Target']) > 0.5].index
data = data[high_corr_features]# 使用方差阈值
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(threshold=0.1)
selected_features = selector.fit_transform(data)

2.5 处理类别不平衡

当不同类别的数据及其不平衡的时候,为例更好的效果,可以采用上采样和下采样的方法来平衡数据。

上采样:在少的数据内加入插值,使少的数据类型等于多的

from imblearn.over_sampling import SMOTEsmote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

下采样:减少多的数据类型使其与少的数据类型数目相同

positive = data[data['Class']==0] #多的类型
negetive = data[data['Class']==1] #少的类型
positive = positive.sample(len(negetive)) #使多数类折掉一部分和少数类一样多
data=pd.concat([positive,negetive]) #将两个数据结合
x_1 = data.drop("Class",axis=1) #去除最后一列剩下的作为x
y_1 = data.Class #最后一列作为y

2.6 文本数据预处理

有时候,样本数据是文字,为了能够训练我们需要将文字转换为向量

from sklearn.feature_extraction.text import TfidfVectorizertfidf = TfidfVectorizer(max_features=1000, stop_words='english')
X_text = tfidf.fit_transform(data['Text_Column'])

fit_transform()实际上是两个操作的组合:

1.1 fit()阶段 - 学习文本特征

统计所有文档中的词汇(构建词汇表)评估词的重要性,确定特征空间维度​​,基于所有唯一词汇建立特征维度

1.2 transform()阶段 - 实际转换:​​将每个文档转换为向量​

转换成向量示例:

这样可以进行训练

2.7 时间序列预处理

# 滚动窗口特征
data['Rolling_Mean_7'] = data['Value'].rolling(window=7).mean()
data['Rolling_Std_7'] = data['Value'].rolling(window=7).std()# 差分处理
data['Value_Diff'] = data['Value'].diff()

2.8特征创建

# 从现有特征创建新特征
data['Income_to_Age_Ratio'] = data['Income'] / data['Age']# 从日期提取特征
data['Date'] = pd.to_datetime(data['Date'])
data['Year'] = data['Date'].dt.year
data['Month'] = data['Date'].dt.month
data['Day'] = data['Date'].dt.day

5. 预处理最佳实践

  1. ​保持一致性​​:对训练集和测试集应用相同的预处理步骤
  2. ​避免数据泄露​​:只在训练集上拟合预处理器,然后应用到测试集.
  3. ​记录所有步骤​​:确保预处理过程可重现

  4. ​迭代优化​​:根据模型表现调整预处理策略

  5. ​可视化验证​​:通过图表检查预处理效果

结语

数据预处理是机器学习项目中至关重要的一环。通过系统性地清洗、转换和增强数据,我们可以显著提高模型的性能和鲁棒性。本文介绍的技术和代码示例为常见的数据预处理任务提供了实用指南,但实际应用中需要根据具体数据和问题进行调整和扩展。

http://www.dtcms.com/a/338408.html

相关文章:

  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【数据分析】R语言在生态学数据分析中的应用:从数据处理到可视化
  • 美图披露半年报:AI应用取得突破,净利润同比大增71.3%
  • C++11列表初始化 {}
  • GitHub Actions 从核心思想到最佳实践
  • 宋红康 JVM 笔记 Day04|双亲委派机制、沙箱安全机制、类的自动使用与被动使用
  • 电子电气架构 --- 软件会给汽车带来哪些变化?
  • 鸿蒙生态7月技术月报 | HarmonyOS 5.1 开发特性详解
  • 蓝池参与雅江水电工程融资,助力国家基础设施建设与经济发展
  • 08.常见文本处理工具
  • 03.文件管理和操作命令
  • 解读60页全面认识大数据基础知识培训【附全文阅读】
  • 8.18 打卡 DAY 45 Tensorboard使用介绍
  • Mysql——前模糊索引失效原因及解决方式
  • 深度强化学习之前:强化学习如何记录策略与价值?
  • Java面试题储备14: 使用aop实现全局日志打印
  • Nodejs学习
  • 【SkyWalking】单节点安装
  • Linux命令大全-rmdir命令
  • Java中的 “128陷阱“
  • vue从入门到精通:轻松搭建第一个vue项目
  • go语言条件语if …else语句
  • rem 响应式布局( rem 详解)
  • 鼠标右键没有“通过VSCode打开文件夹”
  • FreeRTOS【3-1】创建第一个多任务程序复习笔记
  • STM32驱动SG90舵机全解析:从PWM原理到多舵机协同控制
  • Sring框架-IOC篇
  • ​​Java核心知识体系与集合扩容机制深度解析​
  • JavaSE高级-02
  • JDBC的使用