人工智能特征工程之数据清洗

290 阅读7分钟

前言

前文中笔者为大家讲解了人工智能特征工程中的数据理解,详细的了解和捕捉数据中的微妙关系往往是我们模型成功的基础,那么这篇文章,笔者就带大家来学习了解一下人工智能特征工程的另一项技术--数据清洗。

一、 定义

数据清洗是我们特征工程中的至关重要的一步,它涉及了识别、修复、替换或删除数据集中的不正确、不完整、不精确或不相关的数据。在人工智能自然语言处理的任务中,一般对于数据不完整,有残缺或者数据来源广,数据复杂噪音多时我会首先使用数据清洗,然后再进行分词等等操作。

二、数据清洗拓扑图

对数据进行重新审查和校验的过程,目的在于删除重复信息纠正存在的错误并提供数据一致性

image.png

三、 数据清洗步骤方法

在开始介绍和实战这些方法之前,你需要准备好环境和数据,如下:

import pandas as pd
import numpy as np

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

1. 处理缺失值

缺失值是指数据集中的空白、未知或未收集的数据点。

  • 删除:如果缺失值数量较少,可以直接删除含有缺失值的行或列。
  • 填充:用某个值填充缺失值,常见的填充方法包括:
    • 均值/中位数填充:对数值型特征使用均值,对分类型特征使用众数。
    • 常数填充:用一个固定值(如0)填充。
    • 前向/后向填充:用前一个或后一个非缺失值填充。
    • 预测模型填充:使用回归、决策树等模型预测缺失值。
# 处理缺失值
data.fillna(data.mean(), inplace=True)  # 使用均值填充数值型特征
data.fillna('Missing', inplace=True)  # 使用字符串填充分类型特征

2. 去除噪声

噪声是指数据中的随机波动或异常值,它们可能由测量误差、数据输入错误或自然变异引起。

  • 统计方法:使用统计测试(如Z-score或IQR)识别异常值。
  • 可视化方法:通过箱线图等可视化工具识别异常值。
  • 业务逻辑:根据业务知识定义异常值,并进行处理。
# 去除噪声
z_scores = (data[data.columns] - data[data.columns].mean()) / data[data.columns].std()
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3).all(axis=1)
data = data[filtered_entries]

3. 数据格式标准化(多用在处理一些评论信息等)

确保数据格式一致,便于处理。

  • 日期时间格式:将日期时间字符串转换为统一的日期时间格式。
  • 数值格式:确保所有数值数据使用相同的格式和精度。
  • 文本格式:例如,将所有文本转换为小写,去除多余的空格。
# 数据格式标准化
data['date'] = pd.to_datetime(data['date'])  # 转换日期格式

4. 数据类型转换

将数据转换为适合分析的格式。

  • 数值型:确保数值数据正确地表示为整数或浮点数。
  • 分类型:将文本标签转换为数值编码,如独热编码或标签编码。
  • 布尔型:将某些特征转换为布尔值(True/False)。
# 数据类型转换
data['category'] = data['category'].astype('category')

5. 处理重复数据(仅作了解即可,实战中一般不处理)

删除或合并数据集中的重复记录。

  • 删除重复行:使用drop_duplicates()方法。
  • 合并重复列:将包含相似信息的列合并为一个。

6. 规范化和归一化

将数据缩放到特定的范围或分布。

  • 最小-最大归一化:将数据缩放到[0, 1]区间。
  • Z-score标准化:将数据转换为均值为0,标准差为1的分布。
# 规范化和归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data['feature'] = scaler.fit_transform(data[['feature']])

7. 处理文本数据

对文本数据进行预处理。

  • 分词:将文本分割成单词或短语。
  • 去除停用词:删除常见的无意义词,如“the”、“is”、“in”。
  • 词干提取:将词汇还原为基本形式,如将“running”还原为“run”。
  • 词形还原:将词汇还原为词典中的形式。
# 处理文本数据
import re
data['text'] = data['text'].str.lower().str.replace('[^a-zA-Z]', ' ')

8. 处理缺失数据的高级技术

  • K最近邻(KNN):用KNN算法预测缺失值。
  • 多重插补:创建多个完整的数据集,每个数据集都有不同的缺失值插补。

最后:

# 保存清洗后的数据集
data.to_csv('cleaned_data.csv', index=False)

什么,上面有点太干了或者太书面了看不懂 ? OK ,上例子!

四、故事讲解数据清洗

想象一下,此时此刻,你是一位厨师,并准备做一顿美味的晚餐。你的厨房里堆满了各种食材,但这些食材状态不一:有些蔬菜已经烂掉了,有些肉类可能不太新鲜,还有些香料已经过期。在开始烹饪之前,你需要对这些食材进行挑选和处理,确保你使用的食材是最适合你菜谱的。这个过程就像是数据清洗在人工智能特征工程中的作用。

1. 处理缺失值

这就像是你发现食谱中的某些食材缺失了。例如,你的食谱需要胡萝卜,但你的胡萝卜不见了。你可以选择用其他蔬菜代替(填充缺失值),或者干脆从食谱中去掉胡萝卜这道菜(删除缺失值)。

2. 去除噪声

假设你买了一箱苹果,但其中一些已经烂了。你需要挑出那些烂苹果,只留下好的,这样你才能做出美味的苹果派。在数据中,这些烂苹果就像是异常值,你需要识别并去除它们,以保证数据的质量。

3. 数据格式标准化

你准备做意大利面,但你的厨房里有的是英式计量杯(毫升),而食谱上写的是意大利计量单位(升)。你需要将计量单位统一,就像在数据清洗中,你需要确保所有数据的格式一致,比如日期格式统一为YYYY-MM-DD。

4. 数据类型转换

你买了一些鸡肉,但食谱需要的是鸡肉末。你需要将鸡肉切成小块,然后剁成肉末。在数据清洗中,这就像是将分类数据(如“高”、“中”、“低”)转换为数值型数据,以便模型能够更好地处理。

5. 处理重复数据

你发现你的食材清单上,土豆被写了两次,一次是“土豆”,一次是“爱丽丝的土豆”。在数据清洗中,你需要识别并处理这些重复的数据,确保每项食材只记录一次。

6. 规范化和归一化

你在做蛋糕时,需要确保所有的原料都是按照一定比例混合的。这就像是数据清洗中的规范化和归一化,你需要确保所有的特征都在相同的规模上,以便模型能够公平地对待每个特征。

7. 处理文本数据

你准备写一份菜单,但菜单上的字迹潦草,有些地方还有污渍。你需要清理这些字迹,确保菜单看起来整洁、易读。在数据清洗中,这就像是对文本数据进行预处理,比如去除停用词、进行词干提取等。

通过这些步骤,你最终会得到一组干净、整洁、一致的食材,就像数据科学家通过特征工程得到一组干净、有用的数据一样。这样,你就能做出一顿美味的晚餐,而数据科学家就能构建出一个有效的机器学习模型。

总得来说,数据清洗的目标就是提高数据质量,确保数据集对模型训练的有效性和可靠性。希望你能够掌握。

五、Reference

blog.csdn.net/qq_30031221…

以上就是笔者关于人工智能特征工程中的数据清洗技术的讲解,欢迎大家点赞,收藏,交流和关注,O(∩_∩)O谢谢!