为了更好地理解房价,模型中的简洁性和清晰性是关键。我们这篇帖子的目标是展示如何通过简单而强大的特征选择和工程技术,来创建一个有效、简单的线性回归模型。通过使用 Ames 数据集,我们使用顺序特征选择器 (SFS) 来识别最具影响力的数值特征,然后通过周到的特征工程来提高模型的准确性。
通过我的书《进阶数据科学》启动您的项目。它提供了带有可运行代码的自学教程。
让我们开始吧。

顺序特征选择器在房价预测中的战略应用
图片由 Mahrous Houses 提供。部分权利保留。
概述
这篇博文分为三部分;它们是:
- 识别最具预测性的数值特征
- 评估单个特征的预测能力
- 通过特征工程提高预测准确性
识别最具预测性的数值特征
在我们探索的初期阶段,我们着手识别 Ames 数据集中最具预测性的数值特征。这是通过应用顺序特征选择器 (SFS) 来实现的,SFS 是一种旨在筛选特征并选择能最大化我们模型预测准确性的工具。该过程很简单,仅专注于数值列并排除任何包含缺失值的列,以确保分析的清洁和稳健。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 只加载 Ames 数据集中的数值列 import pandas as pd Ames = pd.read_csv('Ames.csv').select_dtypes(include=['int64', 'float64']) # 删除任何包含缺失值的列 Ames = Ames.dropna(axis=1) # 从 scikit-learn 导入线性回归和顺序特征选择器 来自 sklearn.linear_model 导入 LinearRegression from sklearn.feature_selection import SequentialFeatureSelector # 初始化线性回归模型 模型 = LinearRegression() # 执行顺序特征选择器 sfs = SequentialFeatureSelector(model, n_features_to_select=1) X = Ames.drop('SalePrice', axis=1) # 特征 y = Ames['SalePrice'] # 目标变量 sfs.fit(X,y) # 默认使用 cv=5 selected_feature = X.columns[sfs.get_support()] print("选择的最高预测能力特征:", selected_feature[0]) |
这将输出
1 |
选择的最高预测能力特征: OverallQual |
这一结果显著挑战了最初认为面积是房价最预测性特征的假设。相反,它强调了整体质量的重要性,表明与最初的期望相反,质量是买家最重要的考虑因素。值得注意的是,顺序特征选择器 利用交叉验证(默认值为五折,cv=5) 来评估每个特征子集的性能。这种方法确保了所选特征(以最高的平均交叉验证 R² 分数反映)是稳健的,并且很可能在未见过的数据上表现良好。
想开始学习进阶数据科学吗?
立即参加我的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
评估单个特征的预测能力
在初步发现的基础上,我们进一步深入研究以按预测能力对特征进行排名。通过使用交叉验证,我们独立评估每个特征,计算其交叉验证的平均 R² 分数,以确定它们对模型准确性的单独贡献。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 构建在之前的代码块之上 from sklearn.model_selection import cross_val_score # 用于保存特征名称及其对应的平均 CV R² 分数的字典 feature_scores = {} # 遍历每个特征,执行 CV,并存储平均 R² 分数 for feature in X.columns: X_single = X[[feature]] cv_scores = cross_val_score(model, X_single, y, cv=5) feature_scores[feature] = cv_scores.mean() # 根据特征的平均 CV R² 分数降序排序 sorted_features = sorted(feature_scores.items(), key=lambda item: item[1], reverse=True) # 打印前 3 个特征及其分数 top_3 = sorted_features[0:3] for feature, score in top_3: print(f"特征: {feature}, 平均 CV R²: {score:.4f}") |
这将输出
1 2 3 |
特征: OverallQual, 平均 CV R²: 0.6183 特征: GrLivArea, 平均 CV R²: 0.5127 特征: 1stFlrSF, 平均 CV R²: 0.3957 |
这些发现强调了整体质量(“OverallQual”)、居住面积(“GrLivArea”)和一楼空间(“1stFlrSF”)在房价预测中的关键作用。
通过特征工程提高预测准确性
在我们旅程的最后一步,我们采用特征工程,通过将‘OverallQual’乘以‘GrLivArea’来创建一个新特征“Quality Weighted Area”。这种融合旨在合成一个更强大的预测因子,封装了房产的质量和大小维度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 构建在之前的代码块之上 Ames['QualityArea'] = Ames['OverallQual'] * Ames['GrLivArea'] # 为新的 'QualityArea' 特征设置特征和目标变量 X = Ames[['QualityArea']] # 新特征 y = Ames['SalePrice'] # 线性回归的 5 折 CV 模型 = LinearRegression() cv_scores = cross_val_score(model, X, y, cv=5) # 计算 CV 分数的平均值 mean_cv_score = cv_scores.mean() print(f"使用 'Quality Weighted Area' 的平均 CV R² 分数: {mean_cv_score:.4f}") |
这将输出
1 |
使用 'Quality Weighted Area' 的平均 CV R² 分数: 0.7484 |
R² 分数的显著提高生动地展示了组合特征以捕捉更细微的数据方面的影响力,为在预测建模中审慎应用特征工程提供了有力的论据。
进一步阅读
API
教程
- Gianluca Malato 的《顺序特征选择的实践介绍》A practical introduction to sequential feature selection
Ames 住房数据集和数据字典
总结
通过这次分为三个部分的文章,您已经了解了在房屋价格预测中定位和增强预测因子的过程,并强调了简洁性。从使用顺序特征选择器 (SFS) 识别最具预测性的特征开始,我们发现整体质量至关重要。这一初步步骤至关重要,尤其是因为我们的目标是创建最好的简单线性回归模型,因此我们排除了分类特征以进行简化分析。探索过程从使用顺序特征选择器 (SFS) 识别整体质量作为关键预测因子,到评估居住面积和一楼空间的影响。创建“Quality Weighted Area”,一个融合质量和大小的特征,显著提高了模型的准确性。特征选择和工程的整个过程强调了简洁性在改进房地产预测模型方面的力量,提供了对真正影响房价因素的更深入见解。这次探索表明,通过正确的技术,即使是简单的模型也能从复杂的 Ames 房价数据中获得深刻的见解。
具体来说,你学到了:
- 顺序特征选择在揭示房价最重要的预测因子方面的价值。
- 在爱荷华州艾姆斯市预测房价时,质量比尺寸更重要。
- 如何将特征合并为“Quality Weighted Area”以提高模型准确性。
您是否有想要分享的特征选择或工程方面的经验,或者对这个过程有疑问?请在下面的评论中提问或提供反馈,我将尽力回答。
暂无评论。