机器学习项目的第一步,并不是确定工作流程,更不是解决数据集的问题,而是确定项目意义和目标,其至关重要

项目来源:
能源之星(Energy Star),是美国能源部和美国环保署共同推行的一项政府计划,旨在更好地保护生存环境,节约能源。
项目目标:
1.使用提供的建筑能源数据开发一个模型,该模型可以预测建筑物的能源之星得分,
2.然后解释结果以找到最能预测得分的变量。
工作流程:

  • 1.数据清理和格式化
  • 2.探索性数据分析
  • 3.特征工程和特征选择
  • 4.基于性能指标比较几种机器学习模型
  • 5.对最佳模型执行超参数调整
  • 6.在测试集上评估最佳模型
  • 7.解释模型结果
  • 8.得出结论

1. 数据清理和格式化

第一步做的事比较多而且杂,首先加载并检查数据
# 把数据读入pandas dataframe
data = pd.read_csv('Energy_and_Water_Data_Disclosure_for_Local_Law_84_2017__Data_for_Calendar_Year_2016_.csv')
# 显示表头
data.head()

数据集一共(11746行, 60列),加载数据后,我们要解决的第一个问题:理解数据
我们通常会看到每一列的第一行是各种名词,就是所谓的表头,理解这些名词的含义对于处理数据非常重要,但是我们面对的数据来自各个领域,我们不是精通各个领域专业知识的杂家,这时候就需要通过各种手段去理解数据。

第二步将数据转换为正确的类型

将带有数字并且缺失值被编码为Not Available的列转换为数字数据类型。
将包含数值(例如平方英尺或能量使用)的列转换为数字数据类型

#将“Not Available”项替换为可以解释为浮点数的np.nan
data = data.replace({'Not Available':np.nan})# 一些明确包含数字(例如ft²)的列被存储为object类型。 我们不能对字符串进行数值分析,因此必须将其转换为数字(特别是浮点数)数据类型
# 对列数进行迭代
for col in list(data.columns):# 选择需要被数字化的列,通过if 判断实现if ('ft²'in col or 'kBtu' in col or 'Metric Tons CO2e' in col or 'kWh' in col or 'therms' in col or 'gal' in col or 'Score' in col):# 将数据类型转换为floatdata[col] = data[col].astype(np.float)
第三步处理缺失值

1.计算缺失值的数量以及每列缺少的总值的百分比,删除缺失值超过50%的列
2.删除标签列含空值的行
处理之后数据集还剩(9642行, 48列)
注意:此时数据集中的其余的缺失值我们并没有删除,也没有填写,关于填写的事我们放到后边做,目的是为了防止数据泄露

2. 探索性数据分析

探索性数据分析(EDA)是一个开放式流程,我们制作绘图并计算统计数据,以便探索我们的数据。

3.特征工程和特征选择

这一步在机器学习中同样至关重要,因为它决定着最后建模后的准确率。

  • 将数值型特征x做log变换(不删除原特征列),分类型特征x独热编码,合并为data
  • 计算每个特征x与标签y的皮尔逊相关系数,绝对值小于0.3的,删除特征列
  • 计算各特征列x之间的相关系数,去除共线特征(使用方差膨胀因子,自己给定阈值,0.6)
  • 划分训练集和测试集
  • 建立基线(可以用中值做基线),算出值,后面拿这个值与模型的结果作比较
  • 填充空值(可以用中值填充,注意不要把测试集的值泄露给训练集,之所以这么晚才填空值也是为了不泄露),
  • 把无限值删除

4.基于性能指标比较几种机器学习模型

在我们构建模型之前要采取的最后一步是特征缩放。这是很有必要的,因为特征具有不同的单位,我们希望对特征进行标准化,以使单位不影响算法。

  • 线性回归和随机森林不需要特征缩放
  • 但其他方法(例如k-最近邻)确实需要它,因为它们考虑了观测之间的欧氏距离。因此,在比较多个算法时,最佳做法是特征缩放。

有两种特征缩放的方法:

  • 对于每个值,减去特征的平均值并除以特征的标准偏差。这称为标准化,并且导致每个特征具有0的均值和1的标准偏差。
  • 对于每个值,减去特征的最小值并除以最大值减去特征的最小值(范围)。这可以确保特征的所有值都在0到1之间,这称为缩放到范围。

选择机器模型:

  • 线性回归
  • 岭回归
  • Lasso回归
  • 决策树
  • 随机森林回归
  • Gradient Boosting 回归
  • 支持向量机回归
  • K-Nearest Neighbors回归

导入机器学习模型

