机器学习入门实例-加州房价预测-4(继续调参+评估)

这篇具有很好参考价值的文章主要介绍了机器学习入门实例-加州房价预测-4(继续调参+评估)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Randomized Search

如果需要尝试、调整的超参数只有有限几个,比如之前的例子,那只用grid search就够了;但如果超参数的搜索空间非常大,应该用RandomizedSearchCV。它有两个优点:

  1. 支持更大的参数范围
  2. 它可以更快找到最优的超参数组合。因为不是遍历所有组合,而是在指定的参数范围内随机采样,然后评估性能。
  3. 可以根据现有资源情况给参数的上下限,因此更灵活。
    缺点是可能错过最优,只得到一个可以接受的“最优”。如果时间允许,还是可以用GridSearch的。
    from sklearn.model_selection import RandomizedSearchCV
    from scipy.stats import randint

    forest_reg = RandomForestRegressor()
    
    # randint(low=1,high=101).rvs(5) 输出:array([64, 98, 35,  2, 72]) 不要用size控制个数了
    param_grid = {
    	# 'n_estimators': list(range(1, 200)),
        'n_estimators': randint(low=1, high=200),
        'max_features': randint(low=1, high=8),
    }
    
    grid_search = RandomizedSearchCV(forest_reg, param_grid, cv=5,
                                     n_iter=20,
                                     scoring="neg_mean_squared_error",
                                     return_train_score=True)
    grid_search.fit(housing_prepared, housing_labels)
    print(grid_search.best_params_)
    print(grid_search.best_estimator_)
    print(np.sqrt(-grid_search.best_score_))

{'max_features': 6, 'n_estimators': 199}
RandomForestRegressor(max_features=6, n_estimators=199)
49012.16057617387

其中n_iter表示尝试的参数组合总数。如果n_iter太小,可能错过最优的超参数组合;如果n_iter太大,会增加搜索时间,消耗更多计算资源。

评估模型

查看每一列在预测时的重要性

	param_grid = [
        {'n_estimators': [3, 10, 30, 50], 'max_features': [2, 4, 6, 8, None]},
        {'bootstrap': [False], 'n_estimators': [3, 10, 30], 'max_features': [2, 3, 4, 8]}
    ]
    grid_search = GridSearchCV(forest_reg, param_grid, cv=5,
                               scoring="neg_mean_squared_error",
                               return_train_score=True)

    grid_search.fit(housing_prepared, housing_labels)
    print(grid_search.best_params_)
    print(grid_search.best_estimator_)
    print(np.sqrt(-grid_search.best_score_))
    
    # 获取列标签
    housing_num = housing.drop("ocean_proximity", axis=1)
    num_attribs = list(housing_num)
    extra_attribs = ["rooms_per_household", "pop_per_household", "bedrooms_per_room"]
    # 获取每一列在准确预测时的相对重要性数值
    feature_importances = grid_search.best_estimator_.feature_importances_
    # 这里我修改了函数,多返回了full_pipeline
    # 从pipeline中获取某个transformer中输入的列
    cat_encoder = full_pipeline.named_transformers_['cat']
    cat_one_hot_attribs = list(cat_encoder.categories_[0])
    # 最终列名 = 纯数值列的列名 + 新增的三列列名 + one-hot时产生的列名
    attributes = num_attribs + extra_attribs + cat_one_hot_attribs
    print(sorted(zip(feature_importances, attributes), reverse=True))

{'bootstrap': False, 'max_features': 8, 'n_estimators': 30}
RandomForestRegressor(bootstrap=False, max_features=8, n_estimators=30)
49442.37738967349
[(0.3250563395483288, 'median_income'), 
(0.1633435907899842, 'INLAND'), 
(0.11059555286375254, 'pop_per_household'), 
(0.08114145071753134, 'longitude'), 
(0.0728049997803568, 'latitude'), 
(0.07264703358828413, 'bedrooms_per_room'), 
(0.06346893798818128, 'rooms_per_household'), 
(0.04130518938735756, 'housing_median_age'), 
(0.014117547726336705, 'total_rooms'), 
(0.01405138434431168, 'population'), 
(0.013966918312688084, 'total_bedrooms'), 
(0.013656643753704638, 'households'), 
(0.009607652315968867, '<1H OCEAN'), 
(0.002484053857680537, 'NEAR OCEAN'), 
(0.001674961006904646, 'NEAR BAY'), 
(7.774401862815335e-05, 'ISLAND')]

知道了重要性后,可以舍弃掉一些不太重要的列,或者调整不太重要的列,使之更为重要。

在测试集上评估

	from sklearn.metrics import mean_squared_error
    # 直接用
    final_model = grid_search.best_estimator_
    # 处理测试集数据
    X_test = test_set.drop("median_house_value", axis=1)
    y_test = test_set["median_house_value"].copy()
	# 使用总pipeline处理数据
    X_test_prepared,f = transform_data(X_test)
    # 使用模型预测
    final_predictions = final_model.predict(X_test_prepared)
	# 计算rmse
    final_mse = mean_squared_error(y_test, final_predictions)
    final_rmse = np.sqrt(final_mse)
    print(final_rmse)
    
    # 计算95%置信区间
    from scipy import stats
    confidence = 0.95
    squared_errors = (final_predictions - y_test) ** 2
    interval = np.sqrt(stats.t.interval(confidence, len(squared_errors)-1,
                                        loc=squared_errors.mean(),
                                        scale=stats.sem(squared_errors)))
    print(interval)

