机器学习实战 | 自动化特征工程工具Featuretools应用

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 本篇讲解使用自动化特征工程工具Featuretools,对数据进行自动化特征工程的方法,并借助于BigMart Sales数据集来演示自动化特征工程的相关应用。

ShowMeAI研究中心

作者:韩信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/41
本文地址http://www.showmeai.tech/article-detail/209
声明:版权所有,转载请联系平台与作者并注明出处

收藏ShowMeAI查看更多精彩内容


引言

ShowMeAI的文章 机器学习特征工程最全解读 里,我们给大家详细介绍了特征工程的操作,但我们实际上有很多工具可以辅助我们更快捷地完成特征工程,在本篇内容中,ShowMeAI给大家介绍Featuretools这个Python自动化特征工程的工具库。我们会借助于BigMart Sales数据集来演示自动化特征工程的相关应用。

Featuretools; 自动化特征工程工具; 机器学习建模流程; 9-1

1.机器学习与特征

在机器学习的背景下,特征是用来解释现象发生的单个特性或一组特性。当这些特性转换为某种可度量的形式时,它们被称为特征。

Featuretools; 自动化特征工程工具; 机器学习与特征; 9-2

2.特征工程介绍

特征工程(feature engineering):利用领域知识和现有数据,创造出新的特征,用于机器学习算法;可以手动(manual)或自动(automated)。

Featuretools; 自动化特征工程工具; 特征工程介绍; 9-3

数据与特征工程决定了模型的上限,改进算法只不过是逼近这个上限而已。

3.特征工程意义

Featuretools; 自动化特征工程工具; 特征工程的意义; 9-4

Featuretools; 自动化特征工程工具; 特征工程的意义; 9-5

4.自动化特征工程

Featuretools; 自动化特征工程工具; 自动化特征工程; 9-6

上左图显示了20世纪初一群人正在组装汽车,上右图显示了当今一群机器人在做同样的工作。自动化任何流程都可以使其变得更加高效和经济。同样,特征工程也是如此。而且,在机器学习中,常用特征的特征工程已经实现自动化。

我们有一个很好的工具可以用来帮忙完成自动化特征工程的过程,这个 Python 工具库的名称叫 Featuretools。

5.Featuretools简介

Featuretools 是一个 Python 自动化特征工程的工具库。它可以帮助大家快速构建丰富的数据特征,而把更多的时间聚焦于构建机器学习模型的其他方面。
要学会使用 Featuretools,我们要先了解它的三个主要组件:

Featuretools; 自动化特征工程工具; Featuretools简介; 9-7

实体(Entities)

  • 一个Entity可以视作是一个 Pandas 的数据框的表示,多个实体的集合称为 Entityset。


关系(relationship)

  • 关系就是表之间的关联键的定义。


特征算子(Feature primitives)

  • DFS通过将特征算子应用于Entityset的实体关系来构造新特征。算子就是一些特征工程的函数,例如 groupby、mean、max、min 等等。


Featuretools 实际上就是提供了一个框架让我们可以方便快速的通过简约的代码来实现单表的转换操作和多表的跨表连接操作,下面我们借助于 BigMart Sales 数据集实践问题中来具体讲解 Featuretools 工具。

6.Featuretools实践

这里的案例场景 BigMart Sales 要解决的是电商领域的销量预估问题,我们希望构建模型来估算特定门店中每种商品的销售额,这将有助于BigMart 的决策者找出每一个产品或门店的重要属性,这对提高整体销售起着关键性作用。请注意,在给定的数据集中,有跨 10 个门店的 1559 种商品。

数据集如下:
链接: https://pan.baidu.com/s/1qjJZjY56MnHBvmUQEMjq9g
提取码:show

下表给出了数据字段说明:

