《机器学习实战(基于scikit-learn和TensorFlow)》第二章内容的学习心得 (6)

image

toarray()函数可以转为numpy类型的数组。

LabelBinarizer类可以将上述两个步骤合并,同时通过传送sparse_output=True给LabelBinarizer类的构造函数可以获得稀疏矩阵。

image

 

自定义转换器:

这个步骤的意义在于,使用框架中的方法总不能很好的契合我们的实际需要,我们可以利用框架中的方法,通过自己定义转换器,将框架中的方法最有效的利用到我们的转换器中,这样可以节省很多时间!

先上代码,再分析:

image

我们首先要明白一个概念,然后再来解释为什么要这样做,这个概念是鸭子类型,不懂的小伙伴请点击链接看一下含义。

这个类是组合属性添加类,参数是基本估计器和转换估计器,这里给个链接,需要的朋友们去链接里面看一下这两个东西是啥。首先我们知道数据属性的顺序,因此可以直接预定义需要查找到每个属性的索引序号,room_ix,bedroom_ix等都是其索引序号。然后是__init__()函数,这个是构造函数,用来初始化某个需要的属性标识,默认为Ture(也就是默认是要添加的!)。定义fit()函数,将参数self、X(外部传递的参数)传递给它,同时返回的self是一个具有fit()函数处理过的结果。设置transform()函数,同样将参数传递给它。这个函数就会根据我们在构造函数中传入的参数add_bedrooms_per_room的true或者False来判断是否需要添加这个属性,如果不添加,我们就只会添加rooms_per_household与population_per_household两个属性。np.c_函数是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。至此,类的设置就完毕了。

CombineAttributesAdder()这个就是初始化我们的类,并且给这个类提供参数,如果不填则默认需要添加add_bedrooms_per_room这个属性。最后,使用类中transform()函数,将属性添加进来得到一个新的添加了新属性的矩阵。

 

特征缩放:

如果数据大小存在非常明显的差异,那么有可能会导致机器学习算法性能不佳。同比例的缩放所有属性有两种常用的方法:最大最小缩放和标准化。

最大最小缩放

将值重新缩放使其最终范围归于0到1之间,实现方法是将值减去最小值并除以最大值和最小值的差。我们可以用sklearn中的MinMaxScaler的转换器,当然不想范围是0-1可以通过传递超参数feature_range进行更改。

标准化

首先减去平均值,除以方差,使得结果的分布具有单位方差。可以使用standadScaler()函数。

标准化并不会将结果绑定到一个范围中,有可能不适合某些对输入数据有要求的处理,但是它相比上一个缩放方式,受到异常值的影响更小,比如假设某地区平均收入是1000(这是一个错误数据),缩放就会将所有数据从0-15降到0-0.015,影响较大,但如果是标准化,异常值不会干扰其他正常数据。

具体使用见下面部分!

 

转换流水线:

sklearn有一个很好的思想就是将转换操作工厂流水线化,它有一个非常nice的类,叫做Pipeline类,这个类可以帮我们实现对数据集处理的自动化操作!

Pipeline类的构造函数会通过一系列的名称/估算器的配对来定义步骤序列。先上代码:

image

这一步可能会有很多童鞋报错,有的会说缺少sklearn_features的包,有的会报参数个数的错误,这里副个链接,有问题请点击这个链接。

除了导入了需要的包之外,我们首先看到定义了两个参数,一个是list类型的数值文本属性名称(

image

),一个是类别参数,因为这里只有“ocean_proximity”这个属性是文本属性,因此我们只将这个属性赋值给cat_attribs中。

首先,要先自定义一下这个DataFrameSelector,先给出代码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdzfp.html