手把手教你用Python实现自动特征工程,如何用P

2019-07-11 03:37栏目:奥门新萄京娱乐场
TAG:

原标题:手把手教你用Python实现全自动特征工程

原标题:如何用Python做自动化特征工程

原作 Prateek Joshi

奥门新萄京娱乐场 1

王小新 编译自 Analytics Vidhya

大数量文章摘要出品

别的参加过机器学习竞技的人,都能深远体会特征工程在构建机器学习模型中的主要性,它调控了您在比赛排行的榜单中的地点。

编译:张弛、倪倪、笪洁琼、夏雅薇

特征工程具备强有力的潜能,不过手动操作是个暂缓且艰辛的进程。Prateek Joshi,是一名数据科学家,花了广大岁月研讨二种特性,并从区别角度深入分析其动向。

机械学习的模型磨练特别自动化,但特征工程照旧三个漫漫的手动过程,重视邹静之式的世界知识,直觉和数码管理。而特征选择恰恰是机械学习珍视的事先步骤,即便比不上模型练习那样能发出直接可用的结果。本文小编将利用Python的featuretools库进行自动化特征工程的躬行实践。

昨天,整个特征工程进度可贯彻自动化,他将通过那篇小说实行详尽介绍。

机器学习更是多地从手动设计模型转换为使用H20,TPOT和auto-sklearn等工具来机关优化的沟渠。这么些库以及自由搜索等艺术意在通过搜索数据集的最优模型来简化模型选取和浮动机器学习的局地,大约没有须要人工干预。不过,特征工程差不离全盘是人工,那如实是机械学习管道中更有价值的地方。

奥门新萄京娱乐场 2

特色工程也称之为特征成立,是从现成数量营造新特征以磨炼机器学习模型的进度。那些手续或者比其实利用的模型更要紧,因为机器学习算法只从大家提供的多寡中读书,可是创设与职务相关的性状相对是首要的。

上面会采纳Python特征工程库Featuretools来兑现这一个职分。在商讨在此以前,大家先介绍特色工程的为主构成,再用直观例子来驾驭它们,最后把活动特征工程使用到BigMart Sales数据聚焦验证实际效果。

普通,特征工程是二个经久不衰的手动进程,正视刘頔式的小圈子知识,直觉和数码处理。那些进度只怕非常麻烦,并且最终的性状将遭到人类主观性和岁月的限制。自动化特征工程目的在于通过从数量汇总活动成立多数候选特征来救助数据化学家,并从中能够接纳最好风味用于磨练。

本文目录

在本文中,我们将选拔Python 的featuretools库进行自动化特征工程的示范。我们将动用示例数据集来演示基础知识。

1.特点是什么样

完全代码:

2.特色工程

3.性格工程要求性

特点工程基础

4.活动特征工程

天性工程表示从现存数据中营造额外特征,这一个多少一般布满在多个相关表中。特征工程必要从数量中领取相关音讯并将其归入单个表中,然后能够应用该表来磨炼机器学习模型。

5.Featuretools简介

创设特色的经过卓殊地耗费时间,因为各类特征的创设平日要求有的步骤来达成,极其是利用七个表中的新闻时。大家得以将特色创立的步子分为两类:转变和集纳。让我们看多少个例子来打听那么些概念的实在应用。

6.Featuretools实现

退换职能于单个表(从Python角度来看,表只是三个Pandas 数据框),它经过一个或八个现成的列创造新特点。

7.Featuretools可解释性

比方,借使大家有如下客户表。

1 特征

奥门新萄京娱乐场 3

在机器学习中,特征能够描述为释疑现象时有发生的一组特点。当那些特点转变为局地可衡量的花样时,它们就称作特征。

咱俩得以由此搜索joined列的月份或许获取income列的自然对数来成立特征。那些都是更改,因为它们仅使用来源二个表的新闻。

诸如,在三个学员列表中,包罗每种学员的姓名name、学习小时数study_hours、智力商数IQ和从前考试的总分数marks。以后给您一个新学生,他的音讯独有学习小时数和灵性,他的总分数缺点和失误,你须求来臆想她大概的分数值。

import pandas as pd

在此处,你要采取智力商数值和上学小时数创设预测模型来预计那一个缺点和失误值。由此,智力商数值和上学小时数称作这几个模型的特征。

# Group loans by client id and calculate mean, max, min of loans

奥门新萄京娱乐场 4

stats = loans.groupby('client_id')['loan_amount'].agg(['mean', 'max', 'min'])

2 特征工程

stats.columns = ['mean_loan_amount', 'max_loan_amount', 'min_loan_amount']

特色工程得以总结定义为从数据集的已有特点创设新特点的经过

# Merge with the clients dataframe

上面是多少个样本数量,包涵各类品种的详细音讯,如它们的份量Item_Weight和价格Item_Price。

stats = clients.merge(stats, left_on = 'client_id', right_index=True, how = 'left')

奥门新萄京娱乐场 5

stats.head(10)

以后,大家得以应用重量和价格成立新天性,于是创造了三个名字为Price_per_Weight的风味,它指的是货品的单位品质价格。这些进度叫做特征工程。

奥门新萄京娱乐场 6

奥门新萄京娱乐场 7

一方面,聚同盟用于四个表,并运用一对多的涉及对观测值进行分组,然后计算总括数据。比方,要是大家有另八个分包客户贷款的音讯表格,在那之中各种客户可能有多笔贷款,我们能够估测计算每一个客户的放债的平均值,最大值和最小值等总计数据。

这只是采纳已有特点创立新特色的一个简练示例,而在事实上行使中,当特征数据比较多时,特征工程可能会变得一定复杂和麻烦。

此进度满含经过客户消息对借款表张开分组,总括聚合,然后将结果数据统一到客户数量中。以下是我们什么使用Pandas库在Python中实行此操作。

上面是另二个事例。在精华的Titanic数据汇总,有个特点为游客姓名,下边是其一数额集中的一些名字:

奥门新萄京娱乐场 8

Montvila, Rev. Juozas

Graham, Miss. Margaret Edith

Johnston, Miss. Catherine Helen “Carrie”

Behr, Mr. Karl Howell

Dooley, Mr. Patrick

这个操作自身并不困难,但只要大家有数百个变量布满在几11个表中,那么那么些进度要因此手工业完成是不可行的。理想图景下,大家须要一种能够跨多个表自动实践转变和集纳的缓和方案,并将结果数据统一到二个表中。固然Pandas库是二个很好的财富,但由此大家手工业完毕的多寡操作是轻松的。

实际,这么些姓名能够解释为其余有含义的特征。举例,大家把一般名称提取并分到单个项目。上边是旅客姓名中逐个称号的应和频率。

手动特征工程的更加多音信:

奥门新萄京娱乐场 9

骨子里,有些称号,如’Dona’, ‘Lady’, ‘Countess’, ‘Capt’, ‘Col’, ‘Don’, ‘Dr’, ‘Major’, ‘Rev’, ‘Sir’和’Jonkheer ‘,现身频率异常低,能够划为同一类,作为rare_title类。别的,称号’Mlle’和’Ms’能够放在’Miss’中,’Mme’能够用’Mrs’替换。

Featuretools

奥门新萄京娱乐场 10

幸运的是,featuretools正是我们正在探寻的消除方案。那几个开源Python库将机关从一组相关表中创制大多特色。Featuretools基于一种名称叫“深度特征合成”的主意,那个名字听上去比实际的用途更令人印象深远

新的称号特征独有5个独一值,如下所示:

纵深特征合成完结了多种调换和聚众操作(在featuretools的词汇中称之为特征基元),通过遍及在不胜枚举表中的数据来制造特征。像机器学习中的大好多观念同样,它是创造在简单概念基础上的复合型方法。通过贰回学习叁个结构块的身体力行,大家就能轻松通晓这种强硬的方法。

奥门新萄京娱乐场 11

第一,大家来探视大家的演示数据。 大家早已观看了上边的部分数据集,完整的表会集如下:

为此,那即是大家赖以特征工程来领取有用音讯的历程,以至能从早先时期看起来毫无意义的游客名称中提取特征。

客户:即有关信用贷款联盟中客户的为主音讯。每种客户在此数据框中独有一行。

3 特征工程要求性

奥门新萄京娱乐场 12

四人作品展望模型的品质十分大程度上取决于练习该模型的数据集的表征品质。

放款:即客户贷款。每项贷款在此数额框中唯有和煦独立一行的记录,但客户大概有多项贷款。

假诺能创设新脾性来帮衬向模型提供有关指标变量的更加的多新闻,那么它的习性将会提高。由此,当数码汇总未有丰硕有用特色时,大家无法不借助特征工程。

奥门新萄京娱乐场 13

在Kaggle比赛“自行车分享需要预测(Bike Sharing 德姆and Prediction)”中,参预者被供给遵照历史方式(包蕴运用意况,及相应的天气、时间和别的数据)来预测Washington地区的租费要求。

付款:即支付贷款。 每笔费用独有一行记录,但每笔贷款皆有多笔支付记录。

在一篇胜球者分享中也关系,智能性子工程促进增高模型品质。他创办的局地特点如下:

奥门新萄京娱乐场 14

1. Hour Bins:利用决策树分箱小时等第特征来成立新性格;

一经我们有机器学习目的,比方预测客户是否将还给以往放款,大家愿意将关于客户的享有音信整合到一个表中。那几个表是相关的(通过client_id和loan_id变量),近些日子大家得以手动完毕一文山会海转变和聚众进度。然则,不久过后大家就足以采取featuretools来自动化该进程。

2. Hour Bins:类似地,温度变量的分箱特征;

实业和实业集

3. Year Bins:为持续2年的数目创制了8个季度分箱;

featuretools的前多个概念是实业和实体集。实体只是叁个表(即使用Pandas库的概念来精通,实体是一个DataFrame(数据框))。

4. Day Type:当天项目,分为专门的工作日、星期天和休假。

EntitySet(实体集)是表的联谊以及它们中间的关系。能够将实体集视为另多个Python数据结构,该协会有所温馨的不二秘籍和性质。)

分享全文见:

大家能够应用以下命令在featuretools中创建二个空实体集:

始建这样特征并不是一件轻松的事,它须求多量的脑力龙卷风和宽广的数目探究。可是,并不是全体人都专长特征工程,因为无法通过阅读书籍或观察教程学到这个东西。那正是特色工程也被誉为艺术的原由。假若你长于它,那么您在比赛前占为己有十分的大优势。

import featuretools as ft

4 自动特征工程

# Create new entityset

奥门新萄京娱乐场 15

es = ft.EntitySet(id = 'clients')

深入分析上边的两张图纸,左图体现了20世纪初中一年级批人在组装汽车,右图体现了前些天机器人在做着同一专门的学问。自动化任何流程都有望使其更为飞快且节约花费。一样地,特征工程得以同有的时候候一度在机器学习中实现自动化。

于今大家抬高实体。每种实体都必须有贰个索引,该索引是三个分包全体唯一成分的列。也等于说,索引中的各个值只能出现在表中二次。

构建机器学习模型平时是一个不便且干燥的历程。它关系五个步骤,由此一旦大家能够自行实施一定比重的风味工程职务,那么数量物管理学家或技术员能够小心于模型的别的方面。

clients数据框中的索引是client_id,因为种种客户在此数据框中独有一行。 我们选择以下语法将贰个共处索引的实体增多到实体聚焦:

大家已经精晓活动特征工程足够有用,那您或许会问,该怎么把它应用到模型中?别担心,已经有贰个很好的Python工具库解决了那一个标题,那便是Featuretools。

# Create an entity from the client dataframe

5 Featuretools简介

# This dataframe already has an index and a time index

奥门新萄京娱乐场 16

es = es.entity_from_dataframe(entity_id = 'clients', dataframe = clients, index = 'client_id', time_index = 'joined')

Featuretools是三个用来施行活动特征工程的开源库,目的在于比不慢带动特色变化进度,进而有更加的多日子专注于机器学习模型创设的其余方面。

loans数据框还会有着独一索引loan_id,并且将其增多到实体集的语法与clients一样。但是,对于payments数据框,未有独一索引。当大家将此实体加多到实体集时,大家供给传入参数make_index

奥门新萄京娱乐场 ,True并内定索引的称号。别的,就算featuretools会自动测算实体中每列的数据类型,但我们得以由此将列类型的字典传递给参数variable_types来掩饰它。

# Create an entity from the payments dataframe

# This does not yet have a unique index

es = es.entity_from_dataframe(entity_id = 'payments',

dataframe = payments,

variable_types = {'missed': ft.variable_types.Categorical},

make_index = True,

index = 'payment_id',

time_index = 'payment_date')

对于这么些数据框,纵然missed 的门类是三个卡尺头,但也不是一个数字变量,因为它只可以取2个离散值,所以大家告诉featuretools将缺点和失误数据作为是二个分类变量。将数据框增多到实体集后,大家检查它们中的任何二个:

奥门新萄京娱乐场 17

采取我们钦命的改动模型能够正确推测列类型。接下来,咱们须要钦赐实体集中的表是什么相关的。

数据表之间的关联

思虑两张数据表之间关系的特等办法是用父对子的类比 。父与子是一对多的涉嫌:每种老人得以有四个男女。在数据表的局面中,父表的每一行代表一人差异的爹娘,但子表中的多行代表的多个孩子能够对应到父表中的同一个人老人家。

譬喻说,在我们的数码集中,clients客户数据框是loan 贷款数据框的父级,因为每一种客户在客户表中独有一行,但放款也可以有多行。

一致,贷款loan数据是付出payments数据的父级,因为每笔贷款都有多笔付款。父级数据表通过分享变量与子级数据表关联。当大家试行聚合操作时,大家透过父变量对子表实行分组,并盘算每种父项的子项之间的总结数据。

作者们只须要指明将两张数据表关联的十三分变量,就能够用featuretools来树立表格见的涉及 。

客户clients数据表和借款loans数据表通过变量client_id

相互关系,而贷款loans数据表和开支payments数据表则通过变量loan_id彼此关系。以下是创造关系并将其增添到entiytset的语法:

# Relationship between clients and previous loans

r_client_previous = ft.Relationship(es['clients']['client_id'],

es['loans']['client_id'])

# Add the relationship to the entity set

es = es.add_relationship(r_client_previous)

# Relationship between previous loans and previous payments

r_payments = ft.Relationship(es['loans']['loan_id'],

es['payments']['loan_id'])

# Add the relationship to the entity set

es = es.add_relationship(r_payments)

es

奥门新萄京娱乐场 18

今昔,在entityset中富含了三张数据表,以及三者间的关系。在增加entities并确立关系后,大家的entityset固然完结了,能够初始创设特征量了。

特色基元

在我们一起深刻张开特色合成从前,大家须求明白特征基元。大家已经精通它们是怎么了,但大家刚刚用差别的名字来称呼它们!那一个只是大家用来产生新功用的基本操作:

聚合:基于父表与子表(一对多)关系完结的操作,按父表分组,并妄图子表的总结数据。一个事例是通过client_id对借款loan表进行分组,并找到每种客户的最大贷款额。

转换:在单个表上对一列或多列施行的操作。叁个例证是在贰个表中取三个列之间的差异或取一列的相对值。

