如何使用机器学习神器sklearn做特征工程?

2022-03-23 03:27:34

  那特点工程结果是什么呢?顾名思义,其实质是一项工程行动,方针是最大限定地从原始数据中提取特点以供算法和模子应用。

  特点收拾是特点工程的焦点个别,sklearn供给了较为完善的特点收拾伎俩,包罗数据预收拾,特点选取,降维等。初次接触到sklearn,大凡会被其充足且便利的算法模子库吸引,不过这里先容的特点收拾库也极度健旺!

  本文中应用sklearn中的IRIS(鸢尾花)数据集[1] 来对特点收拾功效举办注释。IRIS数据集由Fisher正在1936年整顿,蕴涵4个特点(Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)、Petal.Width(花瓣宽度)),特点值都为正浮点数,单元为厘米。方向值为鸢尾花的分类(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。导入IRIS数据集的代码如下:

  关于某些定量特点,其蕴涵的有用音信为区间划分,比如进修功效,假若只闭注“合格”或不“合格”,那么须要将定量的考分,转换成“1”和“0”透露合格和未合格。二值化可能处分这一题目。

  某些机械进修算法和模子只可接纳定量特点的输入,那么须要将定性特点转换为定量特点。最浅易的式样是为每一种定性值指定一个定量值,不过这种式样过于灵便,扩张了调参的使命。大凡应用哑编码的式样将定性特点转换为定量特点[2] :假设有N种定性值,则将这一个特点扩展为N种特点,当原始特点值为第i种定性值时,第i个扩展特点赋值为1,其他扩展特点赋值为0。哑编码的式样比拟直接指定的式样,不必扩张调参的使命,关于线性模子来说,应用哑编码后的特点可抵达非线性的成绩。

  分别的机械进修算法和模子对数据中音信的使用是分别的,之条件到正在线性模子中,应用对定性特点哑编码可能抵达非线性的成绩。犹如地,对定量变量众项式化,或者举办其他的转换,都能抵达非线性的成绩。

  咱们应用sklearn中的preproccessing库来举办数据预收拾,可能笼盖以上题目的处分计划。

  无量纲化使分别规格的数据转换到统一规格。常睹的无量纲化伎俩有圭表化和区间缩放法。圭表化的条件是特点值遵从正态漫衍,圭表化后,其转换成圭表正态漫衍。区间缩放法使用了范围值音信,将特点的取值区间缩放到某个特色的限度,比如[0, 1]等。

  浅易来说,圭表化是依据特点矩阵的列收拾数据,其通过求z-score的伎俩,将样本的特点值转换到统一量纲下。归一化是依据特点矩阵的行收拾数据,其方针正在于样本向量正在点乘运算或其他核函数打算好像性时,具有联合的圭表,也即是说都转化为“单元向量”。法则为l2的归一化公式如下:

  定量特点二值化的焦点正在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,公式外达如下:

  因为IRIS数据集的特点皆为定量特点,故应用其方向值举办哑编码(本质上是不须要的)。应用preproccessing库的OneHotEncoder类对数据举办哑编码的代码如下:

  因为IRIS数据集没有缺失值,故对数据集新增一个样本,4个特点均赋值为NaN,透露数据缺失。应用preproccessing库的Imputer类对数据举办缺失值打算的代码如下:

  常睹的数据变换有基于众项式的、基于指数函数的、基于对数函数的。4个特点,度为2的众项式转换公式如下:

  基于单变元函数的数据变换可能应用一个联合的式样落成,应用preproccessing库的FunctionTransformer对数据举办对数函数转换的代码如下:

  当数据预收拾落成后,咱们须要选取存心义的特点输入机械进修的算法和模子举办熬炼。大凡来说,从两个方面思虑来选取特点:

  假使一个特点不发散,比如方差迫近于0,也即是说样本正在这个特点上根本上没有分歧,这个特点关于样本的辨别并没有什么用。

  这点较量显睹,与方向闭系性高的特点,应该优选选取。除方差法外,本文先容的其他伎俩均从闭系性思虑。

  Filter:过滤法,遵照发散性或者闭系性对各个特点举办评分,设定阈值或者待选取阈值的个数,选取特点。

  Wrapper:包装法,按照方向函数(大凡是预测成绩评分),每次选取若干特点,或者清除若干特点。

  Embedded:嵌入法,先应用某些机械进修的算法和模子举办熬炼,获得各个特点的权值系数,按照系数从大到小选取特点。犹如于Filter伎俩,不过是通过熬炼来确定特点的优劣。

  应用方差选取法,先要打算各个特点的方差,然后按照阈值,选取方差大于阈值的特点。应用feature_selection库的VarianceThreshold类来选取特点的代码如下:

  应用闭系系数法,先要打算各个特点对方向值的闭系系数以及闭系系数的P值。用feature_selection库的SelectKBest类联络闭系系数来选取特点的代码如下:

  5#第一个参数为打算评估特点是否好的函数,该函数输入特点矩阵和方向向量,输出二元组(评分,P值)的数组,数组第i项为第i个特点的评分和P值。正在此界说为打算闭系系数

  经典的卡方检查是检查定性自变量对定性因变量的闭系性。假设自变量有N种取值,因变量有M种取值,思虑自变量等于i且因变量等于j的样本频数的窥探值与希冀的差异,构修统计量:

  这个统计量的寄义简而言之即是自变量对因变量的闭系性。用feature_selection库的SelectKBest类联络卡方检查来选取特点的代码如下:

  为了收拾定量数据,最大音信系数法被提出,应用feature_selection库的SelectKBest类联络最大音信系数法来选取特点的代码如下:

  4#因为MINE的安排不是函数式的,界说mic伎俩将其为函数式的,返回一个二元组,二元组的第2项设备成固定的P值0.5

  递归撤消特点法应用一个基模子来举办众轮熬炼,每轮熬炼后,撤消若干权值系数的特点,再基于新的特搜集举办下一轮熬炼。应用feature_selection库的RFE类来选取特点的代码如下:

  应用带处罚项的基模子,除了筛选出特点外,同时也举办了降维。应用feature_selection库的SelectFromModel类联络带L1处罚项的逻辑回归模子,来选取特点的代码如下:

  L1处罚项降维的道理正在于保存众个对方向值具有平等闭系性的特点中的一个[3] ,因此没选到的特点不代外不紧急。故,可联络L2处罚项来优化。完全品行为:若一个特点正在L1中的权值为1,选取正在L2中权值区别不大且正在L1中权值为0的特点组成同类聚积,将这一聚积中的特点中分L1中的权值,故须要构修一个新的逻辑回归模子:

  树模子中GBDT也可用来行为基模子举办特点选取,应用feature_selection库的SelectFromModel类联络GBDT模子,来选取特点的代码如下:

  当特点选取落成后,可能直接熬炼模子了,不过可以因为特点矩阵过大,导致打算量大,熬炼韶华长的题目,以是低落特点矩阵维度也是必不成少的。常睹的降维伎俩除了以上提到的基于L1处罚项的模子以外,其它再有主因素领悟法(PCA)和线性判别领悟(LDA),线性判别领悟自己也是一个分类模子。PCA和LDA有许众的好像点,其实质是要将原始的样本映照到维度更低的样本空间中,不过PCA和LDA的映照方向不雷同:PCA是为了让映照后的样本具有最大的发散性;而LDA是为了让映照后的样本有最好的分类机能[4] 。因此说PCA是一种无监视的降维伎俩,而LDA是一种有监视的降维伎俩。

  再让咱们回归一下本文劈头的特点工程的头脑导图,咱们可能应用sklearn落成简直通盘特点收拾的使命,并且不管是数据预收拾,仍然特点选取,抑或降维,它们都是通过某个类的伎俩fit_transform落成的,fit_transform要不但带一个参数:特点矩阵,要不带两个参数:特点矩阵加方向向量。这些莫非都是偶合吗?仍然蓄志安排成云云?伎俩fit_transform中有fit这一单词,它和熬炼模子的fit伎俩相闭联吗?接下来,我将正在《应用sklearn温柔地举办数据发掘》[5]中论述此中的秘密!

  PCA是为了让映照后的样本具有最大的发散性;而LDA是为了让映照后的样本有最好的分类机能: