数据预处理流程图(Markdown格式):
1. 数据清洗(Data Cleaning)
目标: 处理缺失值、重复值和异常值。
常用函数:
- 删除/填充缺失值:
sklearn.impute.SimpleImputer
- 处理重复值:
pandas.DataFrame.duplicated
使用场景:
在数据分析中,数据集可能包含缺失值或重复值。例如,在鸢尾花数据集中,假设某些特征值缺失。
示例代码:
import pandas as pd
from sklearn.impute import SimpleImputer
# 创建示例数据集(带缺失值)
data = {
'sepal_length': [5.1, 3.5, np.nan, 6.7],
'sepal_width': [3.6, 2.3, np.nan, 3.3],
'petal_length': [1.4, 0.2, 1.3, 2.5],
'species': ['setosa', 'versicolor', 'virginica', 'setosa']
}
df = pd.DataFrame(data)
# 使用SimpleImputer填充缺失值(mean策略)
imputer = SimpleImputer(strategy='mean')
df_filled = imputer.fit_transform(df[['sepal_length', 'sepal_width']])
print("原始数据:\n", df)
print("\n填充后数据:\n", df_filled)
2. 特征工程(Feature Engineering)
目标: 创建新的特征或从现有数据中提取有用信息。
常用函数:
- 多项式特征生成:
sklearn.preprocessing.PolynomialFeatures
- 文本特征向量化:
sklearn.feature_extraction.text.CountVectorizer
使用场景:
在自然语言处理任务中,需要将文本数据转换为数值特征。例如,在情感分析任务中,可以使用CountVectorizer
提取单词频率。
示例代码:
from sklearn.feature_extraction.text import CountVectorizer
# 创建示例文本数据集
texts = [
"This is a positive review",
"This is a negative review",
"This is an amazing product",
"This is a terrible product"
]
# 使用CountVectorizer提取特征
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
print("特征名称:", vectorizer.get_feature_names())
print("\n文本向量化结果:\n", X.toarray())
3. 数据标准化(Normalization)和归一化(Standardization)
目标: 标准化数据范围,使其具有相同的尺度。
常用函数:
- 标准化:
sklearn.preprocessing.MinMaxScaler
- 归一化:
sklearn.preprocessing.StandardScaler
使用场景:
在机器学习模型中,不同特征的尺度差异可能会影响模型性能。例如,在K-means聚类算法中,通常需要对数据进行标准化处理。
示例代码:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 创建示例数据集(带不同尺度的特征)
data = {
'age': [20, 30, 40, 50],
'income': [20000, 30000, 40000, 50000]
}
df = pd.DataFrame(data)
# 使用MinMaxScaler进行标准化
scaler_minmax = MinMaxScaler()
scaled_minmax = scaler_minmax.fit_transform(df)
print("标准化结果:\n", scaled_minmax)
# 使用StandardScaler进行归一化
scaler_standard = StandardScaler()
scaled_standard = scaler_standard.fit_transform(df)
print("\n归一化结果:\n", scaled_standard)
4. 数据编码(Encoding)
目标: 将非数值型数据转换为数值型数据。
常用函数:
- 类别变量编码:
sklearn.preprocessing.LabelEncoder
- 独热编码:
sklearn.preprocessing.OneHotEncoder
使用场景:
在分类任务中,类别特征需要被编码为数值。例如,在Titanic生存预测问题中,乘客的性别(男/女)可以使用LabelEncoder进行编码。
示例代码:
from sklearn.preprocessing import LabelEncoder
# 创建示例数据集(带类别变量)
data = {
'gender': ['male', 'female', 'female', 'male'],
'age': [20, 30, 40, 50]
}
df = pd.DataFrame(data)
# 使用LabelEncoder进行编码
label_encoder = LabelEncoder()
df['gender_encoded'] = label_encoder.fit_transform(df['gender'])
print("原始数据:\n", df)
print("\n编码后结果:\n", df['gender_encoded'])
5. 数据分割(Splitting Data)
目标: 将数据集划分为训练集和测试集。
常用函数:
- 数据分割:
sklearn.model_selection.train_test_split
使用场景:
在模型训练过程中,通常需要将数据集划分为训练集和测试集,以评估模型的泛化能力。
示例代码:
from sklearn.model_selection import train_test_split
# 创建示例数据集
X = [[1, 2], [3, 4], [5, 6], [7, 8]]
y = [0, 1, 0, 1]
# 使用train_test_split分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("训练集特征:\n", X_train)
print("\n测试集特征:\n", X_test)
print("\n训练集标签:\n", y_train)
print("\n测试集标签:\n", y_test)
总结
以上是常见的数据预处理方法及其在不同任务中的应用示例。通过合理地对数据进行预处理,可以显著提高机器学习模型的性能和准确性。