在featuretools中央银行使那么些基元本身或积聚三个基元,来创设新作用。下边是featuretools中一些特色基元的列表(我们也得以定义自定义基元)

奥门新萄京娱乐场 19

这个原语能够独立采纳,也足以结合使用来创立特征量。要运用钦命的基元制作特征,大家运用ft.dfs函数(代表深度特征合成)。我们传入entityset,target_entity,那是大家要增加特征的表,选择的trans_primitives(转换)和agg_primitives(聚合):

# Create new features using specified primitives

features, feature_names = ft.dfs(entityset = es, target_entity = 'clients',

agg_primitives = ['mean', 'max', 'percent_true', 'last'],

trans_primitives = ['years', 'month', 'subtract', 'divide'])

结果是每种客户端的新脾性数据框(因为我们使客户端成为target_entity)。比方,大家有各个客户加入的月份,这是由转变特征基元生成的:

奥门新萄京娱乐场 20

大家还应该有大多聚众基元,举个例子每一个客户的平分付款金额:

奥门新萄京娱乐场 21

固然大家只钦赐了有的特征基元,但featuretools通过结合和积聚那个基元创制了无尽新特色。

奥门新萄京娱乐场 22

纵深特征合成

大家后天已经办好计划来精通深度特征合成(dfs)。实际上,我们早已在前面的函数调用中举行了dfs!深度特征仅仅是堆成堆多少个基元的表征,而dfs是营造这个特色的长河名称。深度特征的深浅是创立特征所需的基元的数量。

例如,MEAN(payments.payment_amount)列是深浅为1的深层特征,因为它是行使单个聚合创建的。深度为2的性状是LAST(贷款(MEAN(payments.payment_amount))那是经过聚积多个聚众来兑现的:最终叁个(近年来的)在MEAN之上。这象征每一种客户近年来贷款的平均支付额。

奥门新萄京娱乐场 23

咱俩得以将成效聚积到我们想要的其余深度,但在施行中,笔者未曾用过超越2的吃水。在此之后,生成的表征就很难解释,但笔者鼓励其余风野趣的人品尝“更深刻” 。

咱俩无需手动钦定特征基元,而是能够让featuretools自动为大家选用特征。大家得以应用一样的ft.dfs函数调用,但不传播任何特征基元:

# Perform deep feature synthesis without specifying primitives

features, feature_names = ft.dfs(entityset=es, target_entity='clients',

max_depth = 2)

features.head()

奥门新萄京娱乐场 24

Featuretools为大家创设了好些个新特征。固然此进程会自行成立新特点,但仍须要多少化学家来弄领会哪些管理全数那个特点。举个例子,即使大家的靶子是展望客户是或不是会归还借款,大家得以搜寻与内定结果最相关的风味。另外,固然大家有世界知识,我们得以选用它来摘取特定的性状基元或种子深度特征合成候选特征。

下一步

自动化特征工程即使缓慢解决了二个难点,但又导致了另叁个难点:特征太多。即使在拟合模型此前很难说哪些特点很要紧,但很也许并不是全数那一个特色都与我们想要磨炼模型的任务相关。别的,特征太多只怕会招致模型品质不好,因为有个别不是很有用的性状会淹没那多少个更主要的特征。

特色过多的难题被喻为维度诅咒 。随着特征数据的增添(数据的维度扩充),模型更加的难以学习特征和对象之内的炫丽。实际上,模型实践所需的数据量随着特征数据呈指数级增进。

维度诅咒与特点缩减(也堪当特征选择)相对应:删除不相干特征的历程。特征选取能够使用种种方式:主成分分析(PCA),SelectKBest,使用模型中的特征首要性,或行使深度神经互联网进行自动编码。不过,缩小职能是另一篇小说的另叁个宗旨。近期,我们清楚大家能够运用featuretools以细小的极力从广大表创设好些个功力!

结论

与机械和工具学习中的大多主旨同样,使用featuretools的自动化特征工程是多个依照简单主见的复杂性概念。使用实体集,实体和事关的定义,featuretools可以施行深度特征合成以新建特征。

聚拢正是将深度特征合成依次将特色基元聚积,利用了跨表之间的一对多涉及,而更动是选择于单个表中的八个或多少个列的函数,从多个表创设新特征。

在后头的小说中,作者将显得什么使用这种技巧消除具体中的难题,也正是眼下正在Kaggle上主持的Home Credit Default Risk竞技。请继续关心该帖子,同一时间阅读此介绍以早先加入竞技!作者期望你未来得以行使自动化特征工程作为数据准确管道的辅助工具。模型的习性是由我们提供的数量所调控的,而自动化功效工程得以扶助升高创设新特点的作用。

至于featuretools的更加多消息,包罗高级用法,请查看在线文书档案:

要打听功效工具在施行中的应用办法,请阅读开源库背后的集团Feature Labs的干活:

有关报导:

)

