【机器学习|学习笔记】组合特征(Feature Combinations)是提升模型性能、挖掘特征交互信息、增强非线性表达能力的有效手段。
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147196847
下面我们将从概念、动机、发展趋势、自动化方法逐步讲清楚,并辅以完整 Python 示例来帮助理解和实战。
Color = ['Red', 'Blue', 'Green']
Size = ['S', 'M', 'L']
Color_Size = ['Red_S', 'Blue_M', 'Green_L']
原因 | 说明 |
---|---|
捕捉非线性关系 | 如“职业 = 医生 + 收入 > 1万”比“收入”或“职业”单独更具预测力 |
增强模型能力 | 线性模型无法自动建交互项,需人为提供组合特征 |
提升性能 | 在推荐系统、广告排序中组合特征显著提高AUC与CTR预测能力 |
降维与稀疏建模 | 在高维稀疏数据中,组合特征+Embeddings 是常用方式(如Wide & Deep) |
import pandas as pd
df = pd.DataFrame({
'Color': ['Red', 'Blue', 'Green'],
'Size': ['S', 'M', 'L']
})
# 拼接组合特征
df['Color_Size'] = df['Color'] + "_" + df['Size']
print(df)
PolynomialFeatures
自动构造组合项(数值特征)from sklearn.preprocessing import PolynomialFeatures
import numpy as np
X = np.array([[1, 2],
[3, 4],
[5, 6]])
# 包含交互项和高次项(比如 x1*x2, x1^2, x2^2)
poly = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
X_poly = poly.fit_transform(X)
print("新特征名:", poly.get_feature_names_out(['x1', 'x2']))
print("组合特征:\n", X_poly)
sklearn.preprocessing.FunctionTransformer
+ OneHotEncoder
)from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, FunctionTransformer
# 组合两个类别特征列
def combine_cat_features(X):
return (X[:, 0] + "_" + X[:, 1]).reshape(-1, 1)
df = pd.DataFrame({
'Color': ['Red', 'Blue', 'Green'],
'Size': ['S', 'M', 'L']
})
pipe = Pipeline(steps=[
('combine', FunctionTransformer(combine_cat_features, validate=False)),
('encode', OneHotEncoder(sparse=False))
])
X_new = pipe.fit_transform(df[['Color', 'Size']])
print("组合特征编码:\n", X_new)
方法 | 说明 |
---|---|
树模型自动学习交互特征 | 如 XGBoost / LightGBM / CatBoost 能捕捉高阶交叉 |
Wide & Deep 网络结构 | Wide部分手动交叉 + Deep部分自动提取组合 |
Factorization Machines(FM) | 自动建二阶交互项,适合推荐系统稀疏数据 |
特征组合搜索算法 | 如 Deep Feature Synthesis(DFS)、AutoCross、AutoML |
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame({
'Color': ['Red', 'Blue', 'Green', 'Red', 'Blue'],
'Size': ['S', 'M', 'L', 'XL', 'S'],
'Label': [1, 0, 1, 0, 1]
})
# 编码类别
for col in ['Color', 'Size']:
df[col] = LabelEncoder().fit_transform(df[col])
# 添加组合特征
df['Color_Size'] = df['Color'].astype(str) + "_" + df['Size'].astype(str)
df['Color_Size'] = LabelEncoder().fit_transform(df['Color_Size'])
# 建模
X = df[['Color', 'Size', 'Color_Size']]
y = df['Label']
model = RandomForestClassifier().fit(X, y)
# 特征重要性
print("\n特征重要性:", dict(zip(X.columns, model.feature_importances_)))
阶段 | 特征构造方式 | 举例 |
---|---|---|
传统ML | 人工交叉、统计筛选 | 特征工程主导 |
自动化ML | AutoFeature / DFS / TFX | 自动组合+评分筛选 |
深度学习 | Wide & Deep、DeepFM、Attention机制 | 自动学习高阶特征交互 |
解释性增强 | SHAP交叉分析、组合可视化 | 发现隐藏模式 |
问题 | 解答 |
---|---|
什么是组合特征? | 将两个或多个原始特征构造新特征 |
为什么要用它? | 捕捉特征之间的交互,提高表达能力 |
怎么构造? | 拼接、Polynomial、自动工具、模型内部 |
怎么评估? | 信息增益、模型重要性、交叉验证 |
如何自动化? | AutoML工具、Wide&Deep网络、FM算法 |