机器学习项目实战(一)

毕业啦

前2天匆匆离校,真的太匆忙了,感觉还有好多事情没做完。已经不再是学生,即将踏入社会,心里有些焦虑,但更多的还是憧憬。人总要学会自己成长,并走向成熟。希望同学未来都能够前程似锦,自己能够得到更大的成长和进步!毕业快乐!

感觉很久没有更新文章了,这段时间刚忙完毕业的事情,有的时候确实太忙没时间,;还有个原因就是,阅读量真的不太多。我自己知道这其实很正常,文章写得也不太多,人还是存在惰性,加上自己太累所以没多少动力在。我就是实话实说。

我自己也知道文章的质量确实没有粉丝量几万的公众号那么高,也不指望粉丝能有多少,我的初衷是想建立与同行或者有兴趣的小伙伴一个互相学习交流的平台。自己也不是什么大神,仍在努力中。

希望以后大家多多支持,转发转发,点点赞,多互动留言也是极好的,甚至加群交流都是可以的。还是相信,有些小事坚持下去也可能会得到意想不到的结果。

即将南下,马上开始职业生涯,以后肯定是没这么多时间更新了,但还是立个flag,一般情况下每周更新 1 - 2 篇高质量文章,如果时间充裕肯定会多写多更新。

机器学习项目实战

我们将使用真实的数据完整地walk through一个完整的机器学习问题。

该项目的任务是:

使用提供的建筑物能源数据开发一个模型,该模型可以预测建筑物的能源之星得分,然后解释结果以找出最能预测得分的变量。

Workflow

机器学习项目的一般结构:

Data cleaning and formatting

Exploratory data analysis

Feature engineering and selection

Establish a baseline and compare several

machine learning models on a performance

metric

Perform hyperparameter tuning on the best

model to optimize it for the problem

Evaluate the best model on the testing set

Interpret the model results to the extent possible

Draw conclusions and write a well-documented report

机器学习基本流程都如上。

OK,赶紧开搞。

首先导入所需库:

导入数据并整理

原始数据中,有60列,很多列我们并不知道是什么意思。但是根据任务描述,可以知道我们是要预测那列。其他列我们虽然不知道是什么意思,这也问题不大,虽然看起来已经解决了这个问题,但是我们还是最好掌握相关知识(域知识)。

最低要求是我们必须得明白所预测的玩意是什么吧。

target:

A 1-to-100 percentile ranking for specified building types, calculated in Portfolio Manager, based on self-reported energy usage for the reporting year.

说人话就是说,能源之星评分是一种根据能源效率对建筑进行排名的方法,其中最差1分和最好100分。

这是一个相对百分比排名,意味着建筑物之间的评分是有联系的,并且应该在整个值范围内呈。

数据类型与缺失值

方法通过显示每列的数据类型和非缺失值的数量来评估数据的快速方法。

从查看数据帧开始,因为缺少的值被编码为“不可用”而不是np.nan(不是数字),这就会出现问题。这意味着带数字的列不会被表示为数字,因为pandas将具有任何字符串值的列转换为所有字符串的列。

果然,有很多数据列为数据类型。在进行数值分析之前,必须将它们转换为数据类型。

转化为正确的数据类型

我们通过用替换“Not Available”,将带有数字的列转换为浮点数类型。

缺失值

现在我们有了正确的列数据类型,我们可以通过查看每列中缺失值的百分比进一步分析。当我们进行探索性数据分析(EDA)时缺少值是很好的,但是它们必须用机器学习的方法进行填充。

以下是计算每列缺失值的数量和缺失的总值的百分比的函数:

要保留的列可能有点随意,但是对于该项目我们。一般来说,要小心点drop任何信息,尽管没有全部的观察值,它仍然可以用于预测目标值。

在进行机器学习之前,其余的缺失值必须使用适当的策略进行估算(填充)

EDA

