作者:韩信子@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 ftimport numpy as npimport pandas as pdtrain = pd.read_csv("Train.csv")test = pd.read_csv("test.csv")
6.3 数据筹备
咱们先从数据中提取出指标字段和特色字段,如下:
# saving identifierstest_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_Weight
和Outlet_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
,它是一种蕴含多个数据框及其之间关系的构造。
# 构建实体汇合eses = 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 lgbimport 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 variablestrain.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 setxtrain, 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_errornp.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自动化机器学习建模