数据预处理和特征工程是机器学习中的两个关键步骤,直接影响模型的性能和预测结果。这两个步骤主要包括对数据的清洗、转换、缩放和特征提取等操作。
数据预处理是指在将数据输入模型之前对数据进行清理和准备的过程。其目的是提高数据质量,使模型能够更好地学习和预测。
数据清洗:
数据类型转换:
数据缩放:
异常值处理:
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder
# 示例数据
data = {'Age': [25, np.nan, 35, 50, np.nan], 'Salary': [50000, 60000, np.nan, 90000, 100000], 'City': ['New York', 'Paris', 'Paris', 'London', np.nan]}
df = pd.DataFrame(data)
# 处理缺失值
imputer = SimpleImputer(strategy='mean')
df['Age'] = imputer.fit_transform(df[['Age']])
df['Salary'] = imputer.fit_transform(df[['Salary']])
# 类别型转换
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoded_cities = encoder.fit_transform(df[['City']])
encoded_df = pd.DataFrame(encoded_cities, columns=encoder.get_feature_names_out(['City']))
df = pd.concat([df.drop('City', axis=1), encoded_df], axis=1)
# 数据标准化
scaler = StandardScaler()
df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])
print(df)
特征工程是指通过从原始数据中创建新的特征来提升模型性能的过程。有效的特征工程可以显著提高模型的准确性。
特征选择:
特征提取:
特征构造:
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.preprocessing import PolynomialFeatures
# 示例数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
y = np.array([0, 1, 0, 1])
# 特征选择:使用 ANOVA F-测试选择 2 个最好的特征
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print("Selected Features:\n", X_new)
# 特征提取:使用 PCA 将数据降到 2 维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("PCA Transformed Features:\n", X_pca)
# 特征构造:生成多项式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)
print("Polynomial Features:\n", X_poly)
数据预处理和特征工程是机器学习工作流中的重要部分。良好的数据预处理可以消除噪声和偏差,提高模型的泛化能力。有效的特征工程可以挖掘出数据中的潜在模式和结构,从而显著提高模型的性能。在实际项目中,这些步骤往往是一个迭代的过程,需要根据模型的表现不断调整和优化。