前言
前文中笔者为大家讲解了人工智能特征工程中的数据理解,详细的了解和捕捉数据中的微妙关系往往是我们模型成功的基础,那么这篇文章,笔者就带大家来学习了解一下人工智能特征工程的另一项技术--数据清洗。
一、 定义
数据清洗是我们特征工程中的至关重要的一步,它涉及了识别、修复、替换或删除数据集中的不正确、不完整、不精确或不相关的数据。在人工智能自然语言处理的任务中,一般对于数据不完整,有残缺或者数据来源广,数据复杂噪音多时我会首先使用数据清洗,然后再进行分词等等操作。
二、数据清洗拓扑图
对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。
三、 数据清洗步骤方法
在开始介绍和实战这些方法之前,你需要准备好环境和数据,如下:
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
以上就是笔者关于人工智能特征工程中的数据清洗技术的讲解,欢迎大家点赞,收藏,交流和关注,O(∩_∩)O谢谢!