使用 Scikit-Learn 在 Python 中进行特征选择

并非所有数据属性都生而平等。当涉及到数据集中的属性或列时,越多并不总是越好。

在本帖中,您将了解如何在使用 scikit-learn 库 创建机器学习模型之前,选择数据中的属性。

用我的新书 《Python 机器学习精通》 快速启动您的项目,其中包含分步教程以及所有示例的Python 源代码文件。

让我们开始吧。

更新:有关 Python 中特征选择的最新教程,请参阅以下帖子

feature selection

通过特征选择减少您的选项
照片由 Josh Friedman 拍摄,部分权利保留

选择特征

特征选择是一个过程,您可以在其中自动选择数据中对您感兴趣的预测变量或输出贡献最大的那些特征。

数据中有太多不相关的特征会降低模型的准确性。在对数据进行建模之前执行特征选择的三个好处是:

  • 减少过拟合:冗余数据越少意味着基于噪声做出决策的机会越少。
  • 提高准确性:误导性数据越少意味着建模准确性越高。
  • 减少训练时间:更少的数据意味着算法训练得更快。

Scikit-learn Python 库提供的两种不同的特征选择方法是递归特征消除和特征重要性排序。

递归特征消除

递归特征消除(RFE)方法是一种特征选择方法。它通过递归地移除属性并对剩余属性构建模型来工作。它使用模型准确性来识别哪些属性(以及属性组合)对预测目标属性的贡献最大。

此示例演示了如何在 Iris 花卉数据集上使用 RFE 来选择 3 个属性。

有关用于分类和回归的 RFE 的更广泛教程,请参阅教程

特征重要性

使用决策树的集成(如随机森林或极端森林)的方法也可以计算每个属性的相对重要性。这些重要性值可用于指导特征选择过程。

此示例演示了在 iris 花卉数据集上构建极端森林集成以及显示相对特征重要性。

有关各种算法的特征重要性的更广泛教程,请参阅教程

总结

特征选择方法可以为您提供有关给定问题的特征的相对重要性或相关性的有用信息。您可以使用这些信息创建数据集的过滤版本,并提高模型的准确性。

在本帖中,您了解了可以使用 scikit-learn 库在 Python 中应用的两种特征选择方法。

发现 Python 中的快速机器学习!

Master Machine Learning With Python

在几分钟内开发您自己的模型

...只需几行 scikit-learn 代码

在我的新电子书中学习如何操作
精通 Python 机器学习

涵盖自学教程端到端项目,例如
加载数据可视化建模调优等等...

最终将机器学习带入
您自己的项目

跳过学术理论。只看结果。

查看内容

