机器学习与人工智能基础:价值估算(第五章-特征)

特征
Features


前言叨B叨

都到第五章了, 可能有些同学开始觉得有些烦躁了, 怎么还不上真二八经的代码? 事实上理解这些基本概念才是关键. 代码真没几句话, 因为最复杂的部分已经由先人封装好了, 我们只需要敲一两句话, 再配几个参数就妥妥的了.
今天主要讲数据中特征值的处理, 上一章提到过, 特征值的处理对最后预测结果的准确性有着决定性的关系. 所以这张大家务必仔细理解.

1. 特征工程(Feature engineering)

当使用监督学习解决问题时,我们将特征输入到机器学习算法中,该算法学习如何根据这些特征预测正确的输出。这是一个简单的想法,但是在实际的应用程序中,它需要大量的尝试和错误处理来找出哪些特性对建模最有用。特征工程是利用我们对问题的认识和分析来选择特征或创建新的特性,以此使机器学习算法更精确地工作。当您构建有监督的学习系统时,特性工程将消耗您的大部分时间。做好特征工程会大大改善模型的质量。

在训练机器学习算法时,为了获得最好的结果,我们要使算法尽可能简单地建模。这意味着我们希望输入的特征与输出值紧密相关。事实上,无用的特征可能会损害我们系统的准确性。让我们看一个例子。这里有张表格列出每个房子的大小,以及这些房子里盆栽植物的数量。

房子的面积很可能有助于确定房子的价值。我们知道,基于我们对房地产市场的了解。因此,这将是一个很好的特征,我们要把它包括在我们的模型中。但是我估计如果不是兰花或是摇钱树之类的盆栽植物,数量多少也不会影响房子的最终价值。
盆栽植物只是装饰,它们便宜,而且很容易添加和去除。很少有人会根据房子里盆栽植物的数量来决定是否购买。在这种情况下,这个特征似乎会在模型中引入随机噪声,而不是告诉我们关于我们试图预测的实际值的任何东西,我们应该从我们的模型中删除这个特性。这就是特征工程的一个例子。

接下来让我们来看一些特征工程的不同策略
到目前为止,我们已经讨论了从模型中添加和删除特性以提高精度的方法。

  • 从我们的模型中包含或排除哪些特性是特征工程最简单的形式。
  • 我们还可以将多个特性组合成一个特性。

让我们看一个例子。这里有一张表,
image.png

显示每个房子的英尺和英寸的高度。高度可能是衡量房子价值的一个非常有用的度量标准,但是用不同单位去描述同一个特征会使模型更复杂。如果吗这两个值同时输入模型,那么该算法必须计算出这两组数字是相关的,是单个测量的一部分。如果我们预先处理我们的数据,只用一个单位的单个测量代替每一个高度测量就更好了。

工程策略的另一个特点是分级。分级是你做数值的测量和转换成一个类。让我们看一个例子。这里有一张表,

上面列有房子和游泳池的长度。泳池的确切大小与房子是否有游泳池几乎没有关系。有些买家想要有池的房子,有些不需要。所以在这种情况下,我们可以预处理数据,并用真/假特征替换数字特征池大小。这简化了模型。

我们的最后一个特征工程策略是one-hot编码方式(one-hot encoding)。

当我们的模型中有分类数据时,我们必须先处理然后才能使用它。one-hot编码是之中让机器学习模型可以理解的数据分类方法。让我们看一个例子。

在我们的住房数据集中,一个分类数据的例子是社区的名字。我们不能直接将社区的名字输入到我们的模型中,因为它是一串文本而不是数字。相反,我们需要一种方法来将每个社区表示为一个数字。最简单的解决方案是给每个社区分配一个数字。但这并不适用于某些机器学习算法。
问题在于机器学习算法会认为这些数字的顺序是有意义的。它会假设大一些的数字比小一些的数字更重要。但是社区ID 2并不是社区ID 1的两倍。这些数字的顺序实际上毫无意义。这里的解决方案是使用一个不同的表示,称为one-hot 编码方式。

让我们再看看原来的房子清单。在所有的三间房子,有两个不同的社区,normaltown Skid Row。在one-hot 编码中,我们在数据集中为分类数据中的每个唯一类别创建一个新特性。在这里,我们已经创造了is_normaltown和is_skidrow两个特征。

然后,我们将每一个设置为1或0,这取决于房子是否在那个社区。这被称为one-hot 编码。one-hot 编码对用机器学习模型容易理解的简单数值数据代替分类数据很有用。

2. 为房价预测选择最合适的特征

让我们看看这个房价预测项目的中的数据集,然后将我们所学到的关于特征工程的知识用起来。
让我们打开view_data.py。运行起来后让我们查看一下数据集中的每个特征,看看它是否需要修理修理,或者我们是否可以直接使用它。