| 变量 | 描述 |
| :--| :--|
| Item_Identifier | 商品编号 |
| Item_Weight | 商品重量 |
| Item_Fat_Content | 是否是低脂商品 |
| Item_Visibility | 该商品展示区域占门店中所有商品展示区域的比例 |
| Item_Type | 商品所属分类 |
| Item_MRP | 商品最高售价 |
| Outlet_Identifier | 门店编号 |
| Outlet_Establishment_Year | 门店建立年份 |
| Outlet_Size | 门店占地面积 |
| Outlet_Location_Type | 门店所在城市类型 |
| Outlet_Type | 门店类型(杂货店或超市) |
| Item_Outlet_Sales | 门店商品销售额 (即需要预测的输出变量) |

6.1 Featuretools安装

大家可以在命令行使用 pip 轻松安装 Featuretools。

pip install featuretools

6.2 导入依赖工具库及数据

import featuretools as ft
import numpy as np
import pandas as pd

train = pd.read_csv("Train.csv")
test = pd.read_csv("test.csv")

6.3 数据准备

我们先从数据中提取出目标字段和特征字段,如下:

# 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()

Featuretools; 自动化特征工程工具; Featuretools实践; 数据准备; 9-8

我们发现字段Item_WeightOutlet_size中有非常多的缺失值,先做一个快速处理:

# 缺失值处理
combi['Item_Weight'].fillna(combi['Item_Weight'].mean(), inplace = True)
combi['Outlet_Size'].fillna("missing", inplace = True)

6.4 数据预处理

我们只做一点简单的数据预处理,这样后续可以更充分直观地展示Featuretools的功能。

combi['Item_Fat_Content'].value_counts()

Featuretools; 自动化特征工程工具; Featuretools实践; 数据预处理; 9-9

我们发现Item_Fat_Content只包含两个类别:「低脂肪」和「常规」(虽然在字段取值上有多种,但其只是格式差异),这里我们对其进行二值化变换。

# 二值编码
fat_content_dict = {'Low Fat':0, 'Regular':1, 'LF':0, 'reg':1, 'low fat':0}

combi['Item_Fat_Content'] = combi['Item_Fat_Content'].replace(fat_content_dict, regex=True)

6.5 Featuretools特征工程

下面我们使用 Featuretools 来实现自动化特征工程。首先我们将「商品」和「门店」信息组合,构建一个数据唯一 ID。

combi['id'] = combi['Item_Identifier'] + combi['Outlet_Identifier']
combi.drop(['Item_Identifier'], axis=1, inplace=True)

因为不再需要特征 Item_Identifier,我们把它删除了。我们保留了特征 Outlet_Identifier,稍后会使用到它。

接下来我们创建一个特征EntitySet,它是一种包含多个数据框及其之间关系的结构。

# 构建实体集合es
es = ft.EntitySet(id = 'sales')

# 添加dataframe数据 
es.add_dataframe(dataframe_name = 'bigmart', dataframe = combi, index = 'id')


下面我们将使用深度特征综合(Deep Feature Synthesis)自动创建新特征。

trans_primitives=['add_numeric', 'subtract_numeric', 'multiply_numeric', 'divide_numeric'] # 2列相加减乘除来生成新特征
agg_primitives=['sum', 'median','mean']

feature_matrix, feature_names = ft.dfs(entityset=es, 
                                       target_dataframe_name = 'bigmart', 
                                       max_depth = 1, 
                                       verbose = 1,
                                       agg_primitives=agg_primitives,
                                       trans_primitives=trans_primitives,
                                       n_jobs = 8)

Featuretools; 自动化特征工程工具; Featuretools实践; 特征工程; 9-10

上述代码中:

  • max_depth 控制由叠加特征基元方式生成的特征的复杂性。
  • agg_primitives 是定义了一些统计聚合方式。
  • trans_primitives 定义了变换计算算子。
  • n_jobs 设定了多核并行特征计算的核数。

通过上述操作,Featuretools 就自行构造了许多新特征。


让我们来看看这些新构造的特征:

feature_matrix.columns

Featuretools; 自动化特征工程工具; Featuretools实践; 特征工程; 9-11

你会发现 DFS 快速构建出了非常多新特征。比我们手动操作构建特征要高效得多!

