3180862489 发表于 2022-3-3 15:59:16

2018年8月24日波士顿房价预测项目第3篇文章(图)

2018年8月24日笔记这是作者在波士顿房价预测项目的第3篇文章,在查看此篇文章之前房产评估源码,请确保已经阅读前2篇文章。第2篇文章链接:

0.打开

不知道怎么打开的朋友请查看我的入门指南文章:

1.准备数据

网站波士顿房价项目链接:网页内容如下图所示:

image.png

查看项目评分标准,如下图所示:

image.png

从上图我们可以看出,该项目使用RMSE指标评估。RMSE是rootmeanerror的简写,中文叫做均方根误差。上图中的公式有错误,正确应该如下图所示:

image.png

2.作者的最高分

波士顿房价预测项目是2016年的项目房产评估源码,现在已经结束。所以读者可以先熟悉提交答案的流程,作者提供自己的最高分文件。提交文件下载链接:密码:b8jm提交结果如下图所示:

image.png

从上图的结果可以看到,作者的最高分有3.02分,可以排到第5名。后面的章节讲述提升模型回归效果,即降低RMSE的过程。

3.下载数据集

如下图所示,下载红色箭头标示的3个文件。下载完成后,就可以开始编程。

image.png

4.加载数据集

train.csv文件中的表格有15个字段,第1个字段是ID,最后1个字段是预测目标值。用df.iloc[:,1:-1]取除了第1个字段和最后1个字段的其他字段。

<p><pre class="prism-token token language-javascript">    import pandas as pd
def dataProcessing(df):
    field_cut = {
    &#x27;crim&#x27; : ,
    &#x27;zn&#x27; : [-1, 5, 18, 20, 40, 80, 86, 100],
    &#x27;indus&#x27; : [-1, 7, 15, 23, 40],
    &#x27;nox&#x27; : ,
    &#x27;rm&#x27; : ,
    &#x27;age&#x27; : ,
    &#x27;dis&#x27; : ,
    &#x27;rad&#x27; : ,
    &#x27;tax&#x27; : ,
    &#x27;ptratio&#x27; : ,
    &#x27;black&#x27; : ,
    &#x27;lstat&#x27; :
    }
    cut_df = pd.DataFrame()
    for field in field_cut.keys():
      cut_series = pd.cut(df, field_cut, right=True)
      onehot_df = pd.get_dummies(cut_series, prefix=field)
      cut_df = pd.concat(, axis=1)
    new_df = pd.concat(, axis=1)
    return new_df
df = pd.read_csv(&#x27;train.csv&#x27;)
field_df = df.iloc[:,1:-1]
feature_df = dataProcessing(field_df)</pre></p>
根据网上的资料显示,有部分异常值的预测目标值为50。清除异常值,代码如下:

<p><pre class="prism-token token language-javascript">    X = feature_df
y = df[&#x27;medv&#x27;].values
print(X.shape)
X = X
y = y
print(X.shape)</pre></p>
上面一段代码的运行结果如下:

(333,61)(322,61)

5.模型训练

<p><pre class="prism-token token language-javascript">    from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import ShuffleSplit
xgb_model = XGBRegressor(nthread=7)
cv_split = ShuffleSplit(n_splits=6, train_size=0.7, test_size=0.2)
grid_params = dict(
    max_depth = ,
    learning_rate = np.linspace(0.03, 0.3, 10),
    n_estimators =
)
grid = GridSearchCV(xgb_model, grid_params, cv=cv_split, scoring=&#x27;neg_mean_squared_error&#x27;)
grid.fit(X, y)</pre></p>
查看模型的最优参数和最优rmse指标,代码如下:

<p><pre class="prism-token token language-javascript">    print(grid_model.best_params_)
print(&#x27;rmse:&#x27;, (-grid_model.best_score_) ** 0.5)</pre></p>
上面一段代码的运行结果如下:

{&#x27;&#x27;:0.03,&#x27;&#x27;:6,&#x27;&#x27;:200}rmse:2.8854

利用训练好的结果,对测试集做回归预测,代码如下:

<p><pre class="prism-token token language-javascript">    predict_df = pd.read_csv(&#x27;test.csv&#x27;)
predict_X = dataProcessing(predict_df.iloc[:,1:]).values
predict_y = grid_model.predict(predict_X)
save_df = pd.DataFrame({
    &#x27;ID&#x27; : predict_df.ID,
    &#x27;medv&#x27; : predict_y
})
save_df.to_csv(&#x27;xgb_boston_submission1.csv&#x27;, index=False)</pre></p>
6.提交作答文件

点击下图红色箭头标示处,界面如下图所示。分为2步:1.上传作答文件;2.对此次作答做简单的描述。

image.png

作者的作答文件命名为n1.csv,如下图所示。重新运行的提交分数为3.10天外神坛源码网,分数略有下降,但是仍能进入前5。

image.png
页: [1]
查看完整版本: 2018年8月24日波士顿房价预测项目第3篇文章(图)