熊猫齐棋乐本地下载 当前位置:首页>熊猫齐棋乐本地下载>正文

熊猫齐棋乐本地下载

发布时间:2018-12-15

原标题:使用sklearn进行数据挖掘-房价预测(6)—模型调优

使用sklearn进行数据挖掘-房价预测(6)—模型调优


使用sklearn进行数据挖掘系列文章:

  • 1.使用sklearn进行数据挖掘-房价预测(1)
  • 2.使用sklearn进行数据挖掘-房价预测(2)—划分测试集
  • 3.使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布
  • 4.使用sklearn进行数据挖掘-房价预测(4)—数据预处理
  • 5.使用sklearn进行数据挖掘-房价预测(5)—训练模型
  • 6.使用sklearn进行数据挖掘-房价预测(6)—模型调优

通过上一节的探索,我们会得到几个相对比较满意的模型,本节我们就对模型进行调优

网格搜索

列举出参数组合,直到找到比较满意的参数组合,这是一种调优方法,当然如果手动选择并一一进行实验这是一个十分繁琐的工作,sklearn提供了GridSearch-网格搜索方法,我们只需要将每一个参数的取值告诉它,网格搜索将使用交叉验证方法对所有情况进行验证,并返回结果最好的组合。

from sklearn.model_selection import GridSearchCV

param_grid = [
    # 12 (3×4) 种超参数组合
    {"n_estimators": [3, 10, 30], "max_features": [2, 4, 6, 8]}, #组合1
    #  6 (2×3) 种
    {"bootstrap": [False], "n_estimators": [3, 10], "max_features": [2, 3, 4]},#组合2
  ]

forest_reg = RandomForestRegressor(random_state=42)
# 5折交叉验证,总共需要 (12+6)*5=90 次训练
grid_search = GridSearchCV(forest_reg, param_grid, cv=5,
                           scoring="neg_mean_squared_error")
grid_search.fit(housing_prepared, housing_labels)

Note:上面param_grid中的字典key可不是随便起的,这些都是需要网格搜索的模型中的参数。另外当你不知道如何选取参数的时候可以按照10的平方取值或者从小到大的值。

  • 1.看看上面的结果(可能是一个漫长的过程):

    >>grid_search.best_params_
    {"max_features": 8, "n_estimators": 30}
  • 2.再看一看最好的分类器

    >>grid_search.best_estimator_
    RandomForestRegressor(bootstrap=True, criterion="mse", max_depth=None,
           max_features=8, max_leaf_nodes=None, min_impurity_split=1e-07,
           min_samples_leaf=1, min_samples_split=2,
           min_weight_fraction_leaf=0.0, n_estimators=30, n_jobs=1,
           oob_score=False, random_state=42, verbose=0, warm_start=False)
  • 3.看一看得分

    >>grid_search.best_score_
    -2469578258.9821739

    如果我们想看以下各个参数组合的情况呢?

    cv_result = grid_search.cv_results_

    cv_result是一个字典类型,记录了整个训练过程的数据

    >>cv_result.keys(
    ["std_train_score",
     "rank_test_score",
     "split4_test_score",
     "param_bootstrap",
     "split2_train_score",
     "param_n_estimators",
     "std_score_time",
     "split4_train_score",
     "split2_test_score",
     "mean_score_time",
     "mean_fit_time",
     "split3_train_score",
     "split0_train_score",
     "std_test_score",
     "split1_train_score",
     "split0_test_score",
     "mean_test_score",
     "param_max_features",
     "params",
     "std_fit_time",
     "split3_test_score",
     "mean_train_score",
     "split1_test_score"]
  • 4.看一下组合的分值

    >>for mean_score, params in zip(cv_result ["mean_test_score"], cv_result ["params"]):
        print(np.sqrt(-mean_score), params)
    (63825.047930176741, {"max_features": 2, "n_estimators": 3})
    (55643.842909084706, {"max_features": 2, "n_estimators": 10})
    (53380.65668593633, {"max_features": 2, "n_estimators": 30})
    (60959.138858487866, {"max_features": 4, "n_estimators": 3})
    (52740.584166652523, {"max_features": 4, "n_estimators": 10})
    (50374.142146147307, {"max_features": 4, "n_estimators": 30})
    (58661.2866461823, {"max_features": 6, "n_estimators": 3})
    (52009.973979776936, {"max_features": 6, "n_estimators": 10})
    (50154.117773684942, {"max_features": 6, "n_estimators": 30})
    (57865.361680144459, {"max_features": 8, "n_estimators": 3})
    (51730.075508665534, {"max_features": 8, "n_estimators": 10})
    (49694.851433344418, {"max_features": 8, "n_estimators": 30})
    (62874.407393096284, {"max_features": 2, "n_estimators": 3, "bootstrap": False})
    (54561.939815728343, {"max_features": 2, "n_estimators": 10, "bootstrap": False})
    (59416.646314497353, {"max_features": 3, "n_estimators": 3, "bootstrap": False})
    (52660.245911032733, {"max_features": 3, "n_estimators": 10, "bootstrap": False})
    (57490.016827879947, {"max_features": 4, "n_estimators": 3, "bootstrap": False})
    (51093.905942805257, {"max_features": 4, "n_estimators": 10, "bootstrap": False})

    上面正好有18种组合结果。在第四节的时候,我们自己定义了一个estimatorCombinedAttributesAdder其中有一个参数add_bedrooms_per_room我们也可以将其加入网格搜索中。

在测试集合上评估模型

上面我们已经得到了我们最好的模型,那么模型到底如何呢?是骡子是马拉出来溜溜,测试集该上场了,

final_model = grid_search.best_estimator_
#去掉标签
X_test = strat_test_set.drop("median_house_value", axis=1)
y_test = strat_test_set["median_house_value"].copy()
#这个时候只需要transform
X_test_prepared = full_pipeline.transform(X_test)
final_predictions = final_model.predict(X_test_prepared)
#均方误差
final_mse = mean_squared_error(y_test, final_predictions)
final_rmse = np.sqrt(final_mse)
>>final_rmse
 47766.003966433083

持久化模型

模型已经建立好了,当下次再使用的时候,为了避免再次繁琐的训练过程,我们考虑将模型给存储起来,python提供了pickle方法,当然我们也可以使用sklearn提供的joblib方法,这种方法相对更加的高效。

from sklearn.externals import joblib
#存储
joblib.dump(final_model,"best_model.pkl")
#加载
best_model = joblib.load("best_model.pkl")
#后续的使用....

总结

至此,本系列的使用sklearn对房价进行预测的文章就此结束,本系列文章主要介绍了并实战了数据挖掘过程种的一些步骤、工具的使用方法及技巧。一路走来看似平坦实则为坑坑洼洼,还有很多需要完善的地方,如特征的组合、模型的选择等等。希望看完本系列之后能够让你对数据挖掘有更深的理解^-^(完)

当前文章:http://neomi.cn/content/2018-11-14/99353.html

发布时间:2018-12-15 15:47:48

719官方网下载 欢乐麻将电脑版 集结号棋牌游戏 牛总管辅助挂官网加盟 棋牌游戏apk 棋牌游戏加盟骗局 申城棋牌官网下载 沈阳盛京棋牌官方网站 喜盈棋牌 友趣娱乐正规吗

51043 50323 68224 48295 28108 6947369100 27047 92841

责任编辑:密成纯

随机推荐