一个真实数据集的完整机器学习解决方案(上)

更多精彩内容,欢迎关注公众号:数量技术宅。想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01html

引言

咱们到底应该怎么学会、灵活使用机器学习的方法?技术宅作太小小的调研,许多同窗会选择一本机器学习的书籍,或是一门机器学习的课程来系统性地学习。而在学完书本、课程后,并不清楚如何将这些理论、技术应用到实际的项目流程中
算法

这就比如,你的机器学习知识储备中已经有了一块块碎片化的机器学习知识,但不知道怎样才能将它们融合成一个总体。在本次的分享中,技术宅将借用国外机器学习大牛的数据,为你们系统的讲解一个针对真实数据集的完整机器学习解决方案,让你碎片化的知识,一文成型微信

咱们先来看,一个完整的机器学习工程的实现步骤:机器学习

 

1. 数据预处理函数

2. 探索性数据特征统计工具

3. 特征工程与特征选取post

4. 创建基线性能

5. 机器学习建模学习

6. 超参数调优测试

7. 测试集验证

首先,咱们来看本次机器学习模型想要解决的问题 。咱们使用的是纽约市的公共可用建筑能源数据(数据源下载地址:

http://www.nyc.gov/html/gbee/html/plan/ll84_scores.shtml),想要实现的是经过该数据集,利用机器学习算法创建模型,该模型能够预测出纽约市建筑物的能源之星评分,并且咱们要求实现的模型,即筛选出的影响评分的特征,尽量具备可解释性。咱们将使用范例数据集,经过Python对上述的每一个步骤,分步实现。而该项目的完整代码,咱们也将在文章的最后分享给你们。

经过对于咱们想要实现的这一模型的简单分析,能够知道咱们须要作的是一个有监督的回归机器学习模型

其一,咱们训练的数据集中,既有潜在的特征变量,也有目标,整个学习过程就是找到目标与特征之间的有效映射模型

其二,纽约市建筑物的能源之星评分,是一个0-100的连续变量,而非分类标签,构建的模型属于回归的范畴

简单分析完咱们想要解决的问题,接下来,咱们就遵循上述七个步骤,依次开发实现咱们想要的模型。

数据预处理

在实际的数据集中,包含互联网数据、金融数据等,每每都会存在缺失值和异常值,咱们进行机器学习的建模,第一步就须要对数据进行清洗,并在清洗的过程当中处理这些缺失、异常。

咱们使用pandas读取准备好的csv数据集

咱们读入的Dataframe共有60列,此处只截取了一部分的数据因子。其中,能源之星得分(ENERGY STAR Score)是咱们须要预测的目标列,而其他的列,咱们均可以将它看做是潜在可以构成特征的变量,对于这些列,咱们最好都可以清楚每一列的数据表明的含义,以便于咱们可以更好的在未来解释这个模型。

对于咱们想要预测的目标列,能源之星得分(ENERGY STAR Score),咱们来作一个详细的说明:该得分来自纽约州每一年所提交的能源使用状况报告,使用的是1~100的百分制排名,分数越高越好,表明该建筑物使用能源的效率的越高,相对来讲更加节能环保。

接下来,咱们使用dataframe的info()方法查看每一列的数据类型:

能够看到,其中有至关多的列属于objects类型(非数据类型)。若是咱们须要用这些列来造成模型的特征,就须要将其转换为数值数据类型。咱们将全部“Not Available”条目替换为np.nan,而后再将相关列转换为float数据类型,如此一来,全部的列,就都归入分析范围了。

在处理完非数据类型的列后,咱们在进行机器学习模型训练前,必须对缺失数据进行处理。缺失数据的处理方式通常有二者:删除、填充,删除指的是直接删除缺失数据对应的行或列,而填充能够有前向填充、均值填充等多种方式。对于样例中的数据集,咱们先来看每列中缺失值的数量。

从上图的统计结果中,%of Total Values列表示缺失数据量占该列总数据量的百分比。对于缺失数据量超过必定比例的列,加入机器学习模型训练数据,显然会受到缺失值的影响,所以,咱们考虑剔除缺失值超过必定比例的列数据。

除了缺失数据外,咱们还须要对离群数据进行进一步的处理,离群数据或是由一些偶发现象产生,或是自己数据在存储的过程当中出现了错误,它们会对特征的计算值产生较大的影响。咱们对于离群值采用缩尾处理(Winsorize) ,具体是指,对于低于第一四分位数(Q1) - 3 *四分位差、高于第三四分位数(Q3) + 3 *四分位差的数值,进行缩尾。

处理完缺失数据、离群数据后,咱们进入下一环节。

探索性数据特征统计

探索性数据统计分析(简称EDA)是对咱们预处理完的数据进行探索性分析的阶段,经过EDA,咱们能够初步知道数据的一些统计特征,以帮助咱们更加合理的选择和使用数据构建特征。

单变量统计特征

因为全部数据列中,能源之星得分(ENERGY STAR Score)是最重要的、也是咱们要预测的目标变量,因而咱们先经过hist函数,画出能源之星得分的直方图,来看一下能源之星得分的一个具体的分布。

经过hist绘制的直方图能够看到,能源之星得分这一目标变量,既不是均匀分布,也不是相似正态分布那样的钟形曲线,而是一个两端分布频率极高,中间分布频率较低且不均匀的一个分布。

这个分布看上去比较奇怪,但若是仔细看一下能源之星得分的官方定义,它是基于“自我报告的能量使用”,也就是要求每一个建筑物的全部者自行报告能源的使用状况,这就比如每一个学生在考试的时候能自定成绩,那谁又不想拿满分呢?而对于0分频率的忽然增高,或许是由于有些建筑物年久失修,连全部者也几乎放弃治疗了。

可是,不管能源之星得分的分布多么不合乎常理,它都是咱们这个项目须要预测的惟一目标,咱们更须要关注的是如何准确的预测分数。

分组特征

咱们能够先用其中的某一个变量对全部的建筑物进行一次分类,再在每一个分类中计算该分类的能源之星得分的数据分布。咱们能够按类别对密度图进行着色,以查看变量对分布影响。咱们首先查看建筑物分布类型对于能源之星得分的影响,以下是实现代码与可视化结果。

上图直观地反应出了不一样建筑物类型,对于得分确实存在较大的影响,好比办公楼在高得分段分布频率更高,而酒店的低得分区域分布频率更高。所以,建筑物类型应该是一个比较重要的影响变量。因为建筑物类型是一个离散变量,咱们能够经过对建筑物类型进行独热编码,将他们转换为数值变量。

咱们再来看一个纽约市下属不一样行政区域对于能源之星得分的影响,从下图能够看出,不一样区域对于得分基本上没有区分度,也能说明该变量大几率不是一个好的特征变量。

相关性统计

咱们可使用皮尔逊(Pearson)相关系数来衡量目标与其余数据列的相关关系,从而找到与目标变量相关性(正负)最强的列的排序。

咱们分布截取了负相关性、正相关性最高的两组变量,能够看到,负相关性的变量,其相关性的绝对数值更高,而且最负相关的几项类别变量几乎都与能源使用强度(EUI)有关。EUI表示建筑物的能源使用量是其规模或其余特性的函数(越低越好)。直观来看,显著的负相关性是有意义的:随着EUI的增长,能源之星评分趋于降低。

双变量分析
咱们还可使用散点图来对双变量进行分析,并在散点图中用不一样颜色,表明某个变量所区分的不一样子类别,好比下图以不一样建筑物的类型做为分类,绘制的能源之星评分与Site EUI(即负相关排名第一变量)的二维散点图。

经过这个图,能够印证咱们在此前计算的相关性系数,不一样类型的建筑物,随着SiteEUI的减小,能源之星得分呈现上升态势。
此外,成对图(Pairs Plot)也是一种很不错的分析工具,好比4*4的Pairs Plot,咱们就能同时分析4组变量相互之间的联合分布与相关关系,咱们使用seaborn可视化库和PairGrid函数来建立Pais Plot--上三角部分使用散点图,对角线使用直方图以及下三角形使用二维核密度图和相关系数。

特征工程与特征选取

特征工程和特征选取,能够说是整个机器学习项目中最为关键的一步。一个机器学习模型在样本内外可否有优异的表现,模型的构建与参数的选择,并非最重要的,最重要的仍是特征对于目标的预测能力。若是特征的预测能力足够强,即便简单的线性模型,也能有较好的拟合能力。咱们先来简单解释一下特征工程和特征选取:

特征工程:特征工程是指经过原始数据,提取或建立新特征,在这个过程当中,可能须要对部分原始变量进行转换。例如对于某些非正态分布数据取天然对数、对分类变量进行独热(one-hot)编码,使得他们可以被归入模型训练中。

特征选取:特征选取在实际过程当中是一项须要经验的操做,每每经过删除无效或重复的数据特征以帮助模型更好地学习和总结数据特征并建立更具可解释性的模型。特征选择更多的是对特征作减法,只留下那些相对重要的特征,在删除的过程当中,须要特别注意避免重要特征被删除的状况。

机器学习模型只能从咱们提供的数据和特征中学习,因此必须确保数据中有预测咱们目前所须要的所有数据,若是咱们提供的数据特征维度不够丰富,最终的学习效果也许会达不到咱们的预期。

接下来,咱们对本次项目的数据集分两块进行特征工程。第一是对于分类变量,采用独热(one-hot)编码进行分类,转换为数值。独热(one-hot)编码在模型的训练数据中包含分类变量时,应用很常见。好比,咱们的某个变量包含三个类别,那么就用00一、0十、100三个独热编码,分别对应三个原始分类。

第二是对数值型数据取对数。咱们知道,不少原始的数据的分布都不是正态分布,若是咱们直接将数据放入模型训练,可能存在由数据偏态分布带来的潜在误差,因而,咱们对全部数值特征取天然对数并添加到原始数据中。如下是上述两个特征工程操做步骤的Python代码实现。

完成上述特征工程后,咱们的变量维度又增长了许多(独热编码、指数变换),这其中大几率存在着一些冗余的变量,好比高度相关的变量。如下图为例,Site EUI与Weather Norm EUI,这两个变量的相关系数高达0.997,显然咱们不须要都作保留。

这些相关性很高的变量,在模型中咱们称之为共线性(collinear),消除变量之间的共线性,可以让机器学习模型更鲁棒而且具备更强的可解释性。咱们将使用相关系数来识别和删除共线性的冗余特征,具体作法是,咱们经过循环遍历,两两计算除目标变量外全部变量的相关系数,当某两个变量相关系数大于必定阈值,咱们就放弃其一,具体实现代码以下。筛选完成后,剩下64列特征和1列目标特征(能源之星得分)。

创建基线(Baseline)

在完成特征工程和冗余特征的筛选后,咱们开始下一步工做:创建模型绩效对比的基准,咱们也把它称之为基线(Baseline)。咱们经过基线来与最终模型的绩效评估指标对比,若是机器学习最终训练获得的模型没有超越基线,那么说明该模型并不适用该数据集,或是咱们的特征工程特征选取存在着问题。

对于回归问题,一个合理的基线是经过预估测试集中全部示例的运行结果为训练集中目标结果的均值,并根据均值计算平均绝对偏差(MAE)。选择MAE做为基线有两方面考虑,一是它的计算简单,二是其可解释性强。

在计算基线前,咱们须要先将原始数据划分为训练集和测试集,这也是为了在后续的处理过程当中,绝对避免数据泄露的发生。咱们采用比较常规的70%原始数据进行训练,30%用于测试。

划分完训练与测试集,咱们再计算MAE的数值,并计算基线。由下图结果能够看到,计算得出预估模型表现为66,在测试集中的偏差约为25左右(百分制)。能够说是比较容易达到的性能。

深夜码字,困意袭来,上篇暂且先到这里,下篇争取明天更完

关注 “数量技术宅”不迷路(下篇精彩继续),您的点赞、转发,是我输出干货,最大的动力

 


往期干货分享推荐阅读

如何使用交易开拓者(TB)开发数字货币策略

股指期货高频数据机器学习预测

如何使用TradingView(TV)回测数字货币交易策略

如何投资股票型基金?什么时间买?买什么?

【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

AMA指标原做者Perry Kaufman 100+套交易策略源码分享

【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

如何获取免费的数字货币历史数据

【数量技术宅|量化投资策略系列分享】多周期共振交易策略

【数量技术宅|金融数据分析系列分享】为何中证500(IC)是最适合长期作多的指数

商品现货数据很差拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

相关文章
相关标签/搜索