我们查看一下feature_matrix的前几行。

feature_matrix.head()

Featuretools; 自动化特征工程工具; Featuretools实践; 特征工程; 9-12

我们对这个 Dataframe 做一点小调整,我们根据 combi 数据框中的 id 变量对其进行排序。

feature_matrix = feature_matrix.reindex(index=combi['id'])
feature_matrix = feature_matrix.reset_index()

6.6 特征解释

我们还可以通过以下代码来对其构建出来的特征做解释,比如我们要解释第 20 个特征是如何得到的。

ft.graph_feature(feature_names[20])

Featuretools; 自动化特征工程工具; Featuretools实践; 特征解释; 9-13

6.7 构建模型

下面我们就可以用构建出来的特征来建模啦,预测 Item_Outlet_Sales。由于最终的数据(feature_matrix)里具有许多类别特征,我们这里使用LightGBM模型。它可以直接使用类别特征,并且本质上是可扩展的。

你可以阅读ShowMeAI的文章 图解机器学习 | LightGBM模型详解LightGBM建模应用详解 了解LightGBM模型的原理和应用方法。

import lightgbm as lgb
import pandas as pd


CatBoost 要求所有类别变量都采用字符串格式。因此,我们首先将数据中的类别变量转换为字符串:

categorical_features = np.where(feature_matrix.dtypes == 'object')[0]

for i in categorical_features:
    feature_matrix.iloc[:,i] = feature_matrix.iloc[:,i].astype('str')


然后重新把 feature_matrix 拆回训练集和测试集。

feature_matrix.drop(['id'], axis=1, inplace=True)
train = feature_matrix[:8523]
test = feature_matrix[8523:]
# removing uneccesary variables
train.drop(['Outlet_Identifier'], axis=1, inplace=True)
test.drop(['Outlet_Identifier'], axis=1, inplace=True)


将训练集拆成训练和验证两部分,以便在本地测试算法的性能。

from sklearn.model_selection import train_test_split

# splitting train data into training and validation set
xtrain, xvalid, ytrain, yvalid = train_test_split(train, sales, test_size=0.25, random_state=11)


最后,训练模型。采用 RMSE(Root Mean Squared Error,均方根误差) 作为衡量指标。

# 初始化LGBMRegressor回归器
model_lgb = lgb.LGBMRegressor(iterations=5000, learning_rate=0.05, depth=6, eval_metric='RMSE', random_seed=7)
# 训练模型
model_lgb.fit(xtrain, ytrain, eval_set=[(xvalid, yvalid)], early_stopping_rounds=1000)

Featuretools; 自动化特征工程工具; Featuretools实践; 9-14

from sklearn.metrics import mean_squared_error
np.sqrt(mean_squared_error(model_lgb.predict(xvalid), yvalid))

验证数据集的 RMSE 得分是 equation?tex=1094.7984

在没有任何特征工程的情况下,验证集的得分为 equation?tex=1163 。 因此,Featuretools 构造的特征不仅仅是随机特征,而且还非常有价值的。最重要的是,它使特征工程节省了大量时间。

参考资料

机器学习【算法】系列教程

机器学习【实战】系列教程

ShowMeAI 系列教程推荐

