乐趣区

关于机器学习:机器学习实战-自动化特征工程工具Featuretools应用

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

引言

在 ShowMeAI 的文章 机器学习特色工程最全解读 里,咱们给大家具体介绍了特色工程的操作,但咱们实际上有很多工具能够辅助咱们更快捷地实现特色工程,在本篇内容中,ShowMeAI 给大家介绍 Featuretools 这个 Python 自动化特色工程的工具库。咱们会借助于 BigMart Sales 数据集来演示自动化特色工程的相干利用。

1. 机器学习与特色

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

2. 特色工程介绍

特色工程 (feature engineering):利用畛域常识和现有数据,发明出新的特色,用于机器学习算法;能够手动(manual) 或主动(automated)。

数据与特色工程决定了模型的下限,改良算法只不过是迫近这个下限而已。

3. 特色工程意义

4. 自动化特色工程

<img src=”http://tva1.sinaimg.cn/large/0060yMmAly1h0gt60jof3j311t0eeqgh.jpg” referrerpolicy=”no-referrer”/>

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

咱们有一个很好的工具能够用来帮忙实现自动化特色工程的过程,这个 Python 工具库的名称叫 Featuretools。

5.Featuretools 简介

Featuretools 是一个 Python 自动化特色工程的工具库。它能够帮忙大家疾速构建丰盛的数据特色,而把更多的工夫聚焦于构建机器学习模型的其余方面。
要学会应用 Featuretools,咱们要先理解它的三个次要组件:

[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-omwkGCGq-1647882602558)(http://image.showmeai.tech/ma…)]

  • 实体(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/1qjJZ…
提取码: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()

咱们发现字段 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 得分是 1094.7984。

在没有任何特色工程的状况下,验证集的得分为 1163。因而,Featuretools 结构的特色不仅仅是随机特色,而且还十分有价值的。最重要的是,它使特色工程节俭了大量工夫。

参考资料

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

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列

相干文章举荐

  • Python 机器学习算法利用实际
  • SKLearn 入门与简略利用案例
  • SKLearn 最全利用指南
  • XGBoost 建模利用详解
  • LightGBM 建模利用详解
  • Python 机器学习综合我的项目 - 电商销量预估
  • Python 机器学习综合我的项目 - 电商销量预估 < 进阶计划 >
  • 机器学习特色工程最全解读
  • 自动化特色工程工具 Featuretools 利用
  • AutoML 自动化机器学习建模
退出移动版