00:02
1.7第一个应用鸢尾花分类。本节我们将完成一个简单的机器学习应用,并构建我们的第一个模型,同时还将介绍一些核心概念和术语。假设有一名植物学爱好者对他发现的鸢尾花的品种很感兴趣,他收集了每朵鸢尾花的一些测量数据,花瓣的长度和宽度以及花萼的长度和宽度。所有测量结果的单位都是厘米。可以看到图上的。书上11页的图一杠二。它还有一些冤偶花的测量数据,这些花之前已经被植物学家、植物学的专家鉴定为属于Sana。或者。Virgin virgin3个品种之一。对于这些测量数据,它可以确定每朵拥有花所属的品种。我们假设这位植物学爱好者在野外。
01:03
只会遇到这三种鸢尾花。我们的目标是构建第一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新的幽默花品种。因为我们有已知品种的拥有花的测量数据,所以这是一个监督学习问题。在这个问题中。我们要在多个选项中预测其中一个拥有花的品种,这是一个分类classification的问题。可能的输出鸢尾花的不同品种叫做类别,Class数据集中,每朵鸢尾花都属于三个类别之一,所所以这是一个。三分。所以这是一个三分类问题。单个数据点一朵鸳偶花的预期输出是这朵花的品种。对于。每一个数据点来说,它的品种叫做标签。
02:01
Label。看到1.7.1节初始数据,本例中我们用到了鸢尾花iris数据集,这时机器学习和统计学中一个经典的数据集。它包含在的data set模块中,我们可以将用as函数来加载数据。
03:05
Lord as。这么一个函数。他会返回一个。放对象。与字典非常相似,里面包含键和值。
04:10
Decr键对应的值是数据集的简要说明。我们这里给出说明的开头部分,你可以自己查看其余的内容。
05:03
Park names。键对应的值是一个字符串数组,里面包含我们要预测的花的品种。Names键对应的值是一个字符串列表。对每个特征都进行了说明。
06:17
数据包含在target和data字段中,Data里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量,数据格式为囊拍数组。
07:04
得塔数组的每一行对应一朵花。列代表每朵花的四个测量数据。可以看出,数组中包含。150多。不同的花的测量数据。前面说过,机器学习中的个体叫做样本sample,其属性叫做特征fe data数组的形状是样本数150。
08:02
乘以特征数四,也就是150行四列。这是论中的约定,你的数据形状应始终遵循这个约定。下面给出前五个样本的特征数值。从数据中可以看出。前五朵花的花瓣宽度。都是0.2厘米。第一朵花的花萼最长是5.1厘米。
09:00
Target数组包含的是测量过的每朵花的品种,也是一个朗派数组。Target是一个一维数组,每朵花对应其中一个数据。
10:12
品种被转换成了从零到二的整数。上述数字代表的含义由iris targets数组给出。也就是这个数组。零代表。一代表color,二代表我吉尼。
11:05
看到1.7.2节衡量模型是否成功,训练数据与测试数据。我们想到利用这些数据构建一个机器学习模型,用于预测新测量的原有化的品种。但在将模型应用于新的测量数据之前,我们需要知道模型是否有效,也就是说,我们是否应该相信它的预测结果。不幸的是,我们不能将用于构建模型的数据用于评估模型,因为我们的模型会一直记住整个数据集。整个训练集,所以对于训练集的中的任何数据点总会有预测,总会预测正确的标签。这种记忆无法告诉我们模型的泛化。Generalize能力如何?换句话说,在新数据上能否正确的预测?我们要用新数据来评估模型的性能。新数据是指模型之前没有见过的数据,而我们有这些新数据的标签。通常的做法是将收集好的带标签数据此类中是150朵花的测量数据分成两部分。
12:08
一部分数据用于构建机器学习模型,叫做训练数据training data或训练及training set。其余的数据用来评估模型的性能,叫做测试数据test data,测试集test set,或者说流出级hold out set。S中的群test split函数可以打乱数据集并进行拆分。这个函数将75%。75%的行数据以及对应标签作为训练集,剩下的25%的数据以及其标签作为测试级。训练级、测试级分配比例是可以是随意的。但使用25%的数据作为测试集是很好的经验法则。S论中的数据通常用大写的F来表示,而标签用小写的Y来表示,这是受到了数学标准公式FX等于Y的启发。其中X是函数的输入,Y是输出。我们用大写的X是因为数据是一个二维数组,也就是矩阵,用小写的Y是因为目标是一个一位数组,也就是一个向量。
13:14
这也是数学中的约定。对数据调用全开split,并对输出结果采用。下面这种命名方法。
14:35
在对数据进行拆分之前,水开split函数,利用尾随基数生成器将数据集打乱。如果我们只是将最后的25%数据作为测试集,那么数据点所有数据点的标签都是二,因为数据点是按标签排序的。可以参考之前的。Irri target。其中的输出。
15:05
测试集中只有三个类别之一。这无法告诉我们模型的泛化能力如何,所以我们要将数据打乱,确保测试集中包含所有类别的数据。为了确保多次运行统一函数能够得到相同的输出,我们利用random data参数指定了随机数生成器的种子,这样函数输出就是固定不变的,所以这行代码的输出始终相同。本书用到随机过程时,都会用这种方法指定random state。寻text split函数的输出为。X X test y train y test,他们都是朗派数组。X包含75%的行数据。X test包含剩下的25%。
17:14
看到1.7.3节要是第一,观察数据。在构建机器学习模型之前,通常最好检查一下数据,看看如果不用机器学习,能不能轻松完成任务,或者需要的信息有没有包含在数据中。此外,检查数据也是发现异常值和特殊值的好方法。举个例子,可能有些用我花的测量单位是英寸而不是厘米。在现实世界中,经常会遇到不一样的数据和意料之外的测量数据。检查数据的最佳方法之一就是将其可视化。一种可视化的方法是绘制三点图。Get pilot数据三点图将一个特征作为X轴,另一个特征作为Y轴,将每个数据点绘制在绘制为图上的一个点。不幸的是,计算机屏幕只有两个维度,所以我们一次只能绘制两个特征。
18:05
也可能是三个,用这种方法难以对多个多余三个特征的数据及作图。解决这个问题的一种方法是绘制散点图矩阵PA pilot,从而从而可以两两查看所有特征。如果特征数不多的话,比如我们这里有四个,这种方法是合理的。但你应该记住。散点图矩阵无法同时显示所有特征之间的关系,所以这种可视化方法可能无法展示数据的某些有趣的内容。
22:40
这幅图是训练集中特征的三点图矩阵。数据点的颜色与鸢尾花的品种相对应。为了绘制这张图,我们首先将朗拍数组转换成了pandas的data frame。Pandas有一个绘制散点图矩阵的函数,叫做matrix。
23:00
矩阵对角线是每个特征的直方图。从图中可以看出,利用花瓣和花萼的测量数据,基本可以将三个类别区分开,这说明机器学习模型很可能可以学会它们。
24:01
来看到1.7.4节,构建第一个模型K近邻算法。现在,我们可以开始构建真实的机器学习模型了。s learn中有许多可用于分类。的算法。这里我们用的是K近邻分类器,这是一个很容易理解的算法,构建此模型只需要保存训练集即可。要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签复制给这个新的数据点。K近邻算法中的K的含义是,我们可以考虑训练器中与新数据点最近的任意K个邻居,比如说距离最近的三个或者五个邻居,而不是只考虑最近的那一个。然后我们可以用这些邻居中数量最多的类别做出预测。第二。第二章。会进一步介绍这个算法的细节。现在我们只考虑一个邻居的情况。S论中,所有的机器学习模型都在各自的类中实现,这些类被称之为S类。K精灵分类器算法是在nes模块中的k nes class file类中实现的。
25:13
我们需要将这个类实例化为一个对象,然后才能使用这个模型。这时我们需要设置模型的参数k nes class file,最重要的参数就是邻居的数目。这里我们设为一。
26:00
KNN对象对算法进行了封装,既包括用于训练数据、构建模型的算法,也包括对新数据点进行预测的算法。它还包括算法从训练数据中提取的信息。对于keys file来说,里面只保存了训练集。想要基于训练集来构建模型,需要调用KNN对象的fit方法,输入参数为X train和y train,二者都是囊派数组,前者包含训练数据,后者包含相应的训练标签。Fit方法返回的是KNN对象本身,并做原处修改,因此我们得到了分类器的字符串表示,从中可以看出构建模型时用到的参数,几乎所有参数都是默认值,但你也会注意到n nes等于一。
27:21
书上,他把默认的值都给你写出来了。可是在我这地方,他做了简化,只给出了我指定的n nes,其余的默认参数他都没有写。点进去看一下它的默认参数。Orm算法等于auto。和书上一样。Live size等于30页,和书上一样。Magic等于。米科夫斯基。Ma等于那个和书上一样。
28:01
N jobs,我这里是,那书上写的是一。P等于二。和书上一样。With等于uniform,也和书上是一样的。在X论中的大多数模型都有很多参数,但多用于速度优化或非常特殊的用途。你无需关注这个字符串表示中的其他参数。也就是你不用关心这些其他参数。只需要。知道。Enables参数。是表示的邻居的数量就行了。通常打印S模型会生成非常长的字符串。但不要被他吓到。我们会在第二章讲到所有重要的参数。在本书的其他章节中,我们不会给出face的输出,因为里面没有包含任何新的信息。看到1.7.5节做出预测。
29:02
现在,我们可以用这个模型对新数据进行预测了,我们可能并不知道这些新数据的正确标签。想象一下,我们在野外发现了一朵鸢尾花,花萼长五厘米,宽2.9厘米,花瓣长一厘米,宽0.2厘米。这朵鸢尾花属于哪个品种?我们可以将这些数据放在一个朗派数组中。再次计算形状。数组形状的样本数一乘以特征数四。
30:19
注意,我们将这朵鸢尾花的测量数据转换为二维朗派数组的一行,这是因为赛克的输入数据必须是一个二维数组。我们调用KN对象的predict方法来进行预测。
31:51
根据我们模型的预测。这朵新的鸢尾花属于类别林,也就是说它属于品种,但我们怎么知道能否相信这个模型呢?我们并不知道这个模型这个样本的实际品种,这也是我们构建模型的重点啊。
32:11
看到1.7.6节评估模型,这里需要用到之前创建的测试集,这些数据没有被用于构建模型,但我们知道测试集中每朵拥有花的实际品种,因此我们可以对测试数据中的每朵拥有花进行预测,并将预测结果与标签已知的品种进行对比。我们可以通过计算精度。Accuracy来衡量模型的优劣,精度就是品种预测正确的话所占的比例。
34:21
这里有两个内容大家可能不知道。第一个是。一个数组等等于另一个数组表示什么意思?以及NP点蜜。NP点命大家应该能猜的出来。密码求平均值的意思。重重点是这个。Predict等等与y test表示什么东西?Y predict和test都是长度相等的,那么它一位数组,在这里y predict等等于y test表示什么呢?表示一个长度和输入的两个囊派数组,在这里是y predict和y test长度相等且取值只有零和一的囊派一位数组,计算其中每个元素过程可以见一下下表。
35:08
大家可以看一下这个表格。对任意的I,若I predict I等等于y test I,则。Predict等等于y test整体的I等于一,否则等于零。大家可以看一下这个表格。二跟零不相等,所以这个新数组的。所以零处,也就是第一个值是零。所以,唯一。也是零,因为一不等于零,所以是二变成了一,因为零等于零。这里千万不要理解成。比较这两个数组是否相等。最后看到这个函数。能拍点me。根据给定的轴计算一组一个数组的平均值。
36:00
返回数组元素的平均值。默认计算其中所有元素的平均值,不管它是多少位的。否则通过指定的轴来进行计算。如果输入数组的元素类型是整数,那么默认情况下就会用64位浮点数,也就是C元的double类型来作为中间变量和返回值。或者返回。数组的元素类型。参数A。一个类似于数组的对象,一个包含要计算其中元素的平均值的数组。如果不是一个数组。比如说是一个列表,它会尝试进行转换。参数,Axis。类型type空类型整数整数元组三个选一个。在这三个类型当中,我选择一个可选参数,沿着哪一条轴或者哪一些轴构成的超平面、超空间来计算对应的平均值。
37:07
如果是一个整数元组。长度大于一,将会通过多条轴构成的超平面,也就是超空间来计算对应的平均值。关于常用的参数取值及描述,可以参考一下这个表格。输入数组A的为数,如果是任意为,设为N。Axis。可以,浪子。它是计算数组中所有元素的平均值,返回一个数或者一个数组。如果keep定参数为true,返回只有一个元素的N为数组,否则返回一个数。输入一维数组axis,取零,同上。输入一维数组axis等于负一,同上。输入一为数组axis等于零构成的单元组,同上,输入数组的维数axis等于一。
38:04
输入数字为数等于1XX等于负一构成的单元组也是同上。一维数组。总共有。四种再加上一种,五种情况。五种可能,取二维数组。Is等于零。把A可以看成一个由列向量组构成的一个矩阵。求这个列向量组中每个列向量的所有分量的平均值,返回一个数组。设输入数组的形状为M行N列,如果keep等于true,返回一个一行N列的二维数组,否则返回一个长度为N的一维数组。如果AX is等于一。输入数组的为数是二,那么需要把A看成一个由行向量组构成的一个矩阵,求这个行向量组中每个行向量的所有分量的平均值返回一个数组。设输入数组的形状为M行一列,如果keep等数返回一个M行一列的二位数组,否则返回一个长度为M1为数组。
39:12
剩下的情况大家自己看一下表。观察这个表格可以看出,当axis是一个元组的时候,其长度必须小于等于数组的维数。长度为一。一维数组。长度为一和二二位数组。若输入一个N为数组,并且axis是一个整数,则axis的可能取值范围是负N到N减一的整数,共2N种可能。第三,若输入一个N为数组,并且AX is是一个整数元组,则AX is中每个元素的取值范围是负到N减一的整数共2N种可能,同时还必须确保满足要求,第一,AX is长度小于等于A。
40:03
第二,设有一个矩阵A2行N列,就像下面这样。Axis中不存在同一列的两个元素。就我就比如说XS首先选了零,我就不能再把负N作为第二个元素了。数组为数和AX取值数量之间的关系。当输入数组是一,为是X,共有二加二加一等于五种,可能这个二表示。单元组两种可能。这个二表示整数两种可能,这个一表示那。当输入数字是二为AX is共有四乘以二加四加四再加一等于17种可能四乘二。表示二元组的。所有取值,所有的可能。四表示单元组所有可能整数四。这里的四表示整数的所有可能,这里的一表示那。
41:02
输入数组的为数再往上,情况就会变得非常复杂,直接给出结论,当输入数组三为AX X axis,共有六乘四乘二加上六乘四,再加上六再加六再加一等于85种可能。三元组的可能。二元组的可能,单元组的可能,整数的可能那。当输入数组是四位xis,共有八乘六乘四乘二加上八乘六乘四再加上八乘六再加上八再加上八再加一等于641种可能。四元组的所有可能,三元组的所有可能,二元组的所有可能,单元组的所有可能。整数的所有可能那。当输入数组是五,为axis,共有。五元组四元组。三元组,二元组,单元组整数呢?总共有六百六千三百四十一种可能,当输入数组是六位。
42:02
他总共有。75985种可能。以此类推,可以得出,当输入数组是N为ass,共有2N乘上二倍的N减一,一直乘,一直乘下去,乘六乘四乘二,再加上。2N乘上二倍的N减一。乘一直乘下去,乘六乘四再一直加下去,加上2A,一直加到2A,再加上2A,再加一。写的简单点,它就是一个连加套连成这一块,就是一个连加套连成这一块。加在后面就行了,等于。I等于一到A西格玛。PIZ等于A到I两倍的G。这个整体加上2N,再加上一。举个例子。若输入一个二维数组1234嘛。
43:02
NIA me。就是求所有数组所有元素加起来的平均值,一加二等于三,三加三等于六,六再加上四等于十,十除以四等于2.5。这里要指定轴了,N平点aax等于零。零表示的意思,我们可以看到这里。因为是二位数组,所以看到这里。看成一个由列向量组构成的一个矩阵。求这个列向量组中。每个列向量的所有分量的平均值。我们可以看到这里。一加三等于四四除以二等于二没有毛病,二加四等于六六除以二等于三也没毛病。一。是看成行向量组。一加二等于三三除以二等于1.5没有任没有任何问题。
44:03
三加四等于七七除以二等于3.5也没有任何问题。你太。数组类型可选参数用来计算用来进行计算的数据类型,如果输入一个整数数组,默认情况下会使用64位浮点数,如果输入一个浮点数组。默认情况下。会和输入数组的元素类型相同。Out。选择存放结果的输出数组,默认为,那如果提供一个数组,其形状必须和预期的输出数组是一致的。如果必要的话,类型将被强制转换。Keep多类型可选参数如果设置为true,会保持数组的为数不变,根据这个变量,结果会直接映射到输入数组中示例。刚才我们也说过,AX等于零表示看成列向量。看成一个列向量组。
45:03
一三这个列项的求平均值是二放在第一行的第一列。二四。这个列向量求平均值是三放在第一行的第二列。放在新数组中第一行的第二列。A等于一。行向量组。一二平均值是1.5,放在新数组的第一行第一列。三四平均值是3.5。Keep them放在新数组中。第二行的第一列。其他情况包括默认情况会产生为数下降。当输入数组A是一个N维数组的时候,U以下两种情况,如果keep等true返回一个N为数组。当keep things等force时。包括默认情况,如果axis是一个整数或者包含一个整数的单元组,返回一个N减一为的数组,否则假设axis是一个M元组。
46:05
返回一个N减MV的数组,特别的,当M等于N或者AX等于long时,返回一个零为数组,也就是一个数。返回值,返回一个数组或者一个数,如果指定了参数al,它就会就地修改alt指针指向的数组对象,并返回这个指针。换句话说,返回的指针和参数alt传进传进去,作为参数al次参数的那个指针指向了同一个数组对象,如果不指定参数alt返回一个新数组。看。在这里返回值C与alt的对应参数B。它们是相同的。也就是说。C和B2个指针。指向了内存当中的同一块区域。
47:07
当然。回到书本上。这种计算平均值的方法。确实。看着。有点不好理解。主要是这个有点不好理解。能不能用简单的方法呢?可以,我们还可以使用KNN对象的score方法来计算测试集的精度。
48:06
这样子多简单,我只需要给他必要的东西就行了。比如说测试数据特征,测试数据标签。和我们训练数据。基本上是一样的。对于这个模型来说,测试题的精度约为0.97,也就是说,对于测试集中的鸢尾花,我们的预测有97%是正确的。根据一些数学假设,对于新的鸢尾化,可以认为我们的模型的预测。结果有97%是正确的。对于我们的植物学爱好者应用程序来说,高精度意味着模型足够可行,可以使用。在后续的章节中,我们将讨论提高性能的方法以及模型调参时的注意事项。最后看到1.8节小结与展望,总结一下本章所学的内容,我们首先简要的介绍了机器学习及其应用,然后讨论了监督学习和无监督学习之间的区别。
49:01
并简要介绍了本书将会用到的工具。随后,我们构思了一项任务,要利用标伪化的物理测量数据来预测其品种。我们在构建模型时用到了由专家标注过的测量数据集,专家已经给出了花的正确品种,因此这是一个监督学习问题,一共有三个品种。斯卡哦尼卡,因为这是一个三分类的问题,因此这是一个三分类的问题。在分类问题中,可能的品种被称为类别克class,每朵花的品种被称为它的标签label。鸢尾华iris数据及包含两个朗派数组,一个包含数据在S克特论中被称之为大写X,一个包含正确的输出或预期的输出,被称之为Y数组。X是特征的二维数组,每个数据点对应一行,每个特征对应一列数组。Y是一个一维数组,里面包含一个类别的标签,对每个样本都是一个零到二之间的整数。
50:02
我们将数据集分成训练集training set和测试集test set,前者用于构建模型,后者用于评估模型对前所未有的新数据的泛化能力。我们选择了K进零分类算法。根据新数据点在训练其中距离最近的邻居来进行推测。该算法在k nes class file类中有实现,里面既包含构建模型的算法,也包含利用模型进行预测的算法。我们将类实例化并设置参数,然后调用fit方法来构建模型,传入训练数据X群和训练输出Y群作为参数。我们用school方法来评估模型,该方法计算的是模型精度。我们将score方法用于测试及数据和测试级标签,得出模型的精度约为97%,也就是说该模型在测试集上97%的预测都是正确的。这让我们有信心将模型应用于新数据。在我们的例子中是新化的测量数据,并相信模型在约98%的约97%的情况下都是正确的。
51:06
下面汇总了整个训练和评估过程所必需的代码。
52:54
这个代码片段包含了应用learn中任何机器学习算法的核心代码。predict和score方法是learn监督学习模型最常用的接口。
53:08
当然,我不希望你。学完了整本书。你就只会这三个方法。询问本章介绍的概念。你可以。将这些模型应用到许多机器学习任务上。下一章我们会更深入的介绍在论中各种类型的监督学习模型,以及这些模型的正确使用方法。
我来说两句