后续工作

将模型部署到生产环境后,随着新数据的加入,模型的准确率可能会降低,所以需要监控预测效果,并且做一些自动调整。可能的工作方向为:文章来源地址https://www.toymoban.com/news/detail-416970.html

  1. 经常收集新数据并添加人工标签;
  2. 写自动训练和调参的脚本,定期执行;
  3. 写自动比较脚本,在更新的测试集中比较新模型和老模型的效果,如果效果更好了就更新模型,如果效果更差,需要研究为何变差;
  4. 评估模型输入数据的质量;
  5. 备份每个模型和一些数据集,确保可以快速回滚

到了这里,关于机器学习入门实例-加州房价预测-4(继续调参+评估)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

    数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信 线性回归是利用最小二乘函数对一个或多个因变量之间关系进行建模的一种回归分析,这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个变量的称为一元回归,大于一个变量的情况叫做多元回归。

    2024年01月21日
    浏览(37)
  • 【机器学习】最经典案例:房价预测(完整流程:数据分析及处理、模型选择及微调)

    环境:anaconda+jupyter notebook 首先要明白一点: 数据决定模型的上限!数据决定模型的上限!数据决定模型的上限! (重要的事情说三遍。)对于数据的处理在一个完整案例中花费精力的比重应该占到一半以上。 以下分为:数据分析、数据清洗两部分。 数据分析主要包括:查

    2024年02月05日
    浏览(36)
  • 机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类

    1. 预测波士顿房价 1.1 导包 最后一行设置了TensorFlow日志的详细程度: tf.logging.DEBUG :最详细的日志级别,用于记录调试信息。 tf.logging.INFO :用于记录一般的信息性消息,比如训练过程中的指标和进度。 tf.logging.WARN :用于记录警告消息,表示可能存在潜在问题,但不会导致

    2024年02月08日
    浏览(34)
  • 机器学习与深度学习——使用paddle实现随机梯度下降算法SGD对波士顿房价数据进行线性回归和预测

    随机梯度下降(SGD)也称为增量梯度下降,是一种迭代方法,用于优化可微分目标函数。该方法通过在小批量数据上计算损失函数的梯度而迭代地更新权重与偏置项。SGD在高度非凸的损失表面上远远超越了朴素梯度下降法,这种简单的爬山法技术已经主导了现代的非凸优化。

    2024年02月03日
    浏览(43)
  • 【Python机器学习】决策树、K近邻、神经网络等模型对Kaggle房价预测实战(附源码和数据集)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 超参数调优需要依靠试验的方法,以及人的经验。对算法本身的理解越深入,对实现算法的过程了解越详细,积累了越多的调优经验,就越能够快速准确地找到最合适的超参数 试验的方法,就是设置了一系列超参数之后

    2024年02月03日
    浏览(34)
  • 数据分析(以kaggle上的加州房价为例)

    数据来源:House Prices - Advanced Regression Techniques 参考文献: Comprehensive data exploration with Python 偏度(Skewness)是一种衡量随机变量概率分布的偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度可以用来反映数据分布相对于对称分布的偏斜程度。偏度的取值范

    2024年02月09日
    浏览(29)
  • 机器学习之支持向量回归(SVR)预测房价—基于python

          大家好,我是带我去滑雪!       本期使用爬取到的有关房价数据集data.csv,使用支持向量回归(SVR)方法预测房价。该数据集中“y1”为响应变量,为房屋总价,而x1-x9为特征变量,依次表示房屋的卧室数量、客厅数量、面积、装修情况、有无电梯、、房屋所在楼层位

    2024年02月04日
    浏览(39)
  • python 导入fetch_california_housing 加州房价数据集报错解决

    1 导入加州房价数据集 显示 HTTP Error 403:Forbidden 2 处理方法  ①手工下载数据集  打开_california_housing.py 文件,里面有数据集的下载地址,不知道_california_housing.py文件地址的可以看报错中提示的位置  _california_housing.py文件中43行,有数据集的下载地址(https://www.dcc.fc.up.pt/~l

    2024年02月07日
    浏览(26)
  • 数据挖掘入门项目二手交易车价格预测之建模调参

    本文数据集来自阿里天池:https://tianchi.aliyun.com/competition/entrance/231784/information 主要参考了Datawhale的整个操作流程:https://tianchi.aliyun.com/notebook/95460 小编也是第一次接触数据挖掘,所以先跟着Datawhale写的教程操作了一遍,不懂的地方加了一点点自己的理解,感谢Datawhale! 了解

    2024年04月11日
    浏览(29)
  • 机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】

    目录 前言 一、什么是线性回归 二、什么是逻辑回归 三、基于Python 和 Scikit-learn 库实现线性回归 示例代码:  使用线性回归来预测房价: 四、基于Python 和 Scikit-learn 库实现逻辑回归 五、总结  线性回归的优缺点总结: 逻辑回归(Logistic Regression)是一种常用的分类算法,具有

    2024年04月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包