机器学习数据预处理特征构造超通俗完整版特征构造 用原始数据“造”出更有用的新特征是数据挖掘、竞赛上分、论文实验的核心技能本科/研究生一看就懂、一学就会。一、什么是特征构造为什么必须做一句话理解从已有的特征里加工、组合、提取、变换创造出模型更容易学习的新特征。举个最简单的例子原始特征身高、体重构造特征BMI 体重 / 身高²→ 比单独身高、体重更能预测健康/体重等级为什么要做特征构造原始信息太“粗”模型学不到深层规律提升模型精度简单模型也能拟合复杂关系注入业务知识让模型更贴合实际场景小样本也能变强不用堆数据也能提效果二、最常用的 6 大类特征构造方法全是干货1. 特征组合交互项把两个或多个特征相乘/相除/加减捕捉联合影响。例子房间数 × 低收入比例、面积 × 楼层公式x1 × x2作用让线性模型也能学非线性关系2. 多项式特征升维对特征做平方、立方、交叉项扩展表达能力。例子RM→RM²、RM×LSTAT工具PolynomialFeatures适用线性回归、逻辑回归、SVM3. 函数变换非线性构造用数学函数把特征变得更“规整”。对数log(x)→ 处理偏态数据价格、收入倒数1/x→ 强化距离、浓度类差异根号sqrt(x)→ 缓和极端值三角函数sin / cos→ 处理时间周期4. 时间特征提取超级常用从时间戳里拆出有用信息年/月/日/小时/星期是否周末、是否月初、是否节假日时间差距今多少天、间隔时长5. 分桶/分箱连续→离散把连续数字变成等级类别降低噪声、增强鲁棒性。等宽分箱、等频分箱、业务分箱例子年龄 → 青年/中年/老年收入 → 低/中/高6. 统计聚合特征多表必用按用户/物品/地区分组计算统计量均值、总和、最大值、最小值、标准差近7天均值、近30天总和、波动程度适用用户行为数据、订单数据、时序数据三、特征构造的标准流程背下来直接用理解数据与业务知道每个字段含义、目标是什么观察相关性看哪些特征和目标关系强设计新特征组合、变换、提取、分桶构造特征代码实现检验有效性看相关性、特征重要度、模型分数去冗余去掉没用、重复、噪声特征四、完整实战代码波士顿房价预测包含多项式构造、函数变换、特征重要性、模型对比直接复制可运行。importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsfromsklearn.datasetsimportload_bostonfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportPolynomialFeatures,StandardScalerfromsklearn.linear_modelimportLinearRegression,RidgeCVfromsklearn.metricsimportmean_squared_error,r2_scoreimportwarnings warnings.filterwarnings(ignore)# # 1. 加载数据# bostonload_boston()datapd.DataFrame(boston.data,columnsboston.feature_names)data[MEDV]boston.target# 房价目标print(数据形状,data.shape)print(data.head())# # 2. 查看相关性找构造思路# plt.figure(figsize(14,8))sns.heatmap(data.corr(),annotTrue,cmapReds,fmt.2f)plt.title(特征相关性热力图)plt.show()# # 3. 特征构造 1多项式交互特征# key_feats[RM,LSTAT,PTRATIO]Xdata[key_feats]ydata[MEDV]# 二阶多项式扩展polyPolynomialFeatures(degree2,include_biasFalse)X_polypoly.fit_transform(X)feat_namespoly.get_feature_names_out(key_feats)X_poly_dfpd.DataFrame(X_poly,columnsfeat_names)print(构造后特征)print(feat_names)# # 4. 特征构造 2函数变换特征# data[LOG_CRIM]np.log1p(data[CRIM])# 对数data[SQRT_TAX]np.sqrt(data[TAX])# 根号data[DIS_INV]1.0/(data[DIS]1e-6)# 倒数# # 5. 特征重要性可视化# scalerStandardScaler()X_stdscaler.fit_transform(X_poly_df)modelLinearRegression()model.fit(X_std,y)imppd.Series(model.coef_,indexfeat_names).sort_values()plt.figure(figsize(12,6))imp.plot(kindbarh,colorpurple)plt.title(构造特征重要性)plt.grid(True)plt.show()# # 6. 模型训练与评估# X_train,X_test,y_train,y_testtrain_test_split(X_poly_df,y,test_size0.2,random_state42)# 岭回归ridgeRidgeCV(alphasnp.logspace(-3,3,50),cv5)ridge.fit(X_train,y_train)y_predridge.predict(X_test)msemean_squared_error(y_test,y_pred)r2r2_score(y_test,y_pred)print(fMSE:{mse:.2f})print(fR²:{r2:.4f})# # 7. 预测结果可视化# plt.figure(figsize(10,6))plt.scatter(y_test,y_pred,alpha0.7,colorblue)plt.plot([0,50],[0,50],r--,lw2)plt.xlabel(真实房价)plt.ylabel(预测房价)plt.title(真实 vs 预测)plt.grid()plt.show()五、特征构造的优点 缺点优点大幅提升模型效果线性模型 R² 可从 0.6 → 0.8小样本神器数据少也能明显提分可解释性极强新特征含义清晰融入业务知识比纯黑盒模型更可靠缺点依赖经验新手不容易想到好特征容易维度爆炸多项式会疯狂增加特征数可能引入冗余/噪声需要配合特征选择六、特征构造 vs 特征选择 vs 数据转换一张表看懂方法作用一句话特征构造造新特征从0到1创造更强特征特征选择挑好特征从多到少保留关键特征数据转换改特征格式缩放、编码、分桶、变换PCA降维压缩特征把高维变低维丢语义七、什么时候最适合做特征构造用线性模型、LR、SVM时 → 必须构造非线性特征数据量小、维度低→ 特征构造收益最大竞赛/科研提分 → 核心上分手段需要高可解释性→ 金融、医疗、政务场景时序/表格数据 → 时间特征聚合特征必做八、总结面试/笔记万能版特征构造 用原始数据加工更强特征6大方法组合、多项式、函数变换、时间提取、分箱、统计聚合线性模型 特征构造 低成本非线性拟合构造 → 选择 → 训练是数据建模黄金流程好特征 好模型是机器学习最朴素的真理