首先看建造年份(year_built)。这项特征将告诉算法的每个房子的年龄,这似乎是一个重要的因素。这个特性是数字的,所以我们可以不用任何处理。接下来的几个特点也是数字,包括房子的储藏室数量,卧室的数目,全浴室的数目,半浴室,以及实用面积和总面积。
所以我们可以跳过它们。接下来我们有车库类型(garage_type)。看起来有三种可能的车库类型值: 没有车库, 独立车库, 非独立车库。车库类型貌似有助于我们的房价模型,但要使用这些数据,我们需要预先用one-hot编码方法处理它一下。
也就是说将单个特性更改为三个独立的特性。没有车库,有独立的车库,还有附属车库。对于每一个房子,只有其中一个将被设置为true。接下来的两个特点,车库和车库的尺寸大小和平方英尺平方英尺,我们应该能直接使用,无需任何额外的处理。好吧,让我们滚动。接下来,我们有几个true/false字段,有壁炉,有游泳池,有集中供暖,还有中央空调。true/false值在我们的模型中很好用。它们将被自动处理为1或0,所以不需要额外的处理工作。
接下来我们把每个房子的地址分成五个不同的字段。有门牌号码,街道名称,单元编号,邮政编码。在我们的模型中门牌号不会有任何用处。不太可能有人买房子是因为门牌号。更高的街道数并不意味着房子更有价值,它只是一个随机数。所以让我们从我们的模型中删除这个字段。单元数也一样。房子的位置对价值有很大的影响,所以我们需要在我们的模型要包含一些信息。
但是,有些字段提供重复的信息,说的是同一个意思。例如,如果我们知道一个房子的邮政编码,我们已经知道它在哪个城市,所以我们可能不需要在我们的模型中同时包含城市和邮政编码。街道名称是一个可以拿掉的特征。一条街道就是一个很小的区域,有时在某一条街上可能会增加房屋的价值,但在我们的模型中包括街道名称会使我们的模型复杂得多,因为在我们应用一个one-hot编码之后,我们将为数据集中的每一条街道提供一个新的特性。因此,让我们先把这个城市留在我们的模型中,然后对它应用one-hot编码。
现在我们不包含任何其他地址字段。这就是为什么特性工程是需要大量的尝试和排错。如果我们在模型中只包含城市名称,并不能得到好的结果,我们可能想再次使用街道名或其他地址字段再试一次。除非我们两种方法都试过,否则无法提前知道哪种方法会更好.

最后一点是房子的售价。这就是我们试图用我们的模型预测的y值或目标值。现在我们已经单独研究了每个字段,对于在模型中哪些特征需要修剪我们现在有了个基本概念。这将使我们的代码更容易编写。

3. 特征值用得越少越好:维度灾难(curse of dimensionality)

在构建机器学习模型时,尽可能地包含模型中的许多特征似乎是个好主意。数据越多越好,对吗?事实证明,然鹅并不总是这样。当我们在数据集中讨论更多数据时,我们可以指两种不同的东西。首先,我们可以讨论数据集中更多的数据行。对于我们的住房数据集,拥有更多的房屋记录是件好事。但我们也可以在数据中拥有更多的特性或列。有更多的功能是有帮助的,直到某一个阈值。终撞到了一堵墙--更多的特征反而降低了准确性。

这个现象被称为维度灾难(curse of dimensionality)。维数灾难意思是说,当我们为模型添加更多的特性时,建立一个好模型所需的训练数据行数趋向指数增长。让我们看一个例子。

假设我们的房价预测只使用了一个特征,房子的大小。在这里,我们绘制的是100条房价数据。有100个数据点,我们对图的所有区域都有很好的覆盖率。现在,让我们为数据集添加另一个维度。假设我们的房价预测用的是房子的大小、平方英尺和卧室的数量。

我们仍然有和以前一样的100个数据点,但是现在我们添加了另一个特征,或者维度,这100个数据点只覆盖了图中可能的总面积的一小部分。为了更好地覆盖这个图表中所有可能的区域,我们现在需要的数据是我们的一维房价预测的10倍。换句话说,当我们在机器学习系统中添加更多的特性时,我们需要一个指数级的数据行来覆盖增加的空间。当我们开始获取成百上千的特征时,数据量和训练系统所需的时间可能是令人望而却步的。
因此,在构建机器学习系统时,不能为了增加特征数量而增加特征。你的目标是加入对预测有用的特征,排除对预测无效或者破坏的特征。

结语

本章至此, 后面还有三章. 待我慢慢道来.
如有错误请高手指正.

你的 关注-收藏-转发 是我继续分享的动力!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容