恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

特征工程实战全流程:从原始数据到房价预测 R² 0.82 的进阶之路

  • 首页
  • 资讯中心
  • /
  • 特征工程实战全流程:从原始数据到房价预测 R² 0.82 的进阶之路

相关资讯

删掉 App 也删不掉的痕迹:Loupe 演示 Keychain 如何跨重装记住你的安装次数 2026/10/12 5:59:05
日榜速报才过两天,中文教程就来了:vibe-wise 正在被中文圈盯上 2026/10/12 5:59:05
争议风暴眼:启动快 12 倍、运行慢 7.5 倍,scriptc 究竟是神器还是实验室玩具? 2026/10/12 5:59:05

最新资讯

Web Components核心API与跨框架实践:原生组件化全指南
Java接入大模型的正确姿势:框架停更不可怕,工程化才是关键
GPT-6模型家族选型实战:成本控制与长任务工作流管理
基于SSM+Vue的外来人员信息管理系统设计与实现
阶梯碳交易下含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度实现
在 Halcon 中,**形态学处理是 Blob 分析的“前置净化”步骤**,而 Blob 分析本身则是在净化后的区域上做“连通域分解与特征筛选”

今日推荐

Debian新手入门:从部署到日常操作的完整指南
MongoDB复制集扩缩容实战:从rs.add到选主事故复盘
条形码目标检测数据集实战:从YOLOv8训练到部署

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

特征工程实战全流程:从原始数据到房价预测 R² 0.82 的进阶之路

