乐趣区

关于人工智能:深度特征合成与遗传特征生成两种自动特征生成策略的比较

特色工程是从现有特色创立新特色的过程,通过特色工程能够捕捉原始特色不具备的与指标列的额定关系。这个过程对于进步机器学习算法的性能十分重要。只管当数据科学家将特定的畛域常识利用特定的转换时,特色工程成果最好,但有一些办法能够以自动化的形式实现,而无需先验畛域常识。

在本文中,咱们将通过一个示例介绍如何应用 ATOM 包来疾速比拟两种主动特色生成算法:深度特色合成 (Deep feature Synthesis, DFS) 和遗传特色生成 (Genetic feature generation, GFG)。ATOM 是一个开源 Python 包,能够帮忙数据科学家放慢对机器学习管道的摸索。

基线模型

为了进行比照,作为比照的基线只应用初始特色来训练模型。这里应用的数据是来自 Kaggle 的澳大利亚天气数据集的变体。该数据集的指标是预测今天是否会下雨,在指标列 RainTomorrow 上训练一个二元分类器。

import pandas as pd
from atom import ATOMClassifier

# Load the data and have a look
X = pd.read_csv("./datasets/weatherAUS.csv")
X.head()

初始化实例并筹备建模数据。这里仅应用数据集的一个子集(1000 行)进行演示。上面的代码估算缺失值并对分类特色进行编码。

atom = ATOMClassifier(X, y="RainTomorrow", n_rows=1e3, verbose=2)
atom.impute()
atom.encode()

输入如下所示。

能够应用 dataset 属性疾速检查数据转换后的样子。

atom.dataset.head()

数据当初已筹备好。本文将应用 LightGBM 模型进行预测。应用 atom 训练和评估模型非常简单:

atom.run(models="LGB", metric="accuracy")

能够看到测试集上达到了 0.8471 的准确率。上面看看主动特色生成是否能够改善这一点。

DFS

DFS 将规范数学运算符(加法、减法、乘法等)利用于现有特色,并组合这些特色。例如,在咱们的数据集上,DFS 能够创立新特色 MinTemp + MaxTemp 或 WindDir9am x WindDir3pm。

为了可能比拟模型,须要为 DFS 管道创立了一个新分支。如果你不相熟 ATOM 的分支零碎,请查看官网文档。

atom.branch = "dfs"

应用 atom 的 feature_generation 办法在新分支上运行 DFS。为了起见,这里只应用加法和乘法创立新特色(应用 div、log 或 sqrt 运算符可能会返回具备 inf 或 nan 值的特色,所以还须要再次进行解决)。

atom.feature_generation(
    strategy="dfs",
    n_features=10,
    operators=["add", "mul"],
)

ATOM 是应用 featuretools 包来运行 DFS 的。这里应用了 n_features=10,因而从所有可能的组合中随机抉择的十个特色被增加到数据集中。

atom.dataset.head()

再次训练模型:

atom.run(models="LGB_dfs")

须要留神的是

  • 在模型的首字母缩写词后增加标签 _dfs 以不笼罩基线模型。
  • 不再须要指定用于验证的指标。atom 实例将主动应用任何先前模型训练的雷同指标。在咱们的例子中为 accuracy。

看起来 DFS 并没有改良模型。后果甚至变得更糟了。让咱们看看 GFG 的体现如何。

GFG

GFG 应用遗传编程(进化编程的一个分支)来确定哪些特色是无效的并基于这些特色创立新特色。与 DFS 的自觉尝试特色组合不同,GFG 尝试在每一代算法中改良其特色。GFG 应用与 DFS 雷同的运算符,但不是只利用一次转换,而是进一步倒退它们,创立特色组合的嵌套构造。在应用运算符 add (+) 和 mul (x),特色组合的形式可能是:

add(add(mul(MinTemp, WindDir3pm), Pressure3pm), mul(MaxTemp, MinTemp))

在应用时与 DFS 一样,首先创立一个新分支(从原始 master 分支将 DFS 排除),而后训练和评估模型。同样,这里创立了 10 个新特色。

留神:ATOM 在底层应用 gplearn 包来运行 GFG。

atom.branch = "gfg_from_master"
atom.feature_generation(
    strategy="GFG",
    n_features=10,
    operators=["add", "mul"],
)

能够通过

generic_features

属性拜访新生成的特色、它们的名称和适应度(在遗传算法期间取得的分数)的概述。

atom.genetic_features

这里须要留神的是,因为特色的形容可能会变得很长(看上图),因而将新特色将被编号命名为例如 feature n,其中 n 代表数据集中的第 n 个特色。

atom.dataset.head()

再次运行模型:

atom.run(models="LGB_gfg")

这次失去了 0.8824 的准确率,比基线模型的 0.8471 好得多!

后果剖析

所有三个模型都已训练结束能够剖析后果了。应用 results 属性能够查看所有模型在训练集和测试集上的得分。

atom.results

应用 atom 的 plot 办法能够进一步比拟模型的特色和性能。

atom.plot_roc()

应用 atom 能够绘制多个相邻的图,查看哪些特色对模型的预测奉献最大

with atom.canvas(1, 3, figsize=(20, 8)):
    atom.lgb.plot_feature_importance(show=10, title="LGB")
    atom.lgb_dfs.plot_feature_importance(show=10, title="LGB + DFS")
    atom.lgb_gfg.plot_feature_importance(show=10, title="LGB + GFG")

对于两个非基线模型,生成的特色仿佛是都最重要的特色,这表明新特色与指标列相干,并且它们对模型的预测做出了重大贡献。

应用决策图,还能够查看特色对数据集中单个行的影响。

atom.lgb_dfs.decision_plot(index=0, show=15)

总结

本文中比拟了在应用两种主动特色生成技术生成的新特色对于模型预测的体现。结果显示应用这些技术能够显着进步模型的性能。本文中应用了 ATOM 包简化解决训练和建模流程,无关 ATOM 的更多信息,请查看包的文档。

https://www.overfit.cn/post/389b1d229dae4d0fb7b584cb37a350de

作者:Marco vd Boom

退出移动版