探索性数据分析(EDA)是一个开放式的过程,在这个过程中,我们可以绘制图表并计算统计数据以便探索我们的数据。EDA本身可能很有趣(例如找到两个变量之间的关联)或者它们可以用于通知建模的决策,例如使用哪些功能。简而言之,EDA的目标是确定我们的数据可以告诉我们什么!

EDA :

The purpose is to to find anomalies, patterns, trends, or relationships

由于能源之星得分是百分之一等级,我们期望看到的是一个完全flat的分布,每个分数占分布的1%(约90个建筑物)。然而绝对不是这种情况,因为从上图可以看到两个最常见的分数1和100构成了整体分数的不均匀数量。

为了对比能源之星得分,我们可以看一下能源使用强度(EUI),即能源消耗总量除以建筑物的平方英尺。这里的能源使用量不是自我报告的,所以这可能是建筑物能效的更客观的衡量标准。此外,这不是一个百分等级,所以绝对值是重要的,我们可以预计它们近似正态分布,在低端或高端可能有几个异常值。

这显示我们有另一个问题:!由于存在几个非常高分的建筑物,这张图难以置信地倾斜了。所以必须进行异常值处理。

`

你会很清楚地看到最后一个值异常大。出现异常值的原因很多:错字,测量设备故障,错误的单位,或者它们可能是合法的但是个极端值。

移除异常值

当我们删除异常值时,一定得小心谨慎,它们可能是我们应该进一步调查的关键数据。当去除异常值时,尽可能保守,并使用来定义:

Site EUI 柱状图:

移除异常值后,接近正态分布,右边有一个长尾巴(有一个正偏斜)。

特征与目标之间的相关性

为了量化特征(变量)和目标之间的相关性,我们可以计算。

这是衡量两个变量之间线性关系的强度和方向:-1表示两个变量完全负相关,1表示两个变量完全正相关。下图显示了相关系数的不同值以及它们如何以图形方式显示:

尽管特征和目标之间可能存在非线性关系,并且相关系数并未考虑特征之间的相互作用,但线性关系是探索数据趋势的好方法。我们可以使用这些值来选择要在我们的模型中使用的特征。

计算所有变量和目标之间的相关系数:

特征与目标之间存在若干强烈的负相关关系。与得分最负相关的是能源使用强度(EUI),场地EUI(kBtu /ft²)和天气标准化场地EUI(kBtu /ft²)(它们在计算方式上略有不同)的不同类别。 EUI是建筑物使用的能源量除以建筑物的平方英尺,意味着衡量建筑效率越低越好。直观地说,这些相关性是有意义的:随着EUI的增加,能源之星评分趋于下降。

为了解释可能的,我们可以,然后计算相关系数。尝试捕捉自治市镇或建筑类型之间的任何可能的关系(记住这些是),并且我们必须对这些列进行。

我们对数值变量进行对数和平方根变换,对所选的两个分类变量(建筑类型和自治市镇)进行独热编码,计算所有特征与分数之间的相关性,并显示前15个最积极的和最重要的15个最负面的相关性。

most negative correlations:

most positive correlations:

在改变这些特征之后,最强的关系仍然与能源使用强度(EUI)有关,而对数和平方根变换似乎没有导致更强的关系。

我们可以使用这些相关性来执行特征选择。现在我们在Site EUI(kBtu / ft ^ 2)数据集中绘制最显着的相关性(以绝对值表示)。我们可以根据建筑物类型对图表着色以显示如何影响关系。

未完待续…….

后续的处理还有特征工程、共线性特征的去除、对数据集进行分割、建立Baseline等数据清洗工作

希望大家多多关注我的个人公众号哦,已经关注的小伙伴千万别取关了,我会坚持写下去的,将平时的学习与大家共同分享。

希望大家能多支持,其实一个人写个公众号挺不容易的。

公众号后台点击“入坑”即可加入公众号微信群,如二维码过期可在后台直接私我

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180626G02F0S00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券