特征工程工具包对比评测:sklearn vs pandas vs feature-engine
在大模型训练中,特征工程是决定模型性能的关键环节。本文将从实际应用角度,对比三个主流特征工程工具包:scikit-learn、pandas 和 feature-engine。
数据准备与环境搭建
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.feature_extraction import FeatureHasher
import feature_engine
# 创建示例数据集
np.random.seed(42)
data = {
'age': np.random.randint(18, 80, 1000),
'income': np.random.normal(50000, 15000, 1000),
'education': ['High School', 'Bachelor', 'Master', 'PhD'] * 250,
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'] * 250,
'is_married': np.random.choice([0, 1], 1000)
}
df = pd.DataFrame(data)
print(df.head())
标准化处理对比
sklearn方法:
scaler = StandardScaler()
# 注意:sklearn不能直接处理分类变量
numeric_features = ['age', 'income']
df_scaled = df.copy()
df_scaled[numeric_features] = scaler.fit_transform(df[numeric_features])
pandas方法:
# pandas原生支持
numeric_features = ['age', 'income']
df_normalized = df[numeric_features].apply(lambda x: (x - x.mean()) / x.std())
feature-engine方法:
from feature_engine.scalers import StandardScaler
# feature-engine提供了更灵活的接口
fe_scaler = StandardScaler()
df_fe_scaled = fe_scaler.fit_transform(df[numeric_features])
分类变量编码对比
sklearn方法:
le = LabelEncoder()
# 需要手动处理每列
for col in ['education', 'city']:
df[col + '_encoded'] = le.fit_transform(df[col])
feature-engine方法:
from feature_engine.encoding import OrdinalEncoder
encoder = OrdinalEncoder()
df_encoded = encoder.fit_transform(df[['education', 'city']])
性能与易用性总结
- sklearn: 功能完善但API较复杂,适合大型项目
- pandas: 语法简洁,适合快速原型开发
- feature-engine: 提供更多高级功能,适合复杂特征工程场景
在实际大模型训练中,建议根据数据规模和团队技术栈选择合适的工具组合。

讨论