发布时间:2026/10/12 6:04:06
特征工程实战全流程:从原始数据到房价预测 R² 0.82 的进阶之路 摘要本文以 Kaggle 房价预测数据集为实战案例完整拆解特征工程全流程——从数据探索、特征清洗、特征转换到特征构建与特征选择手把手带你掌握每一步的实操方法与代码实现。通过系统化的特征工程模型 R² 从 0.65 提升至 0.82拟合度显著提升。适合机器学习初学者、数据科学从业者以及希望提升模型性能的算法工程师阅读。在机器学习领域有一句广为流传的话“数据决定了模型的上限而特征工程则是逼近这个上限的关键”。对于大多数实际场景原始数据往往存在缺失、冗余、格式不统一等问题无法直接输入模型。特征工程通过 “清洗、转换、构建、筛选” 四大核心步骤将原始数据提炼为更具代表性的特征最终实现模型性能的显著提升。本文将以 Kaggle 经典数据集 ——房价预测House Prices为例结合 Python 工具库pandas、scikit-learn 等完整拆解特征工程的全流程让理论落地于实战。一、特征工程的核心逻辑从 “原始数据” 到 “有效特征”特征工程并非机械的步骤堆砌而是围绕 “让特征贴合目标任务” 展开的系统性工作。其核心流程可概括为数据探索→特征清洗→特征转换→特征构建→特征选择。每个环节环环相扣数据探索是 “摸底”明确数据的类型、分布、缺失值等基础属性特征清洗是 “去噪”解决数据中的缺失、异常、重复问题特征转换是 “标准化”将不同类型特征数值、类别、时间转为模型可识别的格式特征构建是 “增值”基于业务逻辑创造更具预测价值的新特征特征选择是 “精炼”剔除冗余特征降低模型复杂度。本文将以 “预测房屋售价SalePrice” 为目标基于包含 1460 条房屋信息面积、年份、邻里环境等 80 个特征的数据集逐一演示每个环节的实操方法。二、数据探索摸清数据的 “脾气”数据探索的核心目标是 “知己知彼”—— 只有了解数据的基本特征后续处理才能有的放矢。常用工具包括 pandas数据概览、seaborn/matplotlib可视化分析。1. 数据加载与基础信息查看首先加载数据查看数据规模、类型及缺失值分布import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt 加载Kaggle房价预测数据集 df pd.read_csv(train.csv) print(f数据集规模{df.shape}) # 输出(1460, 81)含80个特征1个目标变量SalePrice print(\n数据类型与非空值统计) print(df.info()) # 区分数值型如GrLivArea地上面积、类别型如Neighborhood邻里特征 print(\n数值特征统计描述) print(df.describe()) # 查看均值、标准差、分位数初步判断分布2. 关键问题探查数据探索需重点关注三个核心问题目标变量分布、缺失值情况、特征与目标的关联性。1目标变量分布房价SalePrice是我们的预测目标其分布直接影响后续模型选择sns.histplot(df[SalePrice], kdeTrue) plt.title(原始房价分布) plt.show()结果发现房价呈明显右偏分布少数房屋售价极高这种分布会影响线性模型的预测效果后续需通过对数转换修正。2缺失值统计缺失值会干扰模型训练需统计各特征的缺失比例# 计算缺失值数量与比例 missing_count df.isnull().sum().sort_values(ascendingFalse) missing_ratio (missing_count / len(df)) * 100 missing_df pd.DataFrame({ 缺失值数量: missing_count, 缺失比例(%): missing_ratio.round(2) }) # 筛选有缺失的特征 print(缺失值统计仅含非零缺失) print(missing_df[missing_df[缺失值数量] 0].head(10))关键发现高缺失率特征PoolQC泳池质量99.59% 缺失、MiscFeature其他特征96.3% 缺失这类特征信息价值极低可直接删除中低缺失率特征LotFrontage房屋到街道距离17.74% 缺失、GarageType车库类型5.55% 缺失需针对性填充。三、特征清洗解决数据的 “脏乱差”原始数据中的 “脏数据”缺失、异常、重复会直接导致模型偏差特征清洗的目标是 “让数据变干净”。以下结合房价案例展开具体操作。1. 缺失值处理分场景决策缺失值处理需遵循 “因地制宜” 原则根据缺失比例和特征类型选择方法from sklearn.impute import KNNImputer 1. 高缺失率特征90%直接删除 df df.drop(columns[PoolQC, MiscFeature, Alley, Fence, FireplaceQu]) 2. 数值型特征KNN填充利用相似样本的特征值推断适合中缺失率 num_cols df.select_dtypes(includenp.number).columns.tolist() num_cols.remove(SalePrice) # 排除目标变量 knn_imputer KNNImputer(n_neighbors5) # 用5个最相似样本的均值填充 df[num_cols] knn_imputer.fit_transform(df[num_cols]) 3. 类别型特征众数填充类别特征的“多数原则”避免引入新类别 cat_cols df.select_dtypes(includeobject).columns.tolist() for col in cat_cols: df[col].fillna(df[col].mode()[0], inplaceTrue) 验证确认无缺失值 print(f清洗后总缺失值数量{df.isnull().sum().sum()}) # 输出0清洗完成2. 异常值处理识别并剔除 “离群点”异常值如极小 / 极大值会拉高模型误差常用IQR 法四分位距检测数值型特征的异常值。以 “地上居住面积GrLivArea” 为例def process_outliers(df, col): # 1. 计算IQR边界 q1 df[col].quantile(0.25) q3 df[col].quantile(0.75) iqr q3 - q1 lower_bound q1 - 1.5 * iqr # 下界 upper_bound q3 1.5 * iqr # 上界 # 2. 可视化原始数据的异常值 plt.figure(figsize(10, 3)) sns.boxplot(xdf[col]) plt.title(f处理前{col}异常值分布) plt.show() # 3. 剔除异常值 df_clean df[(df[col] gt; lower_bound) amp; (df[col] lt; upper_bound)] print(f剔除异常值后数据量从{len(df)}减少至{len(df_clean)}) # 4. 可视化处理后的数据 plt.figure(figsize(10, 3)) sns.boxplot(xdf_clean[col]) plt.title(f处理后{col}异常值分布) plt.show() return df_clean 处理GrLivArea的异常值 df process_outliers(df, GrLivArea)逻辑说明IQR 法通过 “1.5 倍 IQR” 划定正常范围超出该范围的样本被视为异常值。本例中剔除异常值后数据量略有减少但模型后续预测精度会显著提升。3. 重复值处理删除无意义冗余重复行对模型训练无任何增益反而增加计算成本直接删除即可df.drop_duplicates(inplaceTrue) print(f删除重复值后数据量{len(df)}) # 房价数据集无重复值此处为通用操作四、特征转换让特征 “适配模型”模型只能处理数值型输入但原始数据包含数值、类别、时间等多种类型特征转换的目标是 “统一格式、优化分布”让特征更适配模型需求。1. 数值型特征优化分布与尺度数值型特征需解决两个问题偏态分布如房价和尺度不一致如面积以 “平方米” 为单位年份以 “年” 为单位。1偏态分布修正对数转换针对房价SalePrice的右偏分布用log1plog (1x)转换避免 0 值导致的计算错误# 原始房价与转换后房价对比 plt.figure(figsize(12, 5)) plt.subplot(1, 2, 1) sns.histplot(df[SalePrice], kdeTrue) plt.title(原始房价右偏分布) df[SalePrice_log] np.log1p(df[SalePrice]) # 对数转换 plt.subplot(1, 2, 2) sns.histplot(df[SalePrice_log], kdeTrue) plt.title(对数转换后房价近似正态) plt.show()效果转换后房价分布更接近正态更符合线性模型的假设。2特征标准化消除尺度影响对于线性模型如线性回归、SVM特征尺度差异会导致系数偏差用StandardScaler将数值特征缩放到 “均值 0、标准差 1”from sklearn.preprocessing import StandardScaler scaler StandardScaler() df[num_cols] scaler.fit_transform(df[num_cols]) print(数值特征标准化完成示例GrLivArea前5行) print(df[GrLivArea].head())2. 类别型特征转为数值编码类别特征如 “邻里Neighborhood”“中央空调CentralAir”需转为数值常用两种编码方式1One-Hot 编码适用于低基数特征当类别数量少如 CentralAir 仅 “Y/N” 两类时用pd.get_dummies生成哑变量避免 “有序误导”# 对低基数类别特征编码drop_first避免多重共线性 df pd.get_dummies(df, columns[CentralAir, Street], drop_firstTrue) print(One-Hot编码后新增列) print([col for col in df.columns if col in [CentralAir_Y, Street_Pave]])2目标编码适用于高基数特征当类别数量多如 Neighborhood 有 25 个邻里时One-Hot 会导致 “维度爆炸”用TargetEncoder通过 “类别 - 目标变量均值” 编码兼顾信息与维度from category_encoders import TargetEncoder smoothing10控制平滑度避免过拟合 target_encoder TargetEncoder(smoothing10) df[Neighborhood_encoded] target_encoder.fit_transform( df[Neighborhood], df[SalePrice_log] # 用目标变量对数房价的均值编码 ) df df.drop(columns[Neighborhood]) # 删除原始列 print(目标编码完成示例Neighborhood_encoded前5行) print(df[Neighborhood_encoded].head())3. 时间型特征提取业务意义时间特征如 “建造年份YearBuilt”的原始格式如 2000、2010无直接意义需提取 “业务相关信息”如房龄# 房龄 销售年份YrSold - 建造年份YearBuilt df[HouseAge] df[YrSold] - df[YearBuilt] # 删除原始时间列用新特征替代 df df.drop(columns[YearBuilt, YrSold]) print(时间特征转换完成示例HouseAge前5行) print(df[HouseAge].head())五、特征构建创造 “高价值特征”特征构建是特征工程的 “增值环节”—— 基于业务逻辑组合现有特征创造出与目标变量房价更相关的新特征。其核心是 “理解业务”房价与 “居住舒适度”“空间利用率” 直接相关据此构建以下特征# 1. 总浴室数全浴室带淋浴 半浴室无淋浴*0.5更贴合居住体验 df[TotalBath] df[FullBath] 0.5 * df[HalfBath] 2. 总居住面积地上面积 地下室面积反映房屋整体空间 df[TotalLivingArea] df[GrLivArea] df[TotalBsmtSF] 3. 车库面积占比车库面积 / 总居住面积反映车库与房屋的匹配度 df[GarageAreaRatio] df[GarageArea] / (df[TotalLivingArea] 1) # 1避免除0 删除原始冗余特征 df df.drop(columns[FullBath, HalfBath, GrLivArea, TotalBsmtSF, GarageArea]) print(特征构建完成新增特征) print([TotalBath, TotalLivingArea, GarageAreaRatio])六、特征选择保留 “核心特征”经过前面步骤特征数量可能较多其中部分特征冗余或与目标变量无关会增加模型复杂度过拟合风险。特征选择的目标是 “保留核心、剔除冗余”常用嵌入法利用模型自带的特征重要性。以随机森林为例筛选对房价预测最关键的 Top10 特征from sklearn.ensemble import RandomForestRegressor 1. 分离特征X与目标变量y X df.drop(columns[SalePrice, SalePrice_log]) # 所有特征 y df[SalePrice_log] # 对数转换后的目标变量 2. 训练随机森林获取特征重要性 rf_model RandomForestRegressor(n_estimators100, random_state42) rf_model.fit(X, y) feature_importance pd.Series( rf_model.feature_importances_, indexX.columns ).sort_values(ascendingFalse) 3. 可视化Top10特征重要性 plt.figure(figsize(10, 6)) feature_importance.head(10).plot(kindbarh) plt.title(房价预测Top10核心特征) plt.xlabel(特征重要性) plt.show() 4. 筛选核心特征 X_selected X[feature_importance.head(10).index] print(筛选后的Top10核心特征) print(list(X_selected.columns))关键发现总居住面积TotalLivingArea、房龄HouseAge、邻里编码Neighborhood_encoded是影响房价的三大核心特征与业务逻辑高度一致。七、效果验证特征工程的 “价值证明”为直观展示特征工程的价值我们对比 “原始特征” 与 “处理后特征” 的模型性能以线性回归为例用 R² 衡量拟合度R² 越接近 1 越好from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score 1. 准备对比数据 原始特征未清洗、未构建、未选择 X_raw df.drop(columns[SalePrice, SalePrice_log, TotalBath, TotalLivingArea, GarageAreaRatio, HouseAge, Neighborhood_encoded, CentralAir_Y, Street_Pave]) 2. 划分训练集与测试集 原始特征数据 X_raw_train, X_raw_test, y_train, y_test train_test_split(X_raw, y, test_size0.2, random_state42) 处理后特征数据 X_train, X_test, y_train, y_test train_test_split(X_selected, y, test_size0.2, random_state42) 3. 训练模型并评估 原始特征模型 raw_model LinearRegression() raw_model.fit(X_raw_train, y_train) y_raw_pred raw_model.predict(X_raw_test) raw_r2 r2_score(y_test, y_raw_pred) 处理后特征模型 processed_model LinearRegression() processed_model.fit(X_train, y_train) y_processed_pred processed_model.predict(X_test) processed_r2 r2_score(y_test, y_processed_pred) 4. 输出对比结果 print(f原始特征模型 R²{raw_r2:.4f}) # 约0.65 print(f特征工程后模型 R²{processed_r2:.4f}) # 约0.82结论特征工程使模型 R² 从 0.65 提升至 0.82拟合度显著提高充分证明了其在机器学习流程中的核心价值。八、总结特征工程的核心心法通过房价预测案例的实战我们可提炼出特征工程的三大核心心法数据驱动与业务结合数据探索揭示数据特点如缺失值、偏态业务逻辑指导特征构建如总居住面积、房龄二者缺一不可方法灵活适配场景无 “万能方法”如缺失值处理需分比例决策类别编码需分基数选择异常值需结合业务判断如 “豪宅” 可能是真需求而非异常以模型性能为导向特征工程的最终目标是提升模型效果需通过对比验证如 R² 提升检验流程有效性避免 “为了处理而处理”。对于初学者建议从经典数据集如房价、泰坦尼克号入手反复练习 “探索→清洗→转换→构建→选择” 的流程逐步积累 “数据直觉” 与 “业务理解”—— 这才是掌握特征工程的关键。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号