00:01
第四章数据表示与特征工程到目前为止,我们一直假设数据是由浮点数组成的二维数组,其中每一列是描述数据点的连续特征continuous fashion。对于许多应用而言,数据的收集方式并不是这样,一种特别常见的特征类型就是分类特征。也叫做离散特征,这种特征通常并不是数值分类特征与连续特征之间的区别类似于分类和回归之间的区别,只是前者在输入端而不是输出端。我们已经见过的连续特征的例子包括像素明暗程度和花的尺寸测量。分类特征的例子包括产品的品牌、产品的颜色或产品的销售部门,图书、服装、硬件,这些都是描述一件产品的属性,但他们不以连续的方式变化。一件产品要么属于服装部门,要么属于图书部门,在图书和服装之间没有中间部门,不同的分类之间也没有顺序,图书不大于服装,也不小于服装,硬件不在图书和服装之间等等。
01:16
无论你的数据包含哪种类型的特征,数据表述方式都会对机器学习模型的性能产生巨大的影响。我们在第二章和第三章中看到,数据缩放非常的重要。换句话说,如果你没有缩放,比如缩放到单位方差,那么你用厘米还是英寸表示,测量数据的结果将会不同。我们在第二章中还看到,用额外的特征扩充数据也很有帮助,比如添加特征的交互项乘积或更一般的多项式。对于某个特定应用来说,如何找到最佳数据表示这个问题被称为特征工程feature engineering,他是数据科学家和机器学习从业者在尝试解决现实世界问题时的主要任务之一。用正确的方式表示数据对监督模型性能的影响比所选择的精确参数还要大。
02:17
本章我们首先学习分类特征非常重要而又非常常见的例子,然后对于特征和模型的特定组合给出一些有用的变换事例。4.1分类变量作为例子,我们将使用美国成年人收入的数据集,该数据集从1994年的普查数据库中。导出的。艾数据集的任务是预测一名工人的收入是高于5万美元还是低于5万美元。这个数据集的特征包括工人的年龄、雇佣方式。有独立经营、私营企业员工、政府职员等,教育水平、性别、每周工作时长、职业等等。
03:08
这个数据集在哪里?在之前讲第一章下载MGM的时候,他给出了。那个附加代码,还有一些数据集也在里面,下载之后up,他们下载之后会是一个压缩包,之前讲过。进去。进入data目录。注意到这里有个A点贝塔复制。然后粘贴过来。
04:01
书上162页表四杠一给出了该数据集中的前几个条目。大家可以自己看一下,总共给了前11个。这个任务属于分类任务,两个类别是收入小于等于5万和大于5万,也可以预测具体的收入,那样就变成了一个回归任务。但那样问题。将会变得更加的困难。而理解5万这个分界线本身也很有趣。在这个数据集中,A年龄和hours per week每周工作时长是连续特征,我们知道如何处理这种特征,但work class、工作类型、education、教育程度、简的性别、O职业都是分类特征。他们都来自一系列固定的可能取值,而不是一个范围,表示的是定性属性,而不是数量。首先,假设我们想要在这个数据上学习一个logistic回归分类器。我们在第二章这个logistic回归利用下列公式进行预测,预测值为YXYX等于W0乘X0加W1乘X1,一直加了WP乘上XP,再加B大于零。其中wi和B是从训练系中学到的C数,Xi是输入特征,当Xi是数字时,这个公式才有意义,但如果Xi是master或的话。
05:35
这个公式则没有意义。显然,在应用回归时,我们需要换一种方式来表示数据。下一节将会说明我们如何解决这个问题。4.1.1one获编码虚拟变量。到目前为止,表示分类变量最常用的方法就是one hot编码one hot including或N取一编码one out of a including,也叫虚拟变量do we。虚拟变量背后的思想是将一个分类变量切换为一个或多个新特征,新特征取值为零和一。对于线性二分类以及在结论中其他所有模型的公式而言,零和一这两个值是有意义的。我们可以像这样对每个类别引入一个新特征,从而表示任意数量的类别。
06:31
比如说work class特征的可能取值包括government employee private employee self employed和self employedored。用了编码这四个可能的取值,我们创建了四个新特征,分别叫做government employee employee self employed和self employed incorporated。如果一个人的work class取某个值,那么对应的特征取值为一,其他特征均取值为零。因此,对于每个数据点来说,四个新特征中只有一个取值为一,这就是它叫做one hot编码或N取一编码的原因。
07:15
其原理就像书上163页表四杠二格式,利用四个新特征对一个特征进行编码。在机器学习算法中使用此数据时,我们将会删除原始的work class特征,仅保留零一特征。我们使用的one po编码与统计学中使用的虚拟编码读命coding非常相似,但并不完全相同。为了简单起见,我们将每个类别编码为不同的二元特征。在统计学中,通常将具有K个可能取值的分类特征编码为K减一个特征都等于零,表示最后一个可能的取值。这么做是为了简化分析,更专业的说法是就可以避免使数据矩阵吃亏。
08:06
将数据转换为分类变量的one po编码有两种方法,一种是使用panda,一种是使用S。在写作本书时,使用panda要稍微简单一点,所以我们选择这种方法。首先,我们使用panda,从逗号分割值CSV文件中加载数据。
14:47
看到书上164页一检查字符串编码为分类数据。读取完这样的数据集之后,最好先检查每一列是否包含有意义的分类数据。在处理人工比如网站用户输入的数据时,可能没有固定的类别,拼写和大小写也存在差异,因此可能需要预处理。
15:09
举个例子,有人可能将性别成为ma,也有人可能将其为man。好,我们希望能用同一个类别来表示这两种输入检查列的内容,有一个好方法。就是使用pandas的series。Service是data frame中单列doing数据类型service实例的一个方法,Welcome comes已显示唯一值及其出现次数。
16:07
可以看到,在这个数据集中,性别刚好有两个值,Mail和费面说。这说明数据格式已经很好,可以用one hot编码来表示。在实际应用中,你应该查看并检查所有列的值。为了简洁起见,这里我们将跳过这么一步。用T编码数据有一种非常简单的方法,就是使用get函数,Get Miss函数自动转换所有具有对象类型,比如字符串的列或者所有分类的列。这是pandas中的一个特殊概念,我们还没有讲到。
18:06
你可以看到连续特征age和I没有变化,而分类特征的每个可能取值都被扩展为了一个新特征。下面我们可以使用value属性将data数据框data frame转换为哪派数组。然后。训练一个机器学习模型。在训练模型之前,注意要把目标变量现在被编码为两个。com列从数据中分离出来,将输出变量或输出变量的一些导出属性包含在特征表示中。
19:09
这是构建监督学习模型时的一个常见的错误。需要注意的是,Panda中的列索引包括范围的结尾。因此被冒号occupation transport中包括occupation,相信空格transport moving,这与朗派数组的切片不同,后者不包括范围的结尾。例如。NP点11,零到十不包括合影编号为十的元素。在这个例子中,我们仅提取包含特征的列,也就是从A到occupation transport moving的所有列。这一范围包含所有的特征,但不包含目标。
22:15
这一段代码表示的意思是。我不去管这个数据有多少行。我只要提取它从A1直往后。哦。Occupation transport这么多列的数据,也就是。这最后两列拿掉。
23:05
现在的数据表示方式可以被S论处里,我们可以像之前一样继续进行下一步。
24:54
在这个例子中,我们对同时包含训练数据和测试数据的数据框调用。
25:02
Get soon这一点很重要,可以确保训练集和测试集中分类变量的表示方式相同。假设我们的训练集和测试集位于两个不同的数据框中,如果无拉特征的plus所取值没有出现在测试集中,那么panda斯会认为这个特征只有三个可能的取值,因此只会创建三个新的虚拟特征。现在训练题和测试题的特征个数不相同,你就无法在训练机上学到。我们就无法把训练题上学到的模型应用到测试题上。更糟糕的是,假设what cup特征在训练题中有government进行employ和private employ2个值。而在测试题中,有self employed和self employed的两个值。在两种情况下,Panda都会创建两个新的虚拟特征,所以编码后的数据框的特征个数相同。但在训练集和测试集中,两个虚拟特征的含义是完全不同的。训练题中表示government employee的那一列,在测试题中对应的是self employee的。
26:18
如果我们在这个数据上构建机器学习模型,那么它的表现会很差,因为他认为每一列表示的是相同的内容,因为位置相同。而实际上表示的却是非常不同的内容。要想解决这个问题,可以在平时包含训练数据点和测试数据点的数据框上调用get do,也可以确保调用get do home训练和测试集的列名称是相同的,以确保它们具有相同的语义。看到四点、一点、二点,数字可以编码为分类变量。在al近距离的例子中,分类变量被编码为字符串,一方面可能会有拼写错误。
27:09
但另一方面,它明确的将一个变量标志分类变量。无论是为了方便于存储,还是因为数据的收集方式,分类变量通常被编码为整数。例如,假设A的数据集中的人口复查数据是利用问卷收集的,我class的问答被记录为零在第一个框大钩,一在第二个框大钩,二在第三个框大勾等等。现在单列包含数字零到八,而不是像private这样的字符串。如果有人观察表示,数据集的表格很难一眼看出这个变量应该被视为连续变量还是分类变量,但是。如果知道这些数字表示的是就业状况,那么很明显它们是不同的状态。不应该用单个连续变量来鉴别分类特征通常用整数进行编码,它们是数字,并不意味着它们必须被视为连续特征。一个整数特征应该被视为连续的还是离散,然后编码的有时并不明确。如果在被编码的语义之间没有顺序关系,比如what class的例子,那么特征必须被视为离散的特征。对于其他情况,比如五星平声,哪种编码更好,取决于具体的任务和数据,以及使用哪种机器学习算法。
28:33
Can get to Miss函数将所有数词看作是连续的,不会为其创建虚拟变量。为了解决这个问题,你可以使用s one后扣的。指定哪些变量是连续的,哪些变量是零散的,你也可以将数据框中的数值列转分为字符串。为了说明这一点,我们创建一个两列的data frame对象,其中一列包含字符串,另一列包含整数。
30:44
使用只会编码字符看特征,不会改变整数特征。
31:12
如果你想为筛这一列创建虚拟变量,可以使用po参数显示的手出想要编码的列,于是两个特征都会被当做分类特征来梳理。
我来说两句