【问题标题】:How to find which features are responsible for predicted label? [closed]如何找到哪些特征负责预测标签? [关闭]
【发布时间】:2022-06-16 08:55:26
【问题描述】:

我正在做一个机器学习项目,想通过使用 sklearn 了解如何在 python 中找到负责预测标签的最佳特征。

假设我们拟合模型并且想要预测 model.predict([1,2,3])-> let suppose it says you passed the test. 但是仅针对此预测进行预测的特征的权重是多少 model.predict([1,2,3])

假设一个数据集有 5 列。我们称它们为:id、X_1、X_2、X_3、结果。 X_1,X_2,X_3 的数值为 1-5。

我需要证明这个结果是由权重为 0.8900% 和 0.3900% 的 X_1、X_2 或任何我可以使用完全理解的图表引起的。如何证明 X_1 和 X_2 比 X_3 对结果的影响更大?仅用于此预测model.predict([1,2,3])

我到处检查,但没有得到任何代码。我需要一个简单的答案或任何可以帮助我解决这个问题的代码。

【问题讨论】:

    标签: python pandas dataframe machine-learning data-science


    【解决方案1】:

    这真的取决于您的数据、模型和您想要实现的目标。话虽这么说,最简单的方法是进行不同的实验并比较结果。所以先用 X_1、X_2 和 X_3 做一个模型,然后再用 X_1 和 X_2 做一个模型。

    更复杂的解决方案可能是使用特征选择。 Here a short introduction. 例如,您可以使用feature importance 来了解每个特征对预测的贡献程度。 An easy example with code can be found here.

    **Example with a random forest model:**
    from sklearn.datasets import make_regression
    from sklearn.ensemble import RandomForestRegressor
    from matplotlib import pyplot
    
    # define dataset
    X, y = make_regression(n_samples=1000, n_features=3, n_informative=2, random_state=42)
    # define the model
    model = RandomForestRegressor()
    # fit the model
    model.fit(X, y)
    # get importance
    importance = model.feature_importances_
    # summarize feature importance
    for i,v in enumerate(importance):
        print('Feature: X_ %0d, Score: %.5f' % (i+1,v))
    

    在输出中,我们可以看到 X_3 比 X_1 对预测的贡献更大,因此创建另一个只有 X_1 和 X_2 的模型可能是一个想法(如果我们从一开始就怀疑的话,至少可以这样)。我们也可以考虑排除 X_1,因为如果我们担心数据的维度,它对预测的贡献不大。:

    请记住,这不是唯一的方法,而是众多方法之一。这实际上取决于您拥有哪些数据,您正在使用哪些模型以及您正在尝试做什么。

    编辑: 正如你现在问的关于预测的问题。您可以使用LIME 了解不同特征如何影响您的预测。由于我不知道您的代码,因此我无法为您的案例提供正确的代码。对于实施,您可以查看here 或简单地通过谷歌搜索。 示例代码如下所示:

    import lime
    import lime.lime_tabular
     # LIME has one explainer for all the models
    explainer = lime.lime_tabular.LimeTabularExplainer(X, verbose=True, mode='regression')
    
    # Choose the 5th instance and use it to predict the results
    j = 5
    exp = explainer.explain_instance(X[j], model.predict, num_features=3)
    # Show the predictions
    exp.show_in_notebook(show_table=True)
    

    输出看起来像这样:

    所以这里的解释可能是,特征 0 和特征 2 对预测的贡献最大,而且特征 2 可能指向更负面的预测方向。

    【讨论】:

    • 非常感谢您的回复,它给了我很多信息。但是假设我只输入一个预测条目-> model.prediction([4,2,3]) 并且想知道哪个特征更有助于预测它的结果。我们怎么能做到这一点?如果你也回答这个问题,我真的很感激。
    • 嗯,您可以尝试使用 LIME。将对此进行更新。但要小心根据测试数据调整模型可能会导致在现实生活场景中表现不佳!
    • 非常感谢。我可以和你分享我的代码和文件吗?有什么方法可以联系您的电子邮件或联系方式吗?
    • 您可以使用 google colab 或 github 上传您的文件,我可以查看它们。
    猜你喜欢
    • 2017-04-08
    • 2019-06-22
    • 1970-01-01
    • 2016-05-30
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2015-04-04
    相关资源
    最近更新 更多