推断最重要的特征

机器算法验证 机器学习 分类 监督学习
2022-03-29 15:13:50

给定一组实例。对于每个实例,我都有一个由(数字)特征(、...、)组成的特征向量,n>>m。此外,对于每个实例,我都有一个数字分数(可观察到的)。我想:nmx1x2xmy

  1. 找出哪个特征子集或其线性组合最能解释分数。
  2. 为此创建一个很好的可视化。

我被指出主成分分析(PCA)。PCA 的问题在于它只考虑了特征向量。PCA 不会将特征与数值分数相关联。y

实际应用:给定大量的问题实例(例如旅行商问题)和一些算法来解决问题。每次我们解决实例时,我们都可以测量解决实例所花费的总时间(=score)。此外,对于每个实例,我们可以获得许多特征,例如实例的大小、图的直径等。这些特征中的哪一个最好地解释了计算时间?

1个回答

有很多选择,这取决于你到底想要什么。

特征重要性或排列重要性

这两种方法都会告诉您哪些特征对模型最重要。它是每个功能的数字。它是在拟合模型后计算的。它不会告诉您任何有关特征的哪些值意味着什么分数。

在 sklearn 中,大多数 modelz 都有model.feature_importances_. 所有特征重要性的总和为 1。

为拟合模型计算排列重要性。它会告诉您,如果您对特征列进行洗牌,指标会恶化多少。

伪代码:

    model.fit()
    base_score = model.score(x_dev, y_dev)
    for i in range(nr_features):
        x_dev_copy = copy(x_dev)
        x_dev_copy[:, i] = shuffle(x_dev_copy[:, i])
        perm_score = model.score(x_dev_copy, y_dev)
        perm_imp[i] = (perm_score - base_score) / base_score

您可以在此处阅读有关排列重要性的更多信息。

部分依赖图

告诉您某个特征的哪些值会增加/减少预测值。它看起来像这样:

在此处输入图像描述

有关Kaggle的更多信息:部分依赖图或直接访问库PDPbox GitHub

形状值

解释了为什么模型对给定实例给出了特定的预测。它绘制了下图,告诉您哪些特征值将预测从平均值移动到当前实例的当前值。

在此处输入图像描述

查看SHAP 库以获取更多详细信息。