from sklearn.linear_model import LinearRegression
from sklearn.linear_model import RidgeCV
from sklearn.linear_model import LassoCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import GradientBoostingRegressor

分别拟合数据并进行比较

5.对最佳模型执行超参数调整

在机器学习中,优化模型意味着为特定问题找到最佳的超参数集。
常见设置超参数的做法有:

  • 猜测和检查:根据经验或直觉,选择参数,一直迭代。
  • 网格搜索:让计算机尝试在一定范围内均匀分布的一组值。
  • 随机搜索:让计算机随机挑选一组值。
  • 贝叶斯优化:使用贝叶斯优化超参数,会遇到贝叶斯优化算法本身就需要很多的参数的困难。

本项目使用随机搜索和网格搜索进行超参数调整

6.在测试集上评估最佳模型

7.解释模型结果

8.得出结论

基于机器学习的“能源之星”得分预测的完整演练相关推荐

  1. 实战五十三:基于机器学习随机森林的购房贷款违约预测(完整代码+数据集)

    1.1 实验题目:购房贷款违约预测 任务:使用机器学习相关知识完成购房贷款违约预测,给定特征字段,输出是否会发生逾期的预测. 1.2 实验要求 1.2 题目背景 随着世界经济的蓬勃发展和中国改革开放的 ...

  2. 基于机器学习的电影票房分析与预测系统

    温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 票房作为衡量电影能否盈利的重要指标受诸多因素共同作用影响且其影响机制较为复杂,电影票房的准确预测是比 ...

  3. 基于机器学习的2022卡塔尔世界杯冠军预测-个人期末项目总结

    声明:文中内容基于山东某高校数据挖掘课程的学习成果,本系列文章为课程期末项目的个人总结. #--------------- [2022年6月补充:非常不好意思大家,当时是笔记用,我没想到这么久还有人看 ...

  4. 基于机器学习之模型树短期负荷预测(Matlab代码实现)

  5. 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)

    目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...

  6. 使用Ray将可扩展的自动化机器学习(AutoML)用于时序预测

    活动链接:SPARK中文峰会7月4日(二)|Ray On Spark 演讲嘉宾简介:黄晟盛,Intel高级架构师,Apache Spark committer,PMC member Analytics ...

  7. 论文精读——基于机器学习的越南生活固体废弃物预测

    论文精读--基于机器学习的越南生活固体废弃物预测 Abstract 1. Introduction(partly) 2. ML - based models and applications for ...

  8. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  9. 论文解读:PF磷酸:基于机器学习的磷酸化位点预测疟原虫蛋白的工具

    Title:Pf-Phospho: a machine learning-based phosphorylation sites prediction tool for Plasmodium prot ...

  10. ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略

    ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之详细 ...

最新文章

  1. erlang精要(22)-归集器、记录
  2. Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!
  3. 关于Webview如何自动登录保存登录信息
  4. 【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据
  5. linux板级初始化
  6. MapServer应用开发平台示例
  7. 在windows xp下编译出ffmpeg.exe
  8. 摸鱼也要讲究方法:工作学习中玩手机并不能缓解无聊和疲劳
  9. 发展数字经济面临哪些困难_解决数字音乐制作面临的最大问题之一
  10. flask中文文档_「Flask系列」 初识Flask
  11. SQL分割字符串详解
  12. Eclipse引用的jar有对应的工程,「Maven依存关系」中显示对应的工程
  13. Bert模型进行文本分类
  14. android 终端 核心,android模块/核心板用于手持终端应用,选几米物联。
  15. ffmpeg下载安装教程及介绍
  16. 数据库备份的三种方式 不要再干掉数据库跑路啦~
  17. Vray材质学习笔记06——铝金属材质
  18. python读有中文的文件_在python中pandas读文件,有中文字符的方法
  19. 黑客用恶意软件Dropper攻击了Pale Moon存档服务器
  20. java poi word bookmarks_poi根据word/excel模板(书签)创建导出word/excel文档

热门文章

  1. 用Python实现视频字符化(蔡徐坤唱跳Rap视频)
  2. RUBi: Reducing Unimodal Biases in Visual Question Answering
  3. 一个小实验告诉你,内存速度到底比硬盘快多少!!!
  4. 1017 怪盗基德的滑翔翼(最长上升子序列扩展)
  5. SQL 升序、降序排列
  6. windows电脑截截屏截图的方法
  7. Jupyter Notebook 内核似乎挂掉了,它很快将自动重启
  8. redis 实践笔记和源码分析
  9. java groovy 表达式_Groovy的基础语法
  10. PHP弹窗回送,AJAX 服务器回送数据失败 onreadystatechange没法触发回调函数