06-线性回归案例:波士顿房价预测
1. 需求分析基于波士顿社区多维度特征构建回归模型预测各区块自住房屋中位数房价。2. 数据集介绍来源1978 年由 Harrison Rubinfeld 发布采集美国波士顿郊区 506 个社区普查区块数据是机器学习回归任务入门标杆数据集。样本规模共 506 条样本无缺失值sklearn 内置可直接加载。变量构成13 个输入特征 1 个预测目标MEDV每个城镇区块自住房屋的中位数价格千美元。任务多元线性回归基于社区特征预测自住房屋中位数价格。字段含义与房价关系CRIM城镇人均犯罪率负相关治安越差房价越低ZN大面积住宅用地占比正相关INDUS非零售商业用地比例负相关CHAS临河虚拟变量1 临河0 否临河房价更高NOX一氧化氮空气污染浓度负相关污染越高房价越低RM单栋住宅平均房间数强正相关核心正向特征AGE1940 年前老旧房屋占比负相关DIS到市中心就业区加权距离负相关离市区越远越便宜RAD高速路通达指数越高交通越便利TAX每万美元房产税率负相关PTRATIO学区师生比比值越高教育资源越差房价更低B城镇非裔人口比例换算值历史统计变量存在公平性争议LSTAT低收入人群占比强负相关最核心负向特征优点缺陷数据干净无缺失值上手简单特征覆盖治安、环境、交通、教育、户型、经济多维度适合练手多元线性回归、正规方程、梯度下降天然存在多重共线性、异常值、非线性关系适合学习特征工程、正则化岭回归 / Lasso。数据年代久远1970 年代不具备现实参考价值B字段基于种族统计存在种族偏见违背机器学习公平性要求sklearn 新版本已移除该内置数据集房价存在截断上限 50 千美元有大量顶部异常值。典型用途入门多元线性回归、正规方程、梯度下降实战进阶特征相关性、多重共线性、正则化、特征变换、回归模型评估MSE、R²。替代数据集因种族公平性问题官方推荐替换为加州房价数据集California Housingsklearn 内置无敏感种族变量数据更新。3. 建模3.1 包from sklearn.linear_model import LinearRegression from sklearn.linear_model import SGDRegressor from sklearn.metrics import mean_absolute_error, mean_square_error, root_mean_square_error from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split3.2 获取数据data_url http://lib.stat.cmu.edu/datasets/boston raw_df pd.read_csv(data_url, sep\\s, skiprows22, headerNone) data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]) # hstack()函数将两个数组矩阵左右相加竖直方向相加请使用vstack()函数。 target raw_df.values[1::2, 2] print(f特征{data.shape}) # (506, 13) print(f标签{target.shape}) # (506,)3.3 数据预处理缺失值、异常值处理划分数据集x_train, y_train, x_test, y_test train_test_split(data, target, test_size0.2, random_state22)3.4 特征工程特征预处理标准化transfer StandardScaler() x_train transfer.fit_transform(x_train) x_test transfer.transform(x_test)3.5 模型训练estimator LinearRegression() # 正规方程法 estimator SGDRegressor(fit_interceptTrue, eth00.01, learning_rateconstant) # 梯度下降法 estimator.fit(x_train, y_train) print(f权重{estimator.coef_}) print(f偏置{estimator.intercept_})3.6 模型预测y_pre estimator.predict(x_test) print(y_pre)3.7 模型评估mae mean_absolute_error(y_test, y_pre) mse mean_square_error(y_test, y_pre) rmse root_mean_square_error(y_test, y_pre) print(f平均绝对误差{mae}) print(f均方误差{mse}) print(f均方根误差{rmse})