00:02
4.6,利用专家知识。对于特定应用来说,在特征工程中通常可以利用专家知识expert knowledge。虽然在许多情况下,机器学习的目的是避免创建一组专家设计的规则,但这并不意味着应该设计该应用或者说该领域的先验知识。通常来说,领域专家可以帮助找出有用的特征及信息量,比数据原始表示要大得多。想象一下,你在一家旅行社工作,想要预测机票价格,假设你有价格以及日期、航空公司、出发地和目的地的记录机器学习模型。可能从这些记录中创建一个相当不错的模型,但可能无法学到机票价格中的某些重要因素。例如,在度假高峰月份和假日期间,机票价格通常更高。虽然某些假期的日期是固定的,比如圣诞节,其影响可以从日期中学到,但其他假日的日期可能取决于月下,比如光明节和复活节,或者有官方规定。
01:07
比如学校放假,如果每个航班都只使用公立记录日期,则无法从数据中学到这些时间。但添加一个特征是简单的。其中编码了一个航班在公休假日或学校假期之前、之中还是之后。利用这种方法可以将关于任务属性的经验知识编码的特征中,以辅助机器学习算法添加一个特征并不会强机器学习算法来使用它,即使最终发现价值信息不包含机票价格信息,用这一信息来扩充数据也不会有什么害处。下面我们来看一个利用专家知识的特例,虽然在这个例子中,对这些专家知识更准确的叫法应该是常识。任务是预测。
02:02
某个人家门口的自行车出租在纽约。运营着一个带付费系统的自行车租赁站网络,这些站点遍布整个城市,提供了一种方便的交通方式。自行车出租数据以匿名形式公开,并用各种方法进行了分析。我们想要解决的任务是,对于给定的日期和时间,预测有多少人会在其家门口租一辆自行车,这样他就知道是否还有自行车留给他。我们首先将这个站点2015年8月的数据加载为一个panda数据框,我们将数据重新采样。为每三每三小时一个数据,以得到每一天的主要趋势。在编写代码之前,首先需要。把第一章中奖M基乐去get up下载的这个压缩包打开。
03:02
复制目录。到项目的根目录下。下面给个。租车数量的可视化。观察此数据。我们可以清楚的区分每24小时中的白天和夜间,工作日和周末的模式似乎也有很大的不同。在对这种时间序列上的预测任务进行评估的时候,我们通常希望从过去学习并预测未来。也就是说,在划分训练题和测试题的时候,我们希望使用某个特定日期之前的所有数据作为训练题。该日期之后的所有数据作为测试集。这是我们通常使用时间序列预测的方式。已知过去所有的出租数据,我们认为明天会发生什么?我们将使用前184个数据点对应前23天作为训练集,剩余的64个数据点对应剩余的八天作为测试机。
04:14
在我们的预测任务中,我们使用的唯一特征就是某一租车数量对应的日期和时间。因此输入特征是日期和时间,比如2015年8月1日零点,而输出是在接下来三小时内的租车数量。根据我们的data frame在这个例子中是三。在计算机上存储日期的常用方式是使用four six时间,这有些令人意外,它是从1970年1月1日零点,也就是unix时间的起点开始到现在的总秒数。首先,我们可以尝试使用这个单一整数特征作为数据表示。
05:10
我们首先定义一个函数,它可以将数据划分为训练题和测试题,构建模型,并将结果做一下可视化。我们之前看到。随机森林需要很少的数据预处理,因此它似乎很适合作为第一个模型。我们使用to时间特征X,并将随机森林回归传入我们的。自定义函数e factors。结果。在训练集上的预测结果相当的好,这符合随机森林通常的表现。但对于测试题来说,预测结果是一条水平线常数直线。
06:05
R方分数为负的0.04,说明我们什么都没有学到,到底发生了什么?问题在于特征和随机森林组合测试集中的pro时间特征的值超过了训练集中的特征取值的范围。测试集中数据点的时间中要关于训练体中的所有数据点数以及随机分离,也就是基于数的模型无法外推。到训练题之外的特征范围。结果就是模型只能预测训练题中最近数据点的目标值及最后一次观测到数据的时间。显然,我们可以做得更好,这就是我们的专家知识的用武之地。通过观察地面数据中的租车数量图像,我们发现两个因素似乎非常重要,一天内的时间与一周的星期几。因此,我们先来添加这两个特征。我们从four six时间中学不到任何东西,所以删掉这个特征。首先,我们仅使用每天的时刻。
07:13
现在的预测结果对一周内的每天都具有相同的模式。R方分数达到了0.6,已经好很多了,但预测结果显然没有抓住每一周的模式,下面我们还添加一周的星期几作为特征。现在我们的模型通过考虑一周的星期几和一天内的时间,捕捉到了周期的周期性的行为,它的耳方为0.84。预测性能相当的好,模型学到的内容可能是八月前23天中星期几于几时刻。
08:06
每种组合和平均注册的数量,这实际上不需要像随机森林这样复杂的模型,所以我们尝试一个更简单的模型,现实回归line。Le gra的效果差不多,而且周期性模式看起来很奇怪,其原因在于我们用整数编码一周的星期几和一天内的时间。它们被解释为连续变量,因此线性模型只能学到关于每天时间的线性函数,它学到的是时间越晚,组织数量越多。但实际模式比周要复杂的多,我们可以通过将整数解释为分类变量,用王后顶扣的进行变化来获取这种模式。
09:11
他给出了比连续特征编码好很多的匹配。现在线性模型为一周内的每天都学到了一个系数,为一天内的每个时刻都学到了一个系数,也就是说一周七天共享一天内每个时刻的模式。利用交互特征,我们可以让模型为CC几和时刻的每一种组合学到一个系数。这一变换最终得到一个性能与随机森林类似的模型。这个模型的几大优点是可以清楚的看到学到的内容。对每个星期几和时刻的交互强学到的一个系数,我们可以将模型学到的系数做图,而这对于随机证明来说是不可能的。首先为时刻和星期几特征创建特征名称。
10:13
然后利用get better方法。对normal features提取的所有交互特征进行命名,并且仅保留系数不为零的那些特征。下面将线性模型学到的系数做一下可视化。4.7小结与展望本章讨论了如何处理不同的数据类型。特别是分类变量。我们强调了使用适合机器学习算法的数据表示方式的重要性,例如one hot编码分类变量,还讨论了通过特征工程生成新特征的重要性,以及利用专家知识从数据中创建、导出特征的重要重要性。特别是线性模性可能会从分箱添加多项式和交互项而生成的新特征中大达受益。对于更加复杂的非线性模型,比如随机三和SDM,在无需显示拓展特征空间的前提下,就可以学习更加复杂的任务。在实践中所使用的特征以及特征与方法之间的匹配通常是机器学习。
11:35
方法表现良好的最重要的因素。现在你已经知道如何适当的表示数据,以及对哪个任务使用哪一种算法。下一章第五章重点介绍评估机器学习模型的性能与选择正确的参数设置。
我来说两句