ShowMeAI用知识加速每一次技术成长

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
17小时前
|
机器学习/深度学习 运维 资源调度
智能化运维:机器学习在系统监控中的应用
【6月更文挑战第29天】在数字化时代的潮流中,智能化运维成为提升企业IT效率的关键。本文将探讨机器学习如何革新传统的系统监控方法,通过预测性维护和异常检测等技术,实现更加高效和精准的运维管理。文章不仅阐述理论,更结合实例,为读者展示智能化运维的实际成效与未来趋势。
|
1天前
|
数据采集 监控 搜索推荐
CRM报表在企业中的应用:分析工具与报告自动化
Zoho CRM报表汇总客户数据,以图表形式展示客户活动、销售、市场趋势,支持定制。报表功能包括数据分析、业绩评估、预测规划和监控调整。关键在于数据质量、报表定制、员工培训及持续优化。CRM报表帮助企业做决策,提升竞争力,是数字化转型的重要工具。
22 4
|
1天前
|
机器学习/深度学习 运维 算法
智能运维的崛起:机器学习在IT管理中的应用与挑战
随着企业对信息技术依赖程度的不断加深,传统的运维模式已经难以满足现代业务的需求。本文将深入探讨如何通过机器学习技术提升运维效率,分析其在故障预测、自动化处理和安全防护等方面的应用,并讨论实施过程中可能遇到的技术与管理挑战。文章旨在为IT专业人士提供一种前瞻性的视角,以适应日益复杂的运维环境。
6 0
|
1天前
|
机器学习/深度学习 数据采集 运维
智能运维的崛起:机器学习在故障预测中的应用
随着信息技术的迅猛发展,企业对IT系统的稳定性和可靠性要求日益提高。传统的运维模式已难以满足现代业务需求,智能运维(AIOps)应运而生。本文将深入探讨机器学习技术如何赋能运维领域,特别是在故障预测方面的应用。文章首先概述了智能运维的概念及其重要性,随后详细分析了机器学习在故障预测中的作用机制,包括数据收集、特征工程、模型选择与训练等关键步骤,并结合实际案例展示了机器学习模型的预测效果。最后,讨论了实施智能运维时面临的挑战及应对策略,旨在为读者提供一套完整的智能运维解决方案框架。
8 0
|
1天前
|
机器学习/深度学习 人工智能 运维
智能化运维:机器学习在系统监控中的应用
随着信息技术的快速发展,传统的运维管理方式正面临着前所未有的挑战。智能化运维作为应对这些挑战的有效手段,正逐渐进入人们的视野。本文将探讨机器学习技术如何被应用于智能化运维中,特别是其在系统监控领域的应用。通过引用最新的研究成果和实际案例,本文旨在揭示机器学习技术提升系统监控效率和准确性的潜力,同时指出实施过程中可能遇到的挑战及未来的发展方向。
7 0
|
1天前
|
机器学习/深度学习 搜索推荐 算法
探索机器学习在医疗诊断中的应用
随着人工智能技术的迅猛发展,机器学习已经成为改善和革新众多行业的关键工具之一。特别是在医疗领域,机器学习的应用不仅展现出巨大的潜力,更在提高诊断准确性、疾病预测以及个性化治疗计划的制定等方面发挥了重要作用。本文将深入探讨机器学习技术如何在医疗诊断中被有效利用,包括其在处理大数据、图像识别和生物标志物分析等方面的应用实例,并讨论这些技术面临的挑战与未来的发展方向。
8 0
|
2天前
|
机器学习/深度学习 自然语言处理 算法
扩散模型在机器学习中的应用及原理
扩散模型在机器学习中的应用及原理
|
2天前
|
机器学习/深度学习 缓存 运维
智能化运维:机器学习在故障预测与自动修复中的应用
随着信息技术的飞速发展,企业系统日益复杂,传统运维模式面临巨大挑战。智能化运维作为一种新兴趋势,通过集成机器学习算法,实现对系统故障的预测和自动修复,显著提高运维效率与准确性。本文深入探讨了智能化运维的概念、关键技术及其在故障预测和自动修复方面的应用实例,旨在为读者提供一种科学严谨、数据导向的视角,理解智能化运维的价值与实践路径。
6 0
|
2天前
|
机器学习/深度学习 数据采集 算法
“探索机器学习的多面世界:从理论到应用与未来展望“
“探索机器学习的多面世界:从理论到应用与未来展望“
6 1
|
3天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测与自动修复中的应用
随着技术的快速发展,智能化运维已成为提高系统稳定性和效率的关键。本文深入探讨了机器学习在故障预测和自动修复中的应用,分析了如何通过数据驱动的方法优化运维流程,并提出了实施智能化运维的策略。文章结合最新的研究成果和案例分析,为读者提供了一套完整的智能化运维解决方案。
4 0