目录
[二、数据变换:重塑数据的 "形状"](#二、数据变换:重塑数据的 “形状”)
机器学习小白必看:数据预处理实战笔记
最近投身于机器学习的学习海洋,今天在学习过程中接触到了数据预处理这个极为关键的板块。一开始,我对它的重要性认识不足,总觉得直接拿数据去训练模型就好。但深入学习后才惊觉,数据预处理简直是机器学习模型能否良好运行的基石。原始数据往往存在各种问题,就像一块未经雕琢的璞玉,充满瑕疵,而数据预处理就是那精细的雕琢过程,让数据变得干净、整齐且易于模型 "理解"。接下来就和大家分享下我今天的学习成果。
一、数据清洗:让数据纯净如新
在实际的数据集中,缺失值、异常值和重复值就像隐藏在暗处的 "小麻烦",随时可能影响模型的性能。
1、缺失值处理:
比如在一个记录乘客信息的数据集中,部分乘客的年龄数据缺失。我学到了几种处理方式:
(1)删除法:如果缺失值所在的行或列包含的有效信息较少,删除这些数据对整体影响不大时,就可以采用删除法。但要是数据本来就不多,删除太多含缺失值的样本,可能会导致关键信息丢失,所以得谨慎使用。
(2)填充法:这是我觉得很巧妙的方法。对于像年龄这样的数值型数据,如果有缺失,计算其他非缺失年龄的均值或中位数,然后用这个均值或中位数去填补缺失值。我用 Python 实现了均值填充,代码如下:
python
import pandas as pd
data = pd.read_csv('your_data.csv')
age_mean = data['Age'].mean()
data['Age'].fillna(age_mean, inplace=True)
运行这段代码,就能把数据集中缺失的年龄值用计算出的均值填充上,让数据集在年龄这一特征上更加完整。
2、异常值处理
异常值就像是数据集中的 "捣蛋鬼",会干扰模型的正常学习。在分析商品价格数据时,发现有个别价格明显偏离正常范围。检测异常值可以用一些统计方法,比如计算 Z - score,它能衡量数据点偏离均值的程度。代码实现如下:
python
from scipy import stats
import pandas as pd
data = pd.read_csv('product_price_data.csv')
z = np.abs(stats.zscore(data['Price']))
threshold = 3
outliers = data[(z > threshold).any(axis = 1)]
这里通过计算价格列的 Z - score,设置阈值为 3,把那些 Z - score 大于 3 的数据点识别为异常值。对于这些异常值,可以选择删除,或者用合理的值(比如中位数)进行替换。
3、重复值处理
重复值的出现会增加计算量,还可能干扰模型对数据真实特征的学习。在处理用户订单数据时,发现有重复的订单记录。用 pandas 库可以轻松删除这些重复值:
python
import pandas as pd
data = pd.read_csv('order_data.csv')
data = data.drop_duplicates()
这样就能确保数据集中的每一条订单记录都是唯一的,让数据更加简洁有效。
二、数据变换:重塑数据的 "形状"
为了让数据更好地适配机器学习模型,需要对数据进行各种变换操作。
1、归一化
归一化能把数据的取值范围缩放到一个特定区间,像 [0, 1] 或 [-1, 1]。在处理包含不同特征的数据时,比如既有年龄(范围可能是 0 - 100),又有收入(可能是几千到几十万),如果不进行归一化,收入这种较大范围的特征可能会在模型训练中占据主导地位,掩盖了年龄等其他特征的影响。用 Min - Max Scaler 实现归一化的代码如下:
python
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data = pd.read_csv('your_data.csv')
scaler = MinMaxScaler()
data[['Age', 'Income']] = scaler.fit_transform(data[['Age', 'Income']])
这段代码把数据集中的年龄和收入特征进行了归一化处理,让它们在模型训练中能 "公平竞争",发挥各自应有的作用。
2、标准化
标准化则是让数据符合均值为 0,标准差为 1 的正态分布。对于很多机器学习算法来说,这种分布的数据能让模型更快收敛,提高训练效率。用 StandardScaler 实现标准化:
python
from sklearn.preprocessing import StandardScaler
import pandas as pd
data = pd.read_csv('your_data.csv')
scaler = StandardScaler()
data[['Feature1', 'Feature2']] = scaler.fit_transform(data[['Feature1', 'Feature2']])
通过标准化,数据的分布更加规整,模型在学习数据特征时会更加高效。
三、总结与展望
今天学习的这些数据预处理知识,看似简单,实则是机器学习中不可或缺的重要环节。经过数据清洗和变换,数据变得更加 "优质",为后续模型的训练打下了坚实基础。通过自己的实践和代码复现,我对这些方法有了更深刻的理解。在未来的学习中,我还会继续深入探索数据预处理的其他方法,比如数据集成、特征选择等,不断提升自己对数据的处理能力,期待能在机器学习这条道路上越走越远,用数据挖掘出更多有价值的信息。希望我的这些学习分享能给同样在机器学习领域摸索的小伙伴们一些启发,大家一起加油!