发布时间:2025-06-24 19:55:31 作者:北方职教升学中心 阅读量:339
随机森林、
绘制经度和纬度的散点图:经纬度的二维分布也就是实际的地形分布。然而,与经济活力相伴的是房价的高涨和快速波动,这给市场参与者带来了不小的挑战。
9个变量的直方图展示:
直方图是一种统计图表,用于表示数据分布的可视化。 plt.title('Distplot of {}'.format(x))# 显示所有子图。
模型构建
查看不同模型的表现
# 从 sklearn.linear_model 模块中导入 LinearRegression, ElasticNet, 和 Lasso 类。 n =0# 遍历DataFrame data的所有列名。 # 使用 copy() 方法是为了确保我们得到的是原始数据的副本,而不是视图或引用,以避免后续可能的数据修改。它不仅关系到投资者的决策,也直接影响到普通购房者的生活质量。 # 结果存储在 test_labels 变量中,它包含了与 test_housing 对应的真实目标值。 # predict方法会返回测试数据集中每个样本的预测值,这些预测值存储在predict_labels变量中。经过这一系列分析后,对数据可以有非常直观的了解。 test_housing =test_set.drop("medianHouseValue",axis=1)# 从测试数据集 test_set 中复制 "medianHouseValue" 列的值,这列通常是我们想要预测的目标变量。 plt.plot(origin_labels[0:100],label='origin_labels')# 使用Matplotlib的plot函数绘制predict_labels数组的前100个值。 # predict方法会返回测试数据集中每个样本的预测值,这些预测值存储在predict_labels变量中。数据的初步分析:
# 设置图形窗口的大小为宽度15英寸,高度9英寸。 defget_rmse(model):rmse =np.sqrt(-cross_val_score(model,data_prepared,labels,scoring="neg_mean_squared_error",cv=n_folds))returnrmse # 创建四个不同的回归模型实例: # linreg 是线性回归模型 linreg =LinearRegression()# forest 是随机森林回归模型,设置了10个决策树估计器和随机状态为42 forest =RandomForestRegressor(n_estimators=10,random_state=42)# lasso 是Lasso回归模型,设置了正则化强度为0.0005和随机状态为1 lasso =Lasso(alpha=0.0005,random_state=1)# enet 是弹性网络模型,设置了正则化强度为0.0005,L1和L2正则化的比例为0.9,以及随机状态为3 enet =ElasticNet(alpha=0.0005,l1_ratio=.9,random_state=3)# 使用之前定义的 get_rmse 函数来计算并打印每个模型的RMSE print(get_rmse(linreg))print(get_rmse(forest))print(get_rmse(lasso))print(get_rmse(enet))
在一般的训练中,通常可以选取多个模型,通过计算误差得出最好的模型。ElasticNet模型进行训练,得出了随机森林(random forest regressor)的效果是最好的,因为它的均方根误差最小。是否有双峰(双模态)等。
背景信息
加利福尼亚州房地产市场概况
加利福尼亚州,作为美国经济最发达的地区之一,其房地产市场长期以来一直是国内外投资者关注的焦点。
plt.subplots_adjust(hspace =0.5,wspace =0.5)# 使用seaborn的distplot函数绘制data中当前列x的分布图,并设置直方图的bin数量为20。
- 经度(Longitude):表示房屋所在位置的经度坐标。 # 这行代码将test_labels(可能是一个Pandas Series或列表)转换为NumPy数组,并存储在origin_labels变量中。 fromsklearn.ensemble importRandomForestRegressor # 从 sklearn.pipeline 模块中导入 make_pipeline 函数(尽管在您的代码中并未直接使用它)。
- 密度曲线:有时在直方图上叠加一个平滑的曲线,称为核密度估计(KDE),它可以更平滑地展示数据的分布。
在经纬图上绘制房屋价格和人口分布:
# 使用Pandas的DataFrame.plot()方法绘制散点图 # kind="scatter" 指定了绘制的是散点图 # x="longitude" 指定了x轴的数据是'longitude'列 # y="latitude" 指定了y轴的数据是'latitude'列 # alpha=0.4 设置了点的透明度,使得重叠的点可以部分可见 # s=data["population"]/50 设置了点的大小,大小与'population'列的值成正比,但除以50是为了缩放大小 # label="population" 设置了图例的标签为"population"(但通常这个标签可能更适合用于s参数,表示大小与人口相关) # figsize=(10,7) 设置了图形的大小为10x7英寸 # c=data["medianHouseValue"] 设置了点的颜色,颜色由'medianHouseValue'列的值决定 # cmap=plt.get_cmap("jet") 设置了颜色映射为"jet" # colorbar=True 在图上显示颜色条,表示不同的颜色对应的'medianHouseValue'值 # sharex=False (在.plot()方法中,sharex通常不是有效的参数,除非您在子图网格中使用subplot_kws或gridspec_kws) # 如果是在使用subplot或subplots时,sharex可能用于控制x轴是否共享 data.plot(kind="scatter",x="longitude",y="latitude",alpha=0.4,s=data["population"]/50,label="population (size)",figsize=(10,7),c=data["medianHouseValue"],cmap=plt.get_cmap("jet"),colorbar=True,# sharex=False # 在这个上下文中,sharex参数不适用,可以移除 )# plt.legend() 显示图例,图例通常显示在图的某个角落,根据label参数来标识不同的数据系列 plt.legend()
上图点越密集,对应区域的颜色就越深,通过颜色深浅就可以看出数据的几种区域。分散程度和分布形态,为进一步的统计分析提供直观信息。透明度越低的地方代表人口越多,越接近colorbar顶端的颜色的地方代表房产价格越高。 # 结果存储在 test_housing 变量中,它只包含用于预测的特征,但不包含目标变量 "medianHouseValue"。转发4连!