网编:

在使用Featuretools在此之前,大家要精通那些库的八个根本组件:

  • 实体Entities
  • 深度特征合成Deep Feature Synthesis
  • 特点基元Feature primitives

实体可作为是Pandas中数据帧的风味,七个实体的成团称为实体集Entityset。

深度特征合成(DFS)与深度学习毫无干系。作为一种天性工程措施,它其实是Featuretools库的主导。它援救从单个数据帧和八个数据帧中创立新特征。

DFS通过把特色基元应用于实体集中的实业关系来创设特征。这个基元平时被用来手动生成特征,举例,基元“mean”可在集中等第找到变量均值。

千看比不上一练,领会Featuretools的特级方法是多在数额集中尝试。因而,大家会在下有个别应用BigMart Sales数据集来巩固概念。

6 Featuretools实现

BigMart Sales数据集面对的挑战是确立多个预测模型来估摸有个别公司中每个产品的出售额。这将有利于BigMart决策者寻觅每一种产品或公司的表征,那对加强全部发售额起着关键效率。在加以数据汇总,满含11个市肆中的1559种产品。

下表给出了数额中提供的风味:

奥门新萄京娱乐场 25

数码集下载地址:

6.1 安装

Featuretools适用于Python 2.7、3.5和3.6,可利用pip命令神速安装Featuretools。

pip install featurePython

6.2 加载外部库和数量 importfeaturetools asft

importnumpy asnp

importpandas aspd

train = pd.read_csv( "Train_UWu5bXk.csv")

test = pd.read_csv( "Test_u94Q5KV.csv")

6.3 计划数据

第一,我们把目的Item_Outlet_Sales存储到sales变量,把test_Item_Identifier和test_Outlet_Identifier存储到id变量。

# saving identifiers

test_Item_Identifier = test[ 'Item_Identifier'] test_Outlet_Identifier = test[ 'Outlet_Identifier']

sales = train[ 'Item_Outlet_Sales']

train.drop([ 'Item_Outlet_Sales'], axis= 1, inplace= True)

接下来,组合磨炼集和测验集,那样省去四遍实行同样步骤的难为

combi = train.append(test, ignore_index= True)

紧接着,检查数据聚焦的缺点和失误值。

combi.isnull().sum()

奥门新萄京娱乐场 26

变量Item_Weight和Outlet_size中有一定多缺失值,用上边方法火速管理:

# imputing missing data

combi[ 'Item_Weight'].fillna(combi[ 'Item_Weight'].mean(),

inplace = True)

combi[ 'Outlet_Size'].fillna( "missing", inplace = True)

6.4 数据预管理

此处不会涉嫌过多预管理操作,因为本文的重大目标是介绍Featuretools。

版权声明:本文由奥门新萄京娱乐场发布于奥门新萄京娱乐场,转载请注明出处:手把手教你用Python实现自动特征工程,如何用P