115 条对 Python Scikit-Learn 特征选择 的回复

  1. Harsh 2014 年 10 月 9 日下午 4:51 #

    不错的帖子,RFE 和像 chi2 这样的特征选择有什么区别。我的意思是,最终它们实现了相同的目标,对吧?

    • jasonb 2014 年 10 月 10 日上午 6:52 #

      两者都旨在减少特征数量,但它们使用不同的方法。卡方是一种单变量统计量度,可用于对特征进行排名,而 RFE 则测试不同的特征子集。

      • Enny 2018 年 11 月 29 日上午 8:04 #

        是否有任何基准,例如 P 值、F 分数或 R 方,用于对特征的重要性进行评分?

        • Jason Brownlee 2018 年 11 月 29 日下午 2:33 #

          不,得分是相对的,并且特定于给定的问题。

    • mitillo 2017 年 9 月 2 日下午 7:27 #

      你好,

      我看了很多关于机器学习的内容,但你太棒了,
      你能用简单的方式解释一切,并写出每个人都能理解和“玩”的代码。你还为想深入研究该主题的任何人提供了很好的资源

      你是个好老师

      感谢您的工作

  2. Bozhidar 2015 年 6 月 26 日晚上 11:04 #

    你好,

    你能告诉我你建议对时间序列数据使用哪些特征选择方法吗?

    • Alex 2017 年 1 月 19 日上午 8:55 #

      请看 tsfresh – 这是一个专为 TS 设计的新特征选择方法

  3. Max 2016 年 1 月 30 日下午 7:22 #

    Jason 的网站很棒!

  4. Alan 2016 年 2 月 24 日上午 9:48 #

    感谢这篇好文章。只是想知道 RFE 是否也适用于线性回归?模型准确性是如何测量的?

  5. Carmen 2017 年 1 月 4 日上午 1:31 #

    Jason,一个可能有助于其他人偶然发现此帖子的快速问题。

    上面的示例使用未调整的模型进行 RFE。何时/何时不应先使用网格搜索找到一些优化的模型超参数,然后再进行 RFE?在您的经验中,这是一个好主意/有用的事情吗?如果不是,为什么?

    • Jason Brownlee 2017 年 1 月 4 日上午 8:58 #

      嗨 Carmen,抓得好。

      简短回答:我们对特征子集的相对差异感兴趣,而不是绝对最佳性能。

      通常,使用健壮的特征选择方法是一个好主意——即一种几乎无需调整即可在大多数问题上表现良好的方法。这提供了一个基线,而像 RFE 这样的包装器方法可以专注于特征子集的相对差异,而不是每个子集的优化最佳性能。

      在某些情况下,您的一般方法(例如随机森林)可能会失败。在这些情况下,您可能希望尝试使用一套 3-5 种不同的包装方法进行 RFE,看看结果如何。我认为这对于大多数问题来说都是矫枉过正。

      这有帮助吗?

  6. Carmen 2017 年 1 月 6 日下午 7:58 #

    谢谢,这有帮助。我提到先调整模型(轻度调整)的唯一原因是,正如你在“抽样检查”帖子中提到的,你想给算法一个机会,让它们表现出最佳状态。如果这适用于那里,我不明白为什么它不适用于 RFE。

    所以我想轻度调整(仅在最常见的超参数上使用最常见的网格值)可能在这里有帮助。但我明白你的意思。一旦我的代码都整理好了,我可能会尝试这两种方法并报告结果。

    • Jason Brownlee 2017 年 1 月 7 日上午 8:30 #

      你说得对,Carmen。

      这里有利弊权衡,最终将取决于实践者的经验和“品味”。

      事实上,许多工业机器学习都归结为品味:)
      大多数顶级方法在 90-95% 的努力-结果水平上表现都差不多。真正困难的工作是试图超越这一点,Kaggle 竞赛就是一个很好的例子。

  7. akram 2017 年 6 月 13 日上午 3:38 #

    非常感谢你的帖子 Jason

    我是一名 scikit-learn 的初学者,在使用特征选择模块 VarianceThreshold 时遇到了一个小问题,问题是我设置的方差 Var[X]=.8*(1-.8)

    它应该移除所有特征(所有样本中值相同的特征),其概率 p>0.8。
    在我的例子中,第五列应该被移除,p=8/10>(阈值=0.7)。

    #####################################

    from sklearn.feature_selection import VarianceThreshold
    X=[[0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.01,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,255,1.00,0.00,0.01,0.00,0.00,0.00,0.00,0.00],
    [0,1,2,1,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0.00,0.00,0.00,0.00,0.50,1.00,0.00,10,3,0.30,0.30,0.30,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,253,0.99,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,1,1,1,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00],
    [0,2,3,1,223,185,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,4,4,0.00,0.00,0.00,0.00,1.00,0.00,0.00,71,255,1.00,0.00,0.01,0.01,0.00,0.00,0.00,0.00]]
    sel=VarianceThreshold(threshold=(.7*(1-.7)))

    这是我运行脚本时得到的结果

    >>> sel.fit_transform(X)

    array([[ 1., 105., 146., 1., 1., 255., 254.],
    [ 1., 105., 146., 1., 1., 255., 254.],
    [ 1., 105., 146., 1., 1., 255., 254.],
    [ 1., 105., 146., 2., 2., 255., 254.],
    [ 1., 105., 146., 2., 2., 255., 254.],
    [ 1., 105., 146., 2., 2., 255., 255.],
    [ 2., 29., 0., 2., 1., 10., 3.],
    [ 1., 105., 146., 1., 1., 255., 253.],
    [ 1., 105., 146., 2., 2., 255., 254.],
    [ 3., 223., 185., 4., 4., 71., 255.]])
    这里的第二列不应该出现。
    谢谢;)

    • Jason Brownlee 2017 年 6 月 13 日上午 8:24 #

      我不清楚问题可能出在哪里。请考虑发布到 stackoverflow 或类似平台?

  8. Ishaan 2017 年 7 月 4 日晚上 10:12 #

    嗨,Jason,

    我正在使用 Python 中的多项逻辑回归进行特征选择(针对具有 100,000 行和 32 个特征的数据集)。现在,为了构建一个多类目标变量(1,2,3,4,5,6,7,8,9,10)的模型,最有效的方法是什么?我使用了 RFE 进行特征选择,但它为所有特征都提供了 Rank=1。我是否应该考虑所有特征来构建模型?是否有其他方法可以做到这一点?
    提前感谢。

    • Jason Brownlee 2017 年 7 月 6 日上午 10:15 #

      尝试一套方法,根据特征构建模型,并比较这些模型的性能。

  9. Hemalatha S 2017 年 11 月 17 日下午 6:50 #

    你能告诉我如何从 csv 文件中选择临床数据集的特征吗?

    • Jason Brownlee 2017 年 11 月 18 日上午 10:13 #

      尝试一套特征选择方法,根据选定的特征构建模型,使用导致最佳模型技能的特征集 + 模型。

  10. Sufian 2017 年 11 月 26 日上午 4:35 #

    嗨 Jason,我怎样才能一边打印特征名称一边打印重要性?

    谢谢,
    Sufian

    • Jason Brownlee 2017 年 11 月 26 日上午 7:35 #

      是的,如果您有特征或列名数组,您可以使用相同的索引访问两个数组。

  11. Hemalatha 2017 年 12 月 1 日上午 2:03 #

    什么是特征选择方法?如何根据选定的特征构建模型?
    你能帮我一下吗?因为我是机器学习和 Python 的新手

  12. Praveen 2018 年 1 月 2 日下午 6:42 #

    我想删除高度相关的列,就像 R 中的 caret 包预处理方法一样。我该如何使用 sklearn 删除它们?

    • Jason Brownlee 2018 年 1 月 3 日上午 5:32 #

      您可能需要自己实现它——例如,计算相关矩阵并删除选定的列。

  13. Shabnam 2018 年 1 月 5 日上午 8:15 #

    Keras 是否具有类似 FRE 的功能可以使用?

    我正在使用 Keras 进行模型构建。我创建了一个模型。然后,我想对它使用 RFE。第一行(rfe=FRE(model, 3))没问题,但一旦我尝试拟合数据,就会收到以下错误:

    TypeError: Cannot clone object ” (type ): it does not seem to be a scikit-learn estimator as it does not implement a ‘get_params’ methods.

    • Jason Brownlee 2018 年 1 月 5 日上午 11:37 #

      您也许可以使用 Keras 中的 sklearn 包装器,然后将包装后的模型置于 RFE 中。

      我在博客上有关于使用包装器的帖子,例如
      https://machinelearning.org.cn/use-keras-deep-learning-models-scikit-learn-python/

      • Shabnam 2018 年 1 月 6 日上午 7:21 #

        太棒了!我会阅读的。非常感谢您的回复和分享链接。

        • Jason Brownlee 2018 年 1 月 7 日上午 5:01 #

          不客气。

          • Deep saxena 2019 年 4 月 12 日下午 8:18 #

            在使用您的建议后,keras 模型不支持或排名属性

          • Jason Brownlee 2019 年 4 月 13 日上午 6:27 #

            不,它不支持。

          • Deep saxena 2019 年 4 月 15 日下午 5:01 #

            那么我们如何对 keras 模型进行 RFE 测试呢?

          • Jason Brownlee 2019 年 4 月 16 日上午 6:46 #

            也许您可以使用 Keras 包装器来构建模型,然后将其用作 RFE 的一部分?

          • Deep saxena 2019 年 4 月 16 日晚上 9:42 #

            我这样做了,但没有成功,我粘贴了代码供参考
            def create_model()
            # 创建模型
            model = Sequential()
            model.add(Dense(1000, input_dim=v.shape[1], activation=’relu’))
            model.add(Dropout(0.2))
            model.add(Dense(3, activation=’softmax’))
            model.compile(loss=’sparse_categorical_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
            return model

            by_name=True)
            seed = 7
            np.random.seed(seed)
            keras_model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=10, verbose=1)

            rfe = RFE(keras_model, 3)
            rfe = rfe.fit(v, all_label_encoded)
            print(rfe.support_)
            print(rfe)

            模型不支持 support 和 ranking。你能告诉我确切如何获得 ranking 和 support 吗?

          • Jason Brownlee 2019 年 4 月 17 日上午 7:00 #

            我很想帮忙,但我没有能力调试代码。

            我在这里有一些建议
            https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code

          • Deep saxena 2019 年 4 月 17 日下午 5:59 #

            您的回答证明了这一点,感谢您的回复。

    • Deep saxena 2019 年 4 月 23 日下午 4:29 #

      @Shubham 仅为澄清 Keras 分类器将无法与 RFE 配合使用。Jason Brownlee 提到的答案将不起作用。

      • Jason Brownlee 2019 年 4 月 24 日上午 7:52 #

        也许您可以尝试使用模型在特征子集上运行手动搜索?

        也许您可以运行 RFE 并使用 scikit-learn 模型,然后使用结果来启发 Keras 模型?

        • Deep saxena 2019 年 4 月 25 日晚上 8:44 #

          好的

  14. Smitha 2018 年 1 月 16 日上午 12:33 #

    嗨,Jason,

    可以将随机森林的特征重要性视为基于包装器的方法吗?

  15. Beytullah 2018 年 1 月 20 日晚上 9:40 #

    嗨,Jason,

    您知道特征重要性是如何计算的吗?

  16. Fawad 2018 年 1 月 26 日下午 4:52 #

    我认为在递归特征选择中,使用 CV 并让算法决定保留多少特征更为明智。

    • Jason Brownlee 2018 年 1 月 27 日上午 5:54 #

      是的。我经常保留所有特征,并使用子空间或特征选择方法的集合。

  17. kumar 2018 年 2 月 26 日下午 4:19 #

    我需要从我自己的数据集中选择最佳特征。使用特征选择包装器方法,学习算法是蚁群优化,分类器是 SVM。有人知道什么吗?

  18. Kagne 2018 年 3 月 23 日下午 8:30 #

    不错的帖子!

    但我仍然有一个问题。

    我最近参加了一个 Kaggle 比赛,我使用您发布的这些方法(模型是

    RandomForest)来评估我的数据集。

    然后我删除了最差的特征。我的分数从 0.79904 下降到 0.78947。然后我感到困惑。我应该构建更多

    特征吗?我应该怎么做才能获得更高的分数(更改模型?扩展特征或其他?)或者我可以在哪里学习这些?

    非常感谢。

  19. Rimi 2018 年 3 月 29 日下午 7:38 #

    嗨,Jason,

    我想知道是否有任何现有的 Python 库/库可以根据特定属性,使用增益比、信息增益、卡方、秩相关、线性相关、对称不确定性等多种方法来对特定数据集中的所有特征进行排名。如果没有,您能提供一些步骤来完成吗?

    谢谢

    • Jason Brownlee 2018年3月30日上午6:35 #

      也许?

      每种方法对数据中重要内容的“看法”都不同。你可以测试每种看法,看看哪种对于开发熟练的模型来说是真实/有用的。

  20. Abbas 2018年4月11日晚上11:48 #

    决策树分类器的特征重要性属性怎么样?可以用于特征选择吗?
    https://scikit-learn.cn/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

  21. Chris 2018年5月13日晚上10:52 #

    这个方法是否可以用于一组必须一起考虑的子集进行特征子集选择?例如,在执行特征哈希转换后,您有一个固定长度的哈希,它占用例如256列,这些列必须作为一个组来考虑。您有这方面的资源吗?

    • Jason Brownlee 2018年5月14日上午6:36 #

      也许。试试吧。抱歉,我没有关于这个主题的资料。试试在scholar.google.com上搜索

  22. Aman 2018年5月18日上午5:15 #

    关于集成学习模型,我用它来减少特征。但是,我如何知道需要选择多少特征呢?

  23. Jeremy Dohmann 2018年7月14日上午9:12 #

    在特征集变得非常大之前,该算法的有效性会如何下降?

    或者,因为它使用了子集,即使您拟合了大量特征,它也能返回合理的特征排名吗?

    谢谢!

  24. Junaid 2018年7月22日下午12:50 #

    我正在我的数据集上使用树分类器,每次运行脚本时它都会给出不同的值。这是一个问题吗?还是因为它通过树链接特征的不同方式而有所区别?

  25. sajid nawaz 2018年10月15日上午2:15 #

    分类和回归分析特征选择python代码???如果有人有的话

  26. hwanhee 2018年10月26日晚上6:53 #

    有没有办法为每个数据集找到最佳特征数量?

    • Jason Brownlee 2018年10月27日上午5:57 #

      是的,尝试一套特征选择方法和一套模型,并使用特征和模型的组合来获得最佳性能。

      • hwanhee 2018年10月27日下午12:06 #

        例如,哪种算法可以找到最佳特征数量?

      • hwanhee 2018年10月27日下午12:09 #

        例如,有500个特征。在执行特征选择算法时,有什么方法可以知道显示最高分类准确率的特征数量吗?

        • Jason Brownlee 2018年10月28日上午6:06 #

          通过从它们构建模型来测试不同的特征子集,并评估模型的性能。导致模型具有最佳性能的特征就是您应该使用的特征。

  27. Harshali Patel 2018年12月17日晚上9:37 #

    嗨,Jason,
    又是一篇很棒的文章,我看了你几篇帖子。
    我想听听你对我将在监督学习项目上使用的机器学习算法类型的看法。

  28. Vaibhav 2019年1月27日下午4:28 #

    你好 Jason,

    感谢您的所有内容。非常喜欢您的所有帖子。

    我现在面临难题,不知道什么时候为我的问题使用哪种特征选择方法(Filter、Wrapper & Embedded)。

    您能帮我一下,或者提供一些我可以获取所需信息的参考链接吗?

    提前感谢!

    Vaibhav

  29. nandini 2019年2月6日下午4:59 #

    嗨,Jason,

    我有一个关于使用keras进行文本分类的模型预测的要求。
    假设如果我输入了任何与模型未训练的文本无关的文本,模型将立即给出“您输入的查询无效”。

    请推荐任何可用的方法。
    提前感谢 🙂

    • Jason Brownlee 2019年2月7日上午6:37 #

      抱歉,我不明白,也许你可以详细说明一下?

  30. ofer 2019年2月10日上午9:27 #

    你好,
    有很多不同的特征选择方法。这取决于我使用的算法。例如,如果我使用逻辑回归进行预测,那么我就不能使用随机森林进行特征选择(来自随机森林的特征子集在逻辑回归模型中可能不显著)。
    您建议的方法是否适用于逻辑回归?

  31. Shreya 2019年4月27日下午7:45 #

    在使用逻辑回归进行特征选择后,我们可以应用不同的模型,如knn、决策树、随机森林等来获得准确率吗?

    • Jason Brownlee 2019年4月28日上午6:56 #

      也许你的问题太简单或太难了,所有的模型都找到了相同的解决方案?

  32. Sydney Wu 2019年5月2日下午1:26 #

    嗨,Jason,

    感谢您的帖子,清晰且有用。

    但我还有一些问题。

    1.我应该在特征选择之前消除变量的共线性吗?有些帖子说共线性对于非线性模型不是问题。但我担心它会影响特征选择的结果。

    2.scikit-learn中有几种特征选择方法,不同的方法可能会选择不同的子集,我如何知道哪个子集或方法更合适?

    3.当我构建机器学习模型时,模型的性能似乎与特征数量有关。无论我使用什么特征,当达到某个阈值时,准确率都会提高。我该如何解释这一点?

    再次感谢您的耐心回答。

  33. Ronak 2019年5月9日下午12:29 #

    感谢精彩的帖子。我在特征选择和参数调整方面遇到了一个问题。
    提前感谢您的帮助,

    我想使用递归特征消除和交叉验证选择最佳特征数量来进行特征选择。所以我使用RFECV

    但我传递了一个未调整的模型,svm.SVC(kernel=’linear’),给RFECV(),来寻找最佳特征的子集。所以我没有处理模型内部的超参数调整。

    先使用网格搜索找到一些优化的模型超参数,然后再进行RFE,这样有意义吗?(然而,参数调整是在未优化的特征集上进行的。)
    反之,即先进行特征选择,再进行参数调整,这样可以吗?(然而,所选特征是基于未调整的模型选择的)

    尽管如此,gridsearchCV和RFECV在交叉验证的每个折叠中都独立地进行特征选择,并且我可以使用不同的拆分标准来用于RFECV和gridsearchCV,
    我仍然怀疑,由于我必须使用相同的数据集进行参数调整和RFECV选择,这是否会导致过拟合?

    我是否需要从训练集中提取一部分数据来进行特征选择?然后开始在训练集的剩余数据上进行模型选择?

    • Jason Brownlee 2019年5月9日下午2:09 #

      将独立的rfe与具有给定算法的管道一起使用可能是有意义的。

  34. Tarun Gangil 2019年5月27日下午7:25 #

    你好,
    递归特征消除是否对分类输入数据集也有效?

  35. Benjamin 2019年6月5日凌晨1:49 #

    嗨Jason,感谢您的辛勤工作!

    您如何解释以下行为?特征重要性没有告诉您保留与RFE相同的特征……哪个应该信任?

    代码

    # 特征重要性
    from sklearn import datasets
    from sklearn import metrics
    from sklearn.ensemble import RandomForestClassifier
    # 加载鸢尾花数据集
    dataset = datasets.load_iris()
    # 将极端森林模型拟合到数据
    model = RandomForestClassifier()
    model.fit(dataset.data, dataset.target)
    # 显示每个属性的相对重要性
    print(model.feature_importances_)

    rfe = RFE(model, 1)
    rfe = rfe.fit(dataset.data, dataset.target)
    # 总结属性的选择情况
    print(rfe.support_)
    print(rfe.ranking_)

    输出

    [0.02029219 0.01598919 0.57190818 0.39181044]
    [False False False True]
    [3 4 2 1]

  36. Kushal Ghimire 2019年6月17日下午6:34 #

    解释得很棒,但我想从视频中提取人类活动识别(行走、睡眠、跳跃)的特征。但不知道如何加载数据集。任何帮助都将不胜感激。

  37. Suganya 2019年7月26日下午5:21 #

    你好 Jason,
    我正在尝试从我的数据集中选择80个最佳特征。我的数据集包含整数和字符串值。在使用SelectKBest方法选择特征时遇到问题。为什么会发生这样的问题?你能帮我理解一下吗?

  38. DHILSATH FATHIMA. M 2019年8月6日晚上7:30 #

    p值在机器学习算法中起什么作用?为什么使用它?

  39. Anushka 2019年8月22日晚上9:16 #

    你好 Jason,
    感谢这篇描述性的文章。
    我正在处理微生物组数据分析,并希望使用机器学习来选择一组可以对样本进行分类以区分两个类别(例如,健康和疾病)的属。
    我使用了以下代码

    从 sklearn.feature_selection 导入 SelectKBest
    from sklearn.feature_selection import chi2
    from sklearn.feature_selection import SelectFpr
    from sklearn.feature_selection import GenericUnivariateSelect
    X = df_n #包含131列和51行的数据集
    y = list(map(lambda x : x[:2], df_n.index))

    bestfeatures = GenericUnivariateSelect(chi2, ‘k_best’)
    fit = bestfeatures.fit(X,y)
    pvalues = -np.log10(bestfeatures.pvalues_) #将p值转换为对数格式

    dfscores = pd.DataFrame(fit.scores_)
    dfcolumns = pd.DataFrame(X.columns)
    dfpvalues = pd.DataFrame(pvalues)

    #连接两个数据框以便更好地可视化
    featureScores = pd.concat([dfcolumns,dfscores,dfpvalues],axis=1)
    featureScores.columns = [‘Specs’,’Score’,’pvalues’] #命名数据框列
    FS = featureScores.loc[featureScores[‘pvalues’] < 0.05, :]

    print(FS.nlargest(10, 'pvalues')) #前10个特征
    Specs Score pvalues
    41 a1 0.206076 0.044749
    22 a2 0.193496 0.042017
    11 a3 0.153464 0.033324
    117 a4 0.143448 0.031149
    20 a5 0.143214 0.031099
    45 a6 0.136450 0.029630
    67 a7 0.132488 0.028769
    0 a8 0.122946 0.026697
    80 a9 0.120120 0.026084
    123 a10 0.118977 0.025836

    现在我想使用这些特征列表来制作一个带有Bray-curtis的PCoA图,因为我想可视化这些特征如何将40个样本区分成两类(已知)。

    您能在这方面指导我吗?

  40. Prerna 2020年4月22日上午2:56 #

    你好,

    在rfe.fit并获得特征排名后,如何根据排名获取特征名称?另外,选择哪个排名来继续训练模型?

    • Jason Brownlee 2020年4月22日上午6:05 #

      排名包含了每个特征的索引,你可以使用这些索引来访问数组或数据框中的列名。

  41. Andrew 2020年5月1日下午5:46 #

    嗨,Jason,

    RFE根据训练数据选择特征集。
    尽管总的来说,较少的特征有助于防止过拟合。那么它是如何确保最佳性能特征不是由于过拟合的训练数据呢,因为它没有验证集?

    另外,RFE与XGboost、随机森林或梯度提升的importance_plot有何不同,它们显示了基于增益重要性的特征列表?

    • Jason Brownlee 2020年5月2日上午5:40 #

      RFE不能帮助您防止过拟合。

      它们非常不同。RFE使用您喜欢的任何模型进行计算,并根据特征如何影响模型性能来选择特征。来自树集合的特征重要性是根据特征在树中的使用程度来计算的。

  42. Henrique 2020年6月3日下午6:36 #

    你好,

    感谢您的教程。

    对我来说,不清楚的是RFE是否仅用于分类,还是也可以用于回归问题。
    当将上面的教程应用于另一个数据集时,它一直提示数据是连续的。这通常与分类器相关,不是吗?

    再次感谢。

  43. Jaime Lannister 2020年6月11日上午1:49 #

    嘿,

    我们能只从模型中提取特征名称吗?
    就像你只有一个拟合好的模型,现在你必须计算它的分数,但问题是你没有它所使用的特征列表。你只有模型和训练数据集。
    如果可以,请帮助我,因为我被卡住了!

    谢谢

    • Jason Brownlee 2020年6月11日上午6:01 #

      它将提供特征/列索引,然后您可以将它们直接与原始数据集中特征的名称关联起来。

  44. umesh kumar baburao sherkhane 2020年7月19日下午3:02 #

    嗨,Jason,
    这是一篇好文章。

    我有一个疑问,如果我不知道要选择多少个特征。我应该如何选择rfe所需的最佳特征数量?

    谢谢并致以问候

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。