作者:韩信子@ShowMeAI
教程地址:https://www.showmeai.tech/tutorials/41
本文地址:https://www.showmeai.tech/article-detail/209
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容

引言

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

1.机器学习与特征

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

2.特征工程介绍

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

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

3.特征工程意义

4.自动化特征工程

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

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

5.Featuretools简介

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

实体(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 pdtrain = 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()

我们发现字段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()

我们发现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)

上述代码中:

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

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

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

feature_matrix.columns

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

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

feature_matrix.head()

我们对这个 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])

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)

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

验证数据集的 RMSE 得分是

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

参考资料

  • 图解机器学习算法 | 从入门到精通系列
  • 图解机器学习 | LightGBM模型详解
  • LightGBM建模应用详解
  • 机器学习特征工程最全解读

ShowMeAI系列教程推荐

相关文章推荐

  • Python机器学习算法应用实践
  • SKLearn入门与简单应用案例
  • SKLearn最全应用指南
  • XGBoost建模应用详解
  • LightGBM建模应用详解
  • Python机器学习综合项目-电商销量预估
  • Python机器学习综合项目-电商销量预估<进阶方案>
  • 机器学习特征工程最全解读
  • 自动化特征工程工具Featuretools应用
  • AutoML自动化机器学习建模

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

  1. 机器学习实战之特征工程

    机器学习实战与特征工程 1.机器学习概述 1.1 什么是机器学习 1.2 为什么要机器学习 1.3 机器学习应用场景 1.4 学习框架和资料的介绍 2.特征工程 2.1 特征工程介绍 2.1.1 数据 ...

  2. 独家 | 用Python Featuretools库实现自动化特征工程(附链接)

    作者:Prateek Joshi 翻译:张玲 校对:李润嘉 本文约4000字,建议阅读10分钟. 本文简要介绍特征工程的基本组成部分,并用直观的示例理解它们,最后给出使用Python Featuret ...

  3. 一键数据分析自动化特征工程!

    创造新的特征是一件十分困难的事情,需要丰富的专业知识和大量的时间.机器学习应用的本质基本上就是特征工程.--Andrew Ng 业内常说数据决定了模型效果上限,而机器学习算法是通过数据特征做出预测的, ...

  4. 自动化特征工程和自动建模在风控场景的应用

    一.背景和问题 目前,模型开发的流程越来越规范化,通常可以分为业务分析.样本准备.特征工程.模型构建.模型评估及监控这几个步骤.其中,特征工程和模型构建在建模的整个流程中依然非常耗时,并且非常依赖于模 ...

  5. 融360蒋宏:自动化特征工程和自动建模在风控场景的应用

    01 背景和问题 目前,模型开发的流程越来越规范化,通常可以分为业务分析.样本准备.特征工程.模型构建.模型评估及监控这几个步骤.其中,特征工程和模型构建在建模的整个流程中依然非常耗时,并且非常依赖于 ...

  6. R语言caret包构建xgboost模型实战:特征工程(连续数据离散化、因子化、无用特征删除)、配置模型参数(随机超参数寻优、10折交叉验证)并训练模型

    R语言caret包构建xgboost模型实战:特征工程(连续数据离散化.因子化.无用特征删除).配置模型参数(随机超参数寻优.10折交叉验证)并训练模型 目录

  7. 机器学习中的特征工程——分类变量的处理

    出品 | CDA数据分析研究院,转载需授权 文章目录 分类变量 概念 判断 类型 少类别分类变量处理方法 独热编码(One-hot encoding) 虚拟编码(Dummy coding) 效应编码( ...

  8. 机器学习中的特征工程

    机器学习中的特征工程 什么是特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器 ...

  9. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(上)

    作者:尘沙杰少.樱落.新峰.DOTA.谢嘉嘉 特征工程--文本特征上半篇! 前 言 这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们 ...

最新文章

  1. 【留用】C#的一些好的书籍
  2. java e.getmessage() null_Java e.getMessage 错误信息为null
  3. freeswitch源码编译windows_【Thrift】Windows编译Thrift源码及其依赖库
  4. Android VNC Server New
  5. C++(STL):05---智能指针之unique_ptr
  6. 恢复网卡禁用灰色的按钮
  7. html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
  8. 一致性Hash与负载均衡
  9. 【C/C++基础进阶系列】实战记录 -- 内存泄漏检测相关总结
  10. 解释:什么是木马、蠕虫、病毒
  11. 帆软报表参数传给网络报表_报表开发工具FineReport的使用: 程序网络报表
  12. 支付宝转账支付宝转卡(H5飞行模式)
  13. 初识JAVA:华为面试写一个程序:要求出用1,2,5这三个数不同个数组合的和为100的组合个数
  14. 泛泛而谈:白话分布式一致性与共识算法
  15. 6个哄自己开心的小技巧
  16. 子网掩码起什么作用?
  17. 三分钟了解一下深度学习
  18. 《PS技巧精华全部在这里!》
  19. 西门子数控系统的机床数据采集
  20. 干货 | 手把手教你搭建一套OpenStack云平台

热门文章

  1. 计算机英语求职简历,计算机英文求职简历范文
  2. ssm高校专升本考试管理系统 毕业设计-附源码201631
  3. 【小小决斗】我看你不顺眼很久了,快来和我一决高下!
  4. 采用计算机数控技术的自动控制系统为,数控加工编程技术期末考试综合复习题...
  5. 关于数据库设计中的分级分层问题的总结(适用于组织结构图及家谱等问题)
  6. 企业即时通讯系统可以二次开发哪些功能
  7. js逻辑与、或、非运算规则
  8. 【论文精读】COLING 2022-KiPT: Knowledge-injected Prompt Tuning for Event Detection
  9. 清华大学计算机学院科研经费,太烧钱!985工程大学年度科研经费统计,看了数据吓一跳!...
  10. Keil C51中断编程中寄存器组的选用与保护