多元线性回归房价预测R²分数过低(0.34),如何提升?
提升房屋价格预测模型R²分数的优化方案
一、数据预处理优化
1. 修正Area字段数据类型
现有代码仅替换了Area中的逗号,但未转换为数值类型,模型无法识别该特征的数值关系,需补充类型转换:
df['Area'] = df['Area'].str.replace(',', '').astype(float)
2. 改进分类特征编码方式
对Address使用标签编码会引入虚假的顺序关系(如编码0、1、2会被模型判定为数值大小),改用独热编码更合理:
# 替换原Address编码逻辑 df = pd.get_dummies(df, columns=['Address'], drop_first=True)
若地址类别过多(超过50个),可改用目标编码,避免特征维度爆炸。
3. 剔除异常值
房屋面积、价格等数值特征易存在极端值,用四分位距法检测并剔除:
def remove_outliers(df, column): q1 = df[column].quantile(0.25) q3 = df[column].quantile(0.75) iqr = q3 - q1 lower_bound = q1 - 1.5 * iqr upper_bound = q3 + 1.5 * iqr return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)] # 对Area和Price字段处理异常值 df = remove_outliers(df, 'Area') df = remove_outliers(df, 'Price')
二、特征工程增强
1. 构造衍生特征
- 基于地址分组统计区域平均单位面积价格,作为新特征
- 拆分地址层级信息(如区域、街道),提取细分特征
- 组合离散特征(如
Parking+Warehouse+Elevator),反映房屋配套完整性
2. 筛选有效特征
通过相关性分析、递归特征消除(RFE)过滤噪声特征:
from sklearn.feature_selection import RFE # 用RFE筛选Top5特征 selector = RFE(estimator=LinearRegression(), n_features_to_select=5) X_selected = selector.fit_transform(X, y) # 后续用筛选后的特征训练模型
三、模型调整与替换
1. 正则化线性模型
普通线性回归易受噪声影响,改用Lasso/Ridge回归加入正则项抑制过拟合:
from sklearn.linear_model import Ridge # Ridge回归,alpha为正则化强度,可通过网格搜索调优 model = Ridge(alpha=1.0) model.fit(X_train, y_train)
2. 尝试非线性模型
若数据存在非线性关系,线性模型拟合能力有限,可切换到以下模型:
- 随机森林:自动捕捉非线性关系与特征交互
- LightGBM/XGBoost:在回归任务中通常能取得更优效果
示例(LightGBM):
import lightgbm as lgb model = lgb.LGBMRegressor(n_estimators=100, random_state=42) model.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=10)
四、超参数调优
用网格搜索或随机搜索优化模型参数,提升拟合效果:
from sklearn.model_selection import GridSearchCV param_grid = {'alpha': [0.1, 1, 10, 100]} grid = GridSearchCV(Ridge(), param_grid, cv=5) grid.fit(X_train, y_train) best_model = grid.best_estimator_
内容的提问来源于stack exchange,提问作者mehran arbabian
相关产品推荐
相关产品推荐

