Python 中的机器学习特征选择

用于训练机器学习模型的数据特征对您能达到的性能有着巨大影响。

不相关或部分相关的特征可能对模型性能产生负面影响。

在这篇文章中,您将发现可用于使用 scikit-learn 在 Python 中准备机器学习数据的自动特征选择技术。

通过我的新书《使用 Python 进行机器学习》来启动您的项目,其中包括分步教程和所有示例的 Python 源代码文件。

让我们开始吧。

  • 2016 年 12 月更新:修复了 RFE 部分关于所选变量的打字错误。
  • 2018 年 3 月更新:添加了下载数据集的备用链接。
  • 2019 年 9 月更新:修复了代码以兼容 Python 3。
  • 2019 年 12 月更新:更新了单变量选择以使用 ANOVA。
Feature Selection For Machine Learning in Python

Python 中的机器学习特征选择
照片由 Baptiste Lafontaine 拍摄,保留部分权利。

特征选择

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

数据中存在不相关的特征可能会降低许多模型的准确性,特别是线性算法,如线性回归和逻辑回归。

在建模数据之前执行特征选择有三个好处:

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

您可以在文章《特征选择》中了解更多关于 scikit-learn 中的特征选择。

需要 Python 机器学习方面的帮助吗?

参加我为期 2 周的免费电子邮件课程,探索数据准备、算法等等(附带代码)。

立即点击注册,还将免费获得本课程的 PDF 电子书版本。

机器学习的特征选择

本节列出了 4 种用于 Python 机器学习的特征选择方法。

这篇帖子包含了特征选择方法的秘诀。

每个秘诀都设计为完整且独立的,因此您可以直接复制粘贴到您的项目中并立即使用。

这些秘诀使用 Pima Indian 糖尿病发病数据集来演示特征选择方法。这是一个二元分类问题,所有属性都是数值型的。

1. 单变量选择

统计测试可以用于选择那些与输出变量关系最强的特征。

scikit-learn 库提供了 SelectKBest 类,可与一套不同的统计测试一起使用,以选择特定数量的特征。

许多不同的统计测试都可以用于此选择方法。例如,ANOVA F 值方法适用于数值输入和分类数据,就像我们在 Pima 数据集中看到的那样。这可以通过 f_classif() 函数使用。我们将在下面的示例中,使用此方法选择 4 个最佳特征。

有关为您的数据使用哪种统计度量的帮助,请参阅教程

注意:考虑到算法或评估过程的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行示例并比较平均结果。

您可以看到每个属性的得分以及选择的 4 个属性(得分最高的那些)。具体是索引为 0 (preq)、1 (plas)、5 (mass) 和 7 (age) 的特征。

2. 递归特征消除

递归特征消除(RFE)通过递归地移除属性并在剩余属性上构建模型来工作。

它使用模型准确性来识别哪些属性(以及属性组合)对预测目标属性的贡献最大。

您可以在 scikit-learn 文档中了解更多关于 RFE 类的信息。

下面的示例使用 RFE 和逻辑回归算法来选择前 3 个特征。只要算法熟练且一致,算法的选择就不是太重要。

可以看到,RFE 选择了前 3 个特征:pregmasspedi

注意:考虑到算法或评估过程的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行示例并比较平均结果。

这些在 support_ 数组中标记为 True,在 ranking_ 数组中标记为“1”。

3. 主成分分析

主成分分析(或 PCA)使用线性代数将数据集转换为压缩形式。

通常这被称为数据降维技术。PCA 的一个特性是您可以选择转换结果中的维度数量或主成分数量。

在下面的示例中,我们使用 PCA 并选择 3 个主成分。

通过查阅 PCA API,了解更多关于 scikit-learn 中 PCA 类的信息。深入了解 PCA 背后的数学原理,请参阅 主成分分析维基百科文章

注意:考虑到算法或评估过程的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行示例并比较平均结果。

您可以看到,转换后的数据集(3 个主成分)与原始数据几乎没有相似之处。

4. 特征重要性

袋装决策树,如随机森林和极端随机树,可用于估计特征的重要性。

在下面的示例中,我们为 Pima 印第安人糖尿病发病数据集构建了一个 ExtraTreesClassifier 分类器。您可以在 scikit-learn API 中了解更多关于 ExtraTreesClassifier 类的信息。

注意:考虑到算法或评估过程的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行示例并比较平均结果。

可以看到,我们得到了每个属性的重要性分数,分数越大,属性越重要。分数表明了 plasagemass 的重要性。

总结

在这篇文章中,您发现了如何使用 scikit-learn 在 Python 中准备机器学习数据的特征选择。

您学习了 4 种不同的自动特征选择技术:

  • 单变量选择。
  • 递归特征消除。
  • 主成分分析。
  • 特征重要性。

如果您正在寻找更多关于特征选择的信息,请参阅这些相关文章:

您对特征选择或此帖子有任何疑问吗?请在评论中提出您的问题,我将尽力回答。

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

Master Machine Learning With Python

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

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

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

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

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

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

查看内容

对《Python 机器学习中的特征选择》的 370 条回应

  1. Juliet 2016 年 9 月 16 日晚上 8:57 #

    你好 Jason!谢谢你的这篇文章——非常有用!我确信我只是遗漏了一些简单的东西,但查看你的单变量分析,你列出的相关性最强的特征似乎在打印的得分摘要中具有最高值。这只是这个函数输出结果的一个怪癖吗?再次感谢你为特征选择提供了一个很棒的切入点。

    • Jason Brownlee 2016 年 9 月 17 日上午 9:29 #

      你好 Juliet,这可能只是巧合。如果你发现有什么不同,请告诉我。

      • Tesh 2021 年 9 月 6 日下午 4:04 #

        听起来不错。
        深度学习需要特征选择吗?

        谢谢你

        • Adrian Tam
          Adrian Tam 2021 年 9 月 7 日上午 6:02 #

          可能需要。最好的方法是看看特征选择能否提高结果。

          • Alok 2022 年 9 月 29 日下午 5:34 #

            是的,没错,特征选择会提高整体结果。

          • James Carmichael 2022 年 9 月 30 日上午 11:22 #

            绝对是 Alok!继续努力!

  2. Ansh 2016 年 10 月 11 日下午 12:16 #

    对于递归特征消除,高重要性特征是(preg、mass、pedi)吗?
    排名数组中它们的值是 1。

    • Jason Brownlee 2016 年 10 月 12 日上午 9:11 #

      你好 Ansh,我相信值为 1 的特征是帖子中提到的 preg、pedi 和 age。这些是排名靠前的特征。

      • Ansh 2016 年 10 月 12 日下午 12:29 #

        谢谢 Jason 的回复。我似乎犯了一个错误,我的错。很棒的帖子 🙂

        • Jason Brownlee 2016 年 10 月 13 日上午 8:33 #

          没问题,Ansh。

          • Anderson Neves 2016 年 12 月 15 日上午 6:52 #

            大家好,

            我同意 Ansh 的观点。有 8 个特征,索引为 True 和 1 的与 preg、mass 和 pedi 匹配。

            [ 'preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age' ]
            [ True, False, False, False, False, True, True, False]
            [ 1, 2, 3, 5, 6, 1, 1, 4 ]

            Jason,您能更好地解释一下您是如何看到 preg、pedi 和 age 是排名靠前的特征的吗?

            感谢您的帖子,它非常有用且直截了当。恭喜。

          • Jason Brownlee 2016 年 12 月 15 日上午 8:31 #

            你好 Anderson,它们在各自的列索引中有一个“true”,并且都被标记为“1”。

            这有帮助吗?

          • Anderson Neves 2016 年 12 月 16 日上午 12:00 #

            嗨,Jason,

            这正是我所说的。我认为在以下情况下,最佳特征将是 preg、pedi 和 age

            特征
            [ 'preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age' ]

            RFE 结果
            [ True, False, False, False, False, False, True, True ]
            [ 1, 2, 3, 5, 6, 4, 1, 1 ]

            然而,结果是

            特征
            [ 'preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age' ]

            RFE 结果
            [ True, False, False, False, False, True, True, False]
            [ 1, 2, 3, 5, 6, 1, 1, 4 ]

            您是否错误地考虑了目标列“class”?

            感谢您的快速回复,
            Anderson Neves

          • Jason Brownlee 2016 年 12 月 16 日上午 5:48 #

            你好 Anderson,

            我明白了,你是说当你运行代码时,你得到了不同的结果?

            代码是正确的,不包括 class 作为输入。

            现在重新运行,我看到了相同的结果

            也许我没有理解您注意到的问题?

          • Anderson Neves 2016 年 12 月 17 日上午 12:22 #

            嗨,Jason,

            您的代码是正确的,我的结果和您的一样。我的观点是,使用 RFE 找到的最佳特征是 preg、mass 和 pedi。因此,我建议您修改文本“您可以看到 RFE 选择了前 3 个特征:preg、pedi 和 age。”如果您在代码末尾添加以下代码,您将明白我的意思。

            # 查找最佳特征
            best_features = []
            i = 0
            for is_best_feature in fit.support_
            if is_best_feature
            best_features.append(names[i])
            i += 1
            print ‘\nSelected features:’
            print best_features

            抱歉打扰了,
            再次感谢,
            Anderson Neves

          • Jason Brownlee 2016 年 12 月 17 日上午 11:18 #

            明白了,Anderson。
            感谢您耐心帮助我使这篇文章更有用。我非常感谢!

            我已修复了上面的示例。

    • Mehdi Zhar 2020 年 6 月 20 日下午 8:40 #

      你好,谢谢你的这篇文章,我可以用这些选定的特征算法来做(knn,svm,决策树,逻辑回归)吗?例如,RFE 只能用于逻辑回归,还是我可以与任何分类算法一起使用?

  3. Narasimman 2016 年 10 月 14 日下午 9:18 #

    通过 rfe,我如何为具有 true 值的特征形成新的数据框?

    • Jason Brownlee 2016 年 10 月 15 日上午 10:22 #

      好问题,Narasimman。

      凭记忆,您可以使用 numpy.concatenate() 来收集您想要的列。
      https://docs.scipy.org.cn/doc/numpy/reference/generated/numpy.concatenate.html

    • Iain Dinwoodie 2016 年 11 月 1 日上午 12:52 #

      感谢有用的教程。

      Narasimman – '从 rfe,我如何为具有真实值的特征形成新的数据框?'

      您可以直接将 rfe 应用于数据框,然后根据列进行选择

      df = read_csv(url, names=names)
      X = df.iloc[:, 0:8]
      Y = df.iloc[:, 8]
      # 特征提取
      model = LogisticRegression()
      rfe = RFE(model, 3)
      fit = rfe.fit(X, Y)
      print(“特征数量: {}”.format(fit.n_features_))
      print(“选定特征: {}”.format(fit.support_))
      print(“特征排名: {}”.format(fit.ranking_))

      X = X[X.columns[fit.support_]]

  4. MLBeginner 2016 年 10 月 25 日上午 1:07 #

    嗨,Jason,

    非常感谢你的帖子!太棒了!我对 PCA 方法有一个小问题。如何获取选定的 3 个主成分的列标题?那里只是简单的列号,但很难知道最终是哪些属性。

    谢谢,

    • Jason Brownlee 2016 年 10 月 25 日上午 8:29 #

      谢谢 MLBeginner,我很高兴你觉得它有用。

      没有列标题,它们是总结数据的“新”特征。希望这有帮助。

  5. sadiq 2016 年 10 月 25 日上午 1:51 #

    你好,Jason!请问我是否可以使用 PSO 在 Python 中进行情感分析的特征选择?

    • Jason Brownlee 2016 年 10 月 25 日上午 8:29 #

      当然,尝试一下,看看结果如何(就像在选定特征上训练的模型一样)与其他特征选择方法进行比较。

  6. Vignesh Sureshbabu Kishore 2016 年 11 月 15 日下午 5:07 #

    嘿 Jason,卡方特征选择的单变量测试可以应用于连续数据和分类数据吗?

    • Jason Brownlee 2016 年 11 月 16 日上午 9:25 #

      你好 Vignesh,我相信只能用于连续数据。但我可能错了——你可以试试看。

      • Vignesh Sureshbabu Kishore 2016 年 11 月 16 日下午 1:07 #

        嘿 Jason,谢谢你的回复。在单变量选择中执行卡方检验时,你从 df.values 中获取数组。在这种情况下,数组的每个元素将是数据框中的每一行。

        要执行特征选择,我们应该理想地从数据框的每一列中获取值,以检查每个特征与类变量的独立性。这是 sklearn.preprocessing 的内置功能吗,所以你将值作为每一行获取?

        请给我建议。

        • Jason Brownlee 2016 年 11 月 17 日上午 9:49 #

          我不太明白 Vignesh。一般来说,是的,我们使用内置函数来执行测试。

  7. Vineet 2016 年 12 月 2 日上午 5:11 #

    嗨,Jason,

    我正在尝试使用 CPU 机器进行图像分类,我有一个非常大的训练矩阵,大小为 3800*200000,这意味着有 200000 个特征。请问如何降维?

    • Jason Brownlee 2016 年 12 月 2 日上午 8:19 #

      考虑使用数据集的一个样本。

      考虑使用本文中的特征选择方法。

      考虑使用 PCA、Sammons 映射等投影方法。

      希望这些能作为一个开始有所帮助。

      • Erick 2020 年 4 月 22 日上午 2:32 #

        嗨 Jason

        import numpy as np

        从 sklearn.feature_selection 导入 SelectKBest

        从 sklearn.feature_selection 导入 chi2

        most_relevant = SelectKBest(chi2, k>=4).fit(X_train, y_train)

        most_relevant_df = pd.DataFrame(zip(X_train.columns, most_relevant.scores_),

        columns= ['Variables', 'score']).sort_values( 'score', ascending=False).head(20)

        most_relevant_variables = most_relevant_df.Variables.tolist()

        most_relevant_df

        —————————————————————————
        NameError Traceback (最近一次调用)
        in
        2 从 sklearn.feature_selection 导入 SelectKBest
        3 从 sklearn.feature_selection 导入 chi2
        ----> 4 most_relevant = SelectKBest(chi2, k>=4).fit(X_train, y_train)
        5 most_relevant_df = pd.DataFrame(zip(X_train.columns, most_relevant.scores_),
        6 columns= ['Variables', 'score']).sort_values( 'score', ascending=False).head(20)

        NameError: 名称 'k' 未定义

        我遇到了这个问题,K 未定义,我需要怎么做,以前我使用这个代码没有问题,你知道是什么原因吗?

  8. tvmanikandan 2016 年 12 月 15 日下午 5:49 #

    Jason,
    当您使用“SelectKBest”时,请您解释一下您是如何获得以下分数的吗?

    [ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393
    181.304]

    -Mani

  9. tvmanikandan 2016 年 12 月 16 日上午 2:48 #

    杰森,
    请解释一下如何使用卡方检验获得以下分数。

    [ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393
    181.304]

    -Mani

  10. Natheer Alabsi 2016 年 12 月 28 日晚上 8:35 #

    Jason,我们如何从特征排名中获取特征名称?

    • Jason Brownlee 2016 年 12 月 29 日上午 7:15 #

      你好 Natheer,

      将特征排名映射到 DataFrame 或其他数据上标题行中列名称的索引。

  11. Jason 2017 年 1 月 9 日上午 2:40 #

    嗨,Jason,

    谢谢这个很棒的博客

    我有一个回归问题,需要将一堆分类变量转换为虚拟数据,这将生成 200 多个新列。我应该在此步骤之前还是之后进行特征选择?
    谢谢

    • Jason Brownlee 2017 年 1 月 9 日上午 7:52 #

      试一试。

      那会产生很多新的二元变量。您的结果数据集将是稀疏的(很多零)。在此之前进行特征选择可能是一个好主意,也可以在此之后尝试。

  12. Mohit Tiwari 2017 年 2 月 13 日下午 3:37 #

    嗨,Jason,

    我在选择适合我数据的特征选择算法方面有点卡住了。

    我的数据大约有 900 个属性(列)和大约 60 条记录。这些值只是属性的计数。
    基本上,我正在统计一个可移植文件的 API 调用次数。

    我的数据如下:

    文件,危险,API 1,API 2,API 3,API 4,API 5,API 6……API 900
    ABC,是,1,0,2,1,0,0,….
    DEF,否,0,1,0,0,1,2
    FGH,是,0,0,0,1,2,3
    .
    .
    .
    直到 60

    您能为我的数据推荐一个合适的特征选择方法吗?

    • Jason Brownlee 2017 年 2 月 14 日上午 10:03 #

      你好 Mohit,

      考虑尝试几种不同的方法,以及一些投影方法,看看哪种数据“视图”能够产生更准确的预测模型。

  13. Esu 2017 年 2 月 15 日上午 12:01 #

    你好!

    一旦我通过 PCA 获得了数据的简化版本,我该如何将其输入到我的分类器中?

    例如:原始数据大小为 100 行乘 5000 列
    如果我减少 200 个特征,我将得到 100 乘 200 维的数据。对吗?
    然后我创建数组:

    a=array[:,0:199]
    b=array[:,99]
    但是当我测试我的分类器时,它的核心在测试和训练准确率方面都是 0%?
    有什么想法吗?

    • Jason Brownlee 2017 年 2 月 15 日上午 11:35 #

      听起来你做得对,但零准确度是个危险信号。

      你在进行 PCA 时是否不小心将类别输出变量包含在数据中?它应该被排除在外。

  14. Kamal 2017 年 2 月 20 日下午 6:20 #

    你好,先生,
    我心里有一个问题
    这些特征选择算法都使用一些预定义数字,例如 PCA 中使用的 3。那么我们如何知道我的数据集只包含 3 个或任何预定义数量的特征呢?它不会自动选择特征数量。

    • Jason Brownlee 2017 年 2 月 21 日上午 9:33 #

      好问题,Kamal。

      不,您必须选择特征数量。我建议进行敏感性分析,尝试不同数量的特征,看看哪种方法能产生性能最佳的模型。

  15. Massimo 2017 年 3 月 9 日上午 5:29 #

    你好 jason,
    我对 RFECV 方法有一个问题。
    我正在处理一个需要使用不同估计器(回归模型)的项目。将 RFECV 与这些模型一起使用是否正确?还是只使用其中一个就足够了?一旦我选择了最佳特征,我是否可以将其用于每个回归模型?
    为了更好地解释:
    ——我将 RFECV 与以下回归模型之一 [LinearRegression, Ridge, Lasso] 结合使用在整个数据集上。
    ——然后我比较了 r2 并选择了更好的模型,因此我使用了它选择的特征来做其他事情。
    ——实际上,我在每个回归模型中都使用了相同的“最佳”特征。
    抱歉我的英语不好。

    • Jason Brownlee 2017 年 3 月 9 日上午 9:58 #

      好问题。

      您可以将不同的模型嵌入 RFE 中,看看结果在选择特征方面是否讲述相同或不同的故事。

      您可以从每组特征构建模型并组合预测。

      您可以选择一组特征并从中构建一个或多个模型。

      我的建议是尝试所有你能想到的方法,看看什么能在你的验证数据集上给出最好的结果。

      • Massimo 2017 年 3 月 11 日上午 2:41 #

        谢谢你,伙计。你很棒。

  16. gevra 2017 年 3 月 22 日上午 1:49 #

    你好,Jason。

    感谢您的帖子,但我认为直接使用随机森林在您有相关特征的情况下不会起作用。

    请查看这篇论文:
    https://academic.oup.com/bioinformatics/article/27/14/1986/194387/Classification-with-correlated-features

    我不确定其他方法,但特征相关性是在评估特征重要性之前需要解决的问题。

    • Jason Brownlee 2017 年 3 月 22 日上午 8:08 #

      有道理,谢谢您的提醒和参考文献。

      • ssh 2017 年 6 月 20 日晚上 8:20 #

        Jason,根据这些说明,您在机器学习领域中,输入向量之间的相关性何时会成为问题?毕竟,嵌入在某些算法(如梯度下降的权重优化)中的特征降维技术为相关性问题提供了一些解决方案。
        谢谢

        • Jason Brownlee 2017 年 6 月 21 日上午 8:14 #

          也许相关性高于 0.5。进行敏感性分析,使用不同的值,选择特征,并利用由此产生的模型技能来指导您。

  17. ogunleye 2017 年 3 月 30 日上午 4:29 #

    你好,先生,
    感谢您提供的信息丰富的帖子。我的问题是:
    1) 您如何处理数据集中用于特征选择目的的 NaN。
    2) 我在使用 RFE(model, 3) 时遇到了错误。它告诉我我提供了 2 个参数
    而不是 1 个。

    再次非常感谢您。

  18. ogunleye 2017 年 3 月 30 日上午 4:33 #

    先生,我解决了我的问题。我在主程序中将函数命名为 RFE。我很乐意听到
    您对第一个问题的回答。

  19. Sam 2017 年 4 月 20 日上午 3:49 #

    如何将嵌套的 JSON 加载到数据框中?

    • Jason Brownlee 2017 年 4 月 20 日上午 9:32 #

      我目前不清楚,也许可以发到 StackOverflow 吗?Sam?

  20. Federico Carmona 2017 年 4 月 20 日上午 6:10 #

    下午好

    如何通过 PCA 了解哪些是主要成分?

    • Jason Brownlee 2017 年 4 月 20 日上午 9:34 #

      PCA 将计算并返回主成分。

      • Federico Carmona 2017 年 4 月 20 日上午 10:53 #

        是的,但 PCA 没有告诉我哪些是最相关的变量,例如 mass test 等?

        • Jason Brownlee 2017 年 4 月 21 日上午 8:27 #

          抱歉,我不太明白你的意思。

          如果你想的话,你可以将特征选择或特征重要性方法应用于 PCA 结果。但这可能有点多余。

  21. Lehyu 2017 年 4 月 23 日下午 6:44 #

    在 RFE 中我们应该输入一个估计器,那么在我进行特征选择之前,我应该调整模型还是直接使用默认参数设置?谢谢。

    • Jason Brownlee 2017 年 4 月 24 日上午 5:33 #

      你可以这样做,但这并不是必需的。只要估计器在问题上表现得足够好,所选特征就会有价值。

      • Lehyu 2017 年 4 月 25 日上午 12:41 #

        我在这里卡了好几天。非常感谢。

        • Lehyu 2017 年 4 月 25 日上午 1:09 #

          卡住了…

        • Jason Brownlee 2017 年 4 月 25 日上午 7:49 #

          很高兴听到建议有帮助。

          如果您再次遇到困难,请尽管提出您的问题,我会尽力帮助。

  22. Rj 2017 年 5 月 7 日下午 4:38 #

    嗨,Jason,

    我想知道是否可以使用 SVM-RFE(其中使用的核是线性核)中的特征来构建/训练另一个模型(例如带有 RBF 核的 SVM)。

  23. Gwen 2017 年 6 月 5 日下午 7:02 #

    嗨,Jason,

    首先,感谢您的所有帖子!这对像我这样的机器学习初学者非常有帮助。

    我正在做一个个人项目,是关于 1 对 1 体育预测的。我的神经网络(MLP)准确率达到 65%(虽然不是很出色,但这是一个好的开始)。我有 28 个特征,我认为其中一些特征会影响我的预测。因此我应用了您帖子中提到的两种算法:
    ——递归特征消除,
    ——特征重要性。

    但我有一些矛盾之处。例如,使用 RFE 我确定要选择 20 个特征,但在特征重要性中最重要的特征在 RFE 中却未被选中。这如何解释呢?

    此外,在特征重要性中,所有特征都在 0.03 到 0.06 之间……这是否意味着所有特征都与我的输出不相关?

    再次感谢您的帮助!

    • Jason Brownlee 2017 年 6 月 6 日上午 9:30 #

      你好 Gwen,

      不同的特征选择方法会选择不同的特征。这是预料之中的。

      根据每组特征构建模型,并比较每种模型的性能。

      考虑将模型集合起来,看看性能是否能有所提升。

      一个值得考虑的获取更多特征的好领域是使用评级系统,并将评级作为高度预测性的输入变量(例如,可以直接使用国际象棋评级系统)。

      告诉我进展如何。

      • Gwen 2017 年 6 月 7 日上午 1:17 #

        谢谢你的回答,Jason。

        我尝试了由递归特征消除选择的 20 个特征,但我的准确率约为 60%……

        此外,Elo 评级系统(用于国际象棋)是我的一个特征。仅使用此特征,我的准确率约为 65%。

        也许 MLP 对我的项目来说不是一个好主意。我必须考虑我的神经网络配置,我只有一个隐藏层。

        而且,网球比赛的预测准确率可能无法超过 65%/70%。
        (不足以获得正投资回报率!)

  24. RATNA NITIN PATIL 2017 年 7 月 20 日晚上 8:16 #

    你好 Jason,

    我对这个教程印象非常深刻。我只是一个初学者。我有一个非常基本的问题。一旦我通过 PCA 获得了数据的简化版本,我该如何将其输入到我的分类器中?我的意思是,如何将 PCA 的输出输入到分类器中?

    • Jason Brownlee 2017 年 7 月 21 日上午 9:33 #

      将其分配给变量或保存到文件,然后像正常的输入数据集一样使用数据。

  25. RATNA NITIN PATIL 2017 年 7 月 20 日晚上 8:56 #

    嗨,Jason,

    我正在尝试执行 PCA,但在代码的这一点上遇到了错误:

    print(“解释方差: %s”) % fit.explained_variance_ratio_

    这是一个类型错误:%s 不支持的操作数类型为 'non type' 和 'float'

    请帮帮我。

    • Jason Brownlee 2017 年 7 月 21 日上午 9:35 #

      这看起来像是一个 Python 3 的问题。将“)”移到行尾:

      • RATNA NITIN PATIL 2017 年 7 月 21 日下午 2:23 #

        谢谢 Jason。它奏效了。

  26. Raphael Alencar 2017 年 7 月 21 日晚上 9:57 #

    如何知道我应该选择哪种特征选择技术?

    • Jason Brownlee 2017 年 7 月 22 日上午 8:35 #

      考虑使用几种方法,为每种方法创建模型,然后选择能够产生最佳性能模型的方法。

  27. RATNA NITIN PATIL 2017 年 7 月 22 日下午 4:23 #

    你好 Jason,

    我使用了 Extra Tree 分类器进行特征选择,然后输出是每个属性的重要性得分。但我想将这些重要属性提供给训练模型以构建分类器。我无法仅将这些重要特征作为输入来构建模型。
    如果您能在此方面帮助我,我将不胜感激。

    • Jason Brownlee 2017 年 7 月 23 日上午 6:20 #

      这些重要性得分是为您准备的。您可以使用它们来帮助决定哪些特征作为模型的输入。

      • Haiyang Duan 2018 年 12 月 11 日下午 7:57 #

        你好 Jason,我非常感谢你的帖子。但我有一个小问题。为什么重要性得分之和不等于 1?

        • Jason Brownlee 2018 年 12 月 12 日上午 5:51 #

          因为它们没有被归一化。

          • Haiyang Duan 2018 年 12 月 12 日上午 11:46 #

            我真诚地感谢您。我使用 SelectFromModel 运行了特征重要性,其中 estimator=LinearSVC。但我得到了负的特征重要性值。我想知道这意味着什么。

          • Jason Brownlee 2018年12月12日下午2:14 #

            分数通常是相对的。也许这些特征不如其他特征重要?

          • 段海洋 2018年12月12日晚上10:35 #

            非常感谢。

  28. RATNA NITIN PATIL 2017年7月22日晚上6:33 #

    嗨,Jason,

    基本上,我想将特征降维的输出提供给朴素贝叶斯。如果您能提供示例代码会更好。

    感谢您提供这个精彩的教程。

    • Jason Brownlee 2017年7月23日上午6:21 #

      您可以使用特征选择或特征重要性来“建议”使用哪些特征,然后使用这些特征开发模型。

  29. RATNA NITIN PATIL 2017年7月23日晚上6:44 #

    谢谢 Jason,

    但是,在了解了重要特征之后,我无法从中构建模型。我不知道如何只将这些特征作为输入提供给模型。我的意思是 X_train 参数将包含所有特征作为输入。

    提前感谢…。

    • Jason Brownlee 2017年7月24日上午6:53 #

      特征选择方法会告诉您可以使用哪些特征。使用您喜欢的编程语言创建一个只包含这些列的新数据文件。

      • RATNA NITIN PATIL 2017年7月24日晚上5:42 #

        非常感谢 Jason。你做得很好。

  30. RATNA NITIN PATIL 2017年7月24日晚上6:11 #

    我的桌面上有自己的数据集,而不是所有机器学习库中都有的标准数据集(例如 iris、diabetes)。

    我有一个简单的 csv 文件,我想加载它以便正确使用 scikit-learn。

    我需要一个非常简单易行的方法来做到这一点。

    等待回复。

  31. mllearn 2017年7月29日上午6:04 #

    感谢这篇非常有帮助的文章,

    我应该选择哪种技术,而不选择其他技术?
    这些技术的结果是否与其他技术的结果相关?我的意思是,使用多种技术来验证特征选择是否有意义?

    谢谢!

    • Jason Brownlee 2017年7月29日上午8:12 #

      根据在所选特征上训练的模型结果选择技术。

      在预测建模中,我们关注的是提高预测技能和降低模型复杂性。

      • mllearn 2017年7月30日下午5:04 #

        听起来我需要交叉验证每种技术……很有趣,我知道这很大程度上取决于数据,但我正在努力找出一种启发式方法来选择正确的方法,谢谢!

        • Jason Brownlee 2017年7月31日上午8:14 #

          应用机器学习是经验性的。您无法分析性地选择“最佳”方法。

  32. steve 2017年8月17日下午3:15 #

    嗨,Jason,

    在您的示例中,您写道

    array = dataframe.values
    X = array[:,0:8]
    Y = array[:,8]

    在我的数据集中,有 45 个特征。当我这样写时

    X = array[:,0:44]
    Y = array[:,44]

    我收到一些错误

    Y = array[:,44]
    IndexError: index 45 is out of bounds for axis 1 with size 0

    如果您能帮助我,我将不胜感激!
    提前感谢。

    • Jason Brownlee 2017年8月17日下午4:55 #

      确认您已正确加载数据,打印形状和一些行。

  33. Aneeshaa S C 2017年8月20日晚上11:22 #

    1. Lasso 可以使用哪些类型的预测变量?
    2. 如果可以使用分类预测变量,是否应该将其重新编码为数值?例如:将是/否值重新编码为 1/0
    3. 像位置(U(城市)/R(农村))这样的分类变量是否可以在不进行任何转换/重新编码的情况下使用?

    • Jason Brownlee 2017年8月21日上午6:07 #

      回归,例如预测实数值。

      分类输入必须编码为整数或独热编码(哑变量)。

  34. panteha 2017年8月29日上午1:36 #

    嗨 Jason
    我是机器学习新手,正在用 Python 做一个项目,其中一部分是识别相关特征,我想知道下一步是什么?如何处理相关特征?我们应该将它们更改为新的东西吗?也许是组合?它如何影响我们的建模和预测?如果您能指导我学习一些资源并找出答案,我将不胜感激。
    祝好

    • Jason Brownlee 2017年8月29日下午5:09 #

      通常会识别并删除相关的输入变量。

      尝试一下,看看它是否提高了您模型的技能。

  35. Silvio Abela 2017年9月26日上午6:48 #

    Brownlee博士您好,

    感谢这些令人难以置信的教程。

    我正在尝试对从在线评论中收集的一些文本数据进行分类,并且想知道是否有任何方法可以自动确定各种算法中的常数。例如,在 SelectKBest 中,k=3,在 RFE 中您选择 3,在 PCA 中,又是 3,而在特征重要性中,它被留作选择,仍然需要一些阈值。

    有没有像经验法则或算法一样的方法来自动决定“最佳中的最佳”?比如说,我使用 n-gram;如果我在 1000 个实例数据集上使用三元组,特征数量就会爆炸。我如何根据最佳结果自动将 SelectKBest 设置为“x”数量?谢谢。

    • Jason Brownlee 2017年9月26日下午2:59 #

      不,超参数不能分析设置。您必须通过实验来发现特定问题的最佳配置。

      您可以使用启发式方法或复制值,但最好的方法是通过稳健的测试工具进行实验。

  36. Abby 2017年10月6日下午3:43 #

    这是一个令人印象深刻的教程,很容易理解。我正在寻找使用高斯混合聚类模型在 python 中进行特征子集选择。您能帮我吗?

    • Jason Brownlee 2017年10月7日上午5:48 #

      抱歉,我没有关于混合模型或聚类的材料。我无法提供帮助。

  37. Manjunat 2017年10月6日晚上8:31 #

    嗨,jason

    我尝试了所有特征选择技术,哪种最适合用于预测建模的数据训练……?

    • Jason Brownlee 2017年10月7日上午5:54 #

      针对您的数据集尝试多种方法,看看哪个特征子集能产生最熟练的模型。

  38. Nerea 2017年10月16日晚上7:13 #

    你好 Jason,

    我是西班牙的一名生物化学学生,我正在进行一个关于癌症预测生物标志物的项目。我使用的生物信息学方法非常简单,但我们正试图用一些蛋白质数据预测转移。在我们的研究中,我们想确定最好的生物标志物和最差的生物标志物,以及使用两种生物标志物可能产生的协同效应。这就是我的问题:我不知道如何计算哪两种是最好的预测变量。
    这是我为最佳和最差预测变量所做的工作

    analisis=[‘il10meta’]
    X = data[analisis].values

    #响应变量
    response=’evol’
    y = data[response].values

    # 使用具有不同 random_state 值的训练/测试分割
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=5)

    from sklearn.neighbors import KNeighborsClassifier

    #创建分类器
    knn = KNeighborsClassifier(n_neighbors=1)

    #拟合分类器
    knn.fit(X_train, y_train)

    #预测与测试数据对应的响应变量
    y_pred = knn.predict(X_test)

    #计算分类精度
    print(metrics.accuracy_score(y_test, y_pred))

    我计算了精度。但是当我尝试对两种生物标志物做同样的事情时,我在我 6 种生物标志物的所有组合中都得到了相同的结果。

    你能帮我吗?有什么建议吗?

    谢谢你

  39. gen 2017年10月17日下午6:35 #

    你好 Jason,

    非常感谢您的帖子。我也读过您关于特征选择的介绍文章。特征重要性属于哪种方法?即包装器还是嵌入式?

    谢谢

    • Jason Brownlee 2017年10月18日上午5:32 #

      都不是,这又是另一回事。

      您可以将重要性分数用作过滤器。

  40. Numan Yilmaz 2017年10月26日下午1:46 #

    很棒的帖子!谢谢你,Jason。我的问题是这里所有的值都是整数。所有算法都需要这样做。如果我有分类数据怎么办?如果存在分类特征,我如何知道哪个特征对模型更重要?有没有一种方法可以在独热编码(get_dummies)之前计算它,或者如果模型不是基于树的,如何在独热编码之后计算它?

    • Jason Brownlee 2017年10月26日下午4:18 #

      好问题,我暂时想不出针对分类数据的特征选择方法,也许存在。需要做一些功课(例如谷歌学术搜索)。

  41. rohit 2017年11月13日晚上9:11 #

    你好,杰森,
    我是否也应该在我的验证数据集上进行特征选择?还是只在我的训练集上进行特征选择,然后使用验证集进行验证?

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

      使用训练数据集选择特征。然后,仅在测试/验证和模型使用的任何其他数据集上选择这些特征。

  42. Maryam 2017年11月16日下午3:45 #

    你好 jason
    我正在做简单的分类,但出现了一个问题
    ValueError 回溯 (最近一次调用)
    in ()
    —-> 1 fit = test.fit(X, Y)

    ~\Anaconda3\lib\site-packages\sklearn\feature_selection\univariate_selection.py in fit(self, X, y)
    339 返回 self。
    340 “””
    –> 341 X, y = check_X_y(X, y, [‘csr’, ‘csc’], multi_output=True)
    342
    343 如果不可调用 self.score_func

    ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    571 X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,
    572 ensure_2d, allow_nd, ensure_min_samples,
    –> 573 ensure_min_features, warn_on_dtype, estimator)
    574 如果 multi_output
    575 y = check_array(y, ‘csr’, force_all_finite=True, ensure_2d=False,

    ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431 force_all_finite)
    432 其他
    –> 433 array = np.array(array, dtype=dtype, order=order, copy=copy)
    434
    435 如果 ensure_2d

    ValueError: 无法将字符串转换为浮点数: ‘no’
    你能在这方面指导我吗

    • Jason Brownlee 2017年11月17日上午9:19 #

      您可能需要使用标签编码器和独热编码器将字符串数据转换为数字。

  43. Vinod P 2017年11月17日上午12:19 #

    import numpy as np
    from pandas import read_csv
    来自 sklearn.feature_selection 导入 RFE
    from sklearn.linear_model import LogisticRegression
    # 加载数据
    数据 = read_csv(‘C:\\Users\\abc\\Downloads\\xyz\\api.csv’,names = [‘org.apache.http.impl.client.DefaultHttpClient.execute’,’org.apache.http.impl.client.DefaultHttpClient.’,’java.net.URLConnection.getInputStream’,’java.net.URLConnection.connect’,’java.net.URL.openStream’,’java.net.URL.openConnection’,’java.net.URL.getContent’,’java.net.Socket.’,’java.net.ServerSocket.bind’,’java.net.ServerSocket.’,’java.net.HttpURLConnection.connect’,’java.net.DatagramSocket.’,’android.widget.VideoView.stopPlayback’,’android.widget.VideoView.start’,’android.widget.VideoView.setVideoURI’,’android.widget.VideoView.setVideoPath’,’android.widget.VideoView.pause’,’android.text.format.DateUtils.formatDateTime’,’android.text.format.DateFormat.getTimeFormat’,’android.text.format.DateFormat.getDateFormat’,’android.telephony.TelephonyManager.listen’,’android.telephony.TelephonyManager.getSubscriberId’,’android.telephony.TelephonyManager.getSimSerialNumber’,’android.telephony.TelephonyManager.getSimOperator’,’android.telephony.TelephonyManager.getLine1Number’,’android.telephony.SmsManager.sendTextMessage’,’android.speech.tts.TextToSpeech.’,’android.provider.Settings$System.getString’,’android.provider.Settings$System.getInt’,’android.provider.Settings$System.getConfiguration’,’android.provider.Settings$Secure.getString’,’android.provider.Settings$Secure.getInt’,’android.os.Vibrator.vibrate’,’android.os.Vibrator.cancel’,’android.os.PowerManager$WakeLock.release’,’android.os.PowerManager$WakeLock.acquire’,’android.net.wifi.WifiManager.setWifiEnabled’,’android.net.wifi.WifiManager.isWifiEnabled’,’android.net.wifi.WifiManager.getWifiState’,’android.net.wifi.WifiManager.getScanResults’,’android.net.wifi.WifiManager.getConnectionInfo’,’android.media.RingtoneManager.getRingtone’,’android.media.Ringtone.play’,’android.media.MediaRecorder.setAudioSource’,’android.media.MediaPlayer.stop’,’android.media.MediaPlayer.start’,’android.media.MediaPlayer.setDataSource’,’android.media.MediaPlayer.reset’,’android.media.MediaPlayer.release’,’android.media.MediaPlayer.prepare’,’android.media.MediaPlayer.pause’,’android.media.MediaPlayer.create’,’android.media.AudioRecord.’,’android.location.LocationManager.requestLocationUpdates’,’android.location.LocationManager.removeUpdates’,’android.location.LocationManager.getProviders’,’android.location.LocationManager.getLastKnownLocation’,’android.location.LocationManager.getBestProvider’,’android.hardware.Camera.open’,’android.bluetooth.BluetoothAdapter.getAddress’,’android.bluetooth.BluetoothAdapter.enable’,’android.bluetooth.BluetoothAdapter.disable’,’android.app.WallpaperManager.setBitmap’,’android.app.KeyguardManage$KeyguardLock.reenableKeyguar’,’android.app.KeyguardManager$KeyguardLock.disableKeyguard’,’android.app.ActivityManager.killBackgroundProcesses’,’android.app.ActivityManager.getRunningTasks’,’android.app.ActivityManager.getRecentTasks’,’android.accounts.AccountManager.getAccountsByType’,’android.accounts.AccountManager.getAccounts’,’Class’])

    dataframe = read_csv(url, names=names)
    array = dataframe.values
    X = array[:,0:70]
    Y = array[:,70]
    # 特征提取
    model = LogisticRegression()
    rfe = RFE(model, 3)
    fit = rfe.fit(X, Y)
    #print(“Num Features: %d”) % fit.n_features_
    #print(“Selected Features: %s”) % fit.support_
    #print(“Feature Ranking: %s”) % fit.ranking_

    —————————————————————————————————————–

    我得到以下错误
    ValueError 回溯 (最近一次调用)
    in ()
    6 模型 = LogisticRegression()
    7 rfe = RFE(模型, 3)
    —-> 8 fit = rfe.fit(X, Y)
    9 print(“特征数量: %d”) % fit.n_features_
    10 print(“已选择特征: %s”) % fit.support_

    • Jason Brownlee 2017年11月17日上午9:26 #

      也许可以尝试将您的代码发布到 stackoverflow?

  44. Vinod P 2017年11月17日上午12:29 #

    您能否发布一段代码,首先使用任何特征选择方法选择相关特征,然后使用相关特征构建分类模型?

  45. Arjun 2017年12月13日上午4:45 #

    嗨,Jason,
    感谢您的内容,非常有帮助。

    您能否说明上述方法是否也适用于回归模型?

    • Jason Brownlee 2017年12月13日上午5:44 #

      也许吧,我手头不确定。尝试一下,让我知道你的进展。

      • Danilo 2017年12月25日上午1:36 #

        嗨,Jason,

        我刚和 Arjun 遇到同样的问题,我尝试了一个回归问题,但两种方法都无法解决。

  46. Zee Gola 2018年1月29日下午2:30 #

    嗨,Jason!您能进一步解释一下向量在 separateByClass 方法中的作用吗?

  47. Anas 2018年1月29日晚上8:57 #

    嗨,Jason,

    感谢您的帖子,它非常有用。

    我有一个回归问题,一个输出变量 y (0<=y<=100) 和 6 个输入特征(我认为它们是不相关的)。
    观测值(样本)的数量是 36980。
    我使用随机森林算法来拟合预测模型。
    获得的平均绝对误差约为 7。

    在这种情况下,您建议我进行特征选择吗?
    换句话说,从哪个特征数量开始,建议进行特征选择?

    恭喜。

    • Jason Brownlee 2018年1月30日上午9:50 #

      尝试一系列方法,从选定的特征构建模型,看看这些模型是否优于使用所有特征的模型。

  48. Joseph 2018年2月18日下午2:00 #

    你好 Jason,
    首先感谢分享。
    我有一个关于四种自动特征选择器和特征大小的问题。我注意到您使用了相同的数据集。Pima 数据集中,除了名为“pedi”的特征外,所有特征的大小都相当。

    如果特征的大小彼此相差几个数量级,您是否需要进行任何类型的缩放?例如,如果假设一个特征,比如说“tam”的大小是 656,000,而另一个名为“test”的特征的值在 100 左右。这会影响您选择哪个自动选择器,或者您是否需要进行任何额外的预处理?

    • Jason Brownlee 2018年2月19日上午9:03 #

      特征的尺度会影响特征选择方法,这真的取决于方法。

      如果您有疑问,请考虑事先对数据进行归一化。

      • Eric Williamson 2018年3月29日下午3:30 #

        特征缩放应包含在示例中。

        Pima Indians 糖尿病发病数据集包含尺度差异很大的特征。本文代码生成的排名受此影响,因此不准确。

  49. Joseph 2018年2月18日下午3:34 #

    你好 Jason,
    还有一个问题
    我注意到当您使用三个特征选择器:单变量选择、特征重要性和 RFE 时,您会得到三个重要特征的不同结果。

    1. 当使用 k=3 卡方检验的单变量时,您会得到
    plas、test 和 age 作为三个重要特征。(葡萄糖耐量测试、胰岛素测试、年龄)

    2. 当使用 ExtraTreesClassifier 进行特征重要性时
    分数表明三个重要特征是 plas、mass 和 age。葡萄糖耐量测试、体重(BMI)和年龄)

    3. 当您使用 RFE 时
    RFE 选择的前 3 个特征是 preg、mass 和 pedi。怀孕次数、体重(BMI)和糖尿病家系测试。

    根据您的以下文章
    https://machinelearning.org.cn/an-introduction-to-feature-selection/

    单变量是过滤方法,我相信 RFE 和特征重要性都是包装器方法。
    所有三个选择器都列出了三个重要特征。我们可以说过滤方法只是为了过滤大量特征而不是最可靠的吗?但是,其他两种方法没有相同的前三个特征?有些方法比其他方法更可靠吗?还是这取决于领域知识?

    • Jason Brownlee 2018年2月19日上午9:04 #

      不同的方法将采取不同的数据“视图”。

      没有“最佳”视图。我的建议是尝试从数据的不同视图构建模型,看看哪个能带来更好的技能。甚至可以考虑将从数据的不同视图创建的模型组合起来。

  50. Ranbeer 2018年2月28日晚上7:42 #

    嗨,Jason,

    我是你的粉丝。你的文章很棒。关于特征选择的两个问题

    1. 你不应该先将分类特征转换为“分类”吗?
    2. 我们不必对数字特征进行归一化吗

    在进行 PCA 或特征选择之前?在我的情况下,它将具有最大值的特征视为重要特征。
    而且,并非所有方法都产生相同的结果。

    有什么想法?

    祝好,
    Ranbeer

    • Jason Brownlee 2018年3月1日上午6:12 #

      是的,Python 要求所有特征都是数值型的。有时重新缩放输入数据对模型有益。

  51. itisha 2018年3月5日上午7:41 #

    嗨,杰森先生,
    您的文章非常有帮助。
    我有一个关于 gridserachcv() 的困惑。
    我正在进行情感分析,并从数据集中创建了不同的特征组。
    我正在使用线性 SVC 并想进行网格搜索以找到超参数 C 值。在获得 C 值后,拟合训练数据上的模型,然后在测试数据上进行测试。但是我也想逐个检查不同特征组的模型性能,那么我需要为每个特征组一次又一次地进行网格搜索吗?

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

      也许吧,这真的取决于模型对您的数据的敏感程度。

      此外,如此多的网格搜索可能会导致一些过拟合,请小心。

  52. Yaseen 2018年3月10日上午3:16 #

    感谢Jason的耐心解释。
    最后一部分“# 使用 Extra Trees Classifier 进行特征重要性”。
    看起来如果我们考虑更高的分数,结果会不同?

  53. Aouedi Ons 2018年3月12日上午6:57 #


    先生,为什么您只使用 8 个示例,而您的数据集包含很多示例?

    • Jason Brownlee 2018年3月12日下午2:23 #

      抱歉,我不明白。也许您可以尝试重新措辞您的问题?

  54. Unni Mana 2018年4月5日上午1:30 #

    嗨,Jason,

    你的文章太棒了。读完这篇文章后,这在我脑海中挥之不去。

    在这四种建议的技术中,我应该选择哪一种?

    为什么输出会因为不同的特征选择而不同?

    谢谢

    • Jason Brownlee 2018年4月5日上午6:12 #

      全部尝试一下,看看哪个模型能带来最大的技能。

  55. Bhanupraksh Vattikuti 2018年4月10日下午6:09 #

    亲爱的 Jason,

    感谢这篇文章。
    当我尝试使用特征重要性时,我遇到了以下错误。
    请帮我解决这个问题。
    文件“C:/Users/bhanu/PycharmProjects/untitled3/test_cluster1.py”,第 14 行,在
    model.fit(X, Y)
    文件“C:\Users\bhanu\PycharmProjects\untitled3\venv\lib\site-packages\sklearn\ensemble\forest.py”,第 247 行,在 fit
    X = check_array(X, accept_sparse=”csc”, dtype=DTYPE)
    文件“C:\Users\bhanu\PycharmProjects\untitled3\venv\lib\site-packages\sklearn\utils\validation.py”,第 433 行,在 check_array
    array = np.array(array, dtype=dtype, order=order, copy=copy)
    ValueError: 无法将字符串转换为浮点数: ‘neptune’

    • Jason Brownlee 2018年4月11日上午6:32 #

      也许您正在运行不同的数据集?“neptune”从何而来?

  56. Dhanunjaya Mitta 2018年4月16日下午5:12 #

    我能获得更多关于单变量特征选择的信息吗???我的意思是更多的模型,如 ReliefF、相关性等,

  57. Elizabeth 2018年5月1日上午5:21 #

    嗨,Jason,

    感谢您的帖子,它非常有用。

    我有一个单类分类问题,我想从数据集中选择特征,但是,我发现已实现的方法需要指定目标,但我没有目标,因为训练数据集的类对于所有样本都是相同的。

    我在哪里可以找到用于单类分类的特征选择方法?

    谢谢!

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

      如果所有类别都相同,那么您肯定不需要预测它?

  58. Elizabeth 2018年5月1日上午6:10 #

    嗯,我的数据集与异常检测有关。因此,训练集只包含一个类的对象(正常条件),而测试集中的文件则结合了正常条件下的样本和异常条件下的数据。

    我理解的是,在特征选择技术中,标签信息经常用于指导寻找良好的特征子集,但在单类分类问题中,所有训练数据都只属于一个类。

    因此,我正在寻找单类分类的特征选择实现。

  59. Ann 2018年5月2日晚上10:57 #

    感谢您的帖子,对初学者非常有帮助。
    我有一个问题,我使用 Extra Trees Classifier 的特征重要性,如何
    在这个样本中显示特征名称(plas, age, mass, …等)。

    例如
    特征排名
    1. plas (0.11070069)
    2. age (0.2213717)
    3. mass(0.08824115)
    …….

    谢谢你的帮助。

    ……..

    • Jason Brownlee 2018年5月3日上午6:34 #

      我想你可能需要写一些自定义代码。

      • Ronald Martis 2019年5月15日上午5:10 #

        使用以下方法
        print(list(zip(names, model.feature_importances_)))
        您得到
        [(‘preg’, 0.11289758476179099), (‘plas’, 0.23098096297414206), (‘pres’, 0.09989914623444449), (‘skin’, 0.08008405837625963), (‘test’, 0.07442780491152233), (‘mass’, 0.14140399156908312), (‘pedi’, 0.11808706393665534), (‘age’, 0.142219387236102)]

  60. Yanyun Zou 2018年5月8日下午1:13 #

    嗨,Jason,
    我尝试了特征重要性方法,但所有变量的值都在 0.05 以上,这是否意味着所有变量与预测值几乎没有关系?

    • Jason Brownlee 2018年5月8日下午2:56 #

      也许可以尝试其他特征选择方法,从每组特征构建模型,并加强那些能产生最佳技能模型的特征视图。

  61. Saeed Ullah 2018年6月7日上午5:01 #

    你好 Jason,
    感谢您的精彩文章,我有一个关于使用主成分分析(PCA)、ISOMAP 或任何其他降维技术进行特征降维的问题,我们如何确定特征/维度的数量最适合我们的数值数据分类算法。

    • Jason Brownlee 2018年6月7日上午6:34 #

      尝试多种配置,为每种配置构建和评估一个模型,使用能产生最佳模型技能分数的配置。

  62. Musthafa 2018年6月27日下午6:23 #

    你好,
    当我遇到多个分类特征(如邮政编码、类别等)时该怎么办
    我应该对它们进行独热编码吗

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

      有些像邮政编码,你可以使用词嵌入。

      其他的像类别可以进行独热编码。

  63. Aymen 2018年7月21日上午3:54 #

    你好,

    当我们使用单变量过滤技术,如皮尔逊相关、互信息等时。我们需要在训练集上而不是整个数据集上应用过滤技术吗?

  64. william 2018年7月26日晚上7:41 #

    杰森——我正在研究几种特征选择算法,从大约 100 个左右的输入变量列表中筛选出我正在尝试预测的连续输出变量。这些示例很有帮助,但我不确定它们是否适用于我正在尝试开发一些模型的特定回归问题……而且由于我有一个回归问题,您能否为连续输出变量预测提出任何特征选择方法?

    也就是说,我已经对我的数据集进行了归一化,该数据集包含 100 多个分类、序数、区间和二元变量,以预测连续输出变量……有什么建议吗?

    提前感谢!

    • Jason Brownlee 2018年7月27日上午5:52 #

      RFE 适用于分类或回归。这是一个很好的起点。

      此外,输入与输出的相关性是另一个极好的起点。

  65. meenal jain 2018年8月2日晚上8:29 #

    我读了你的帖子,非常有成效。

    我可以使用分类变量和连续变量之间的线性相关系数进行特征选择吗?

    或者请为这种类型的数据集(ISCX -2012)建议其他方法,其中目标类别是分类的,所有其他属性都是连续的。

  66. Folmer 2018年8月3日晚上11:45 #

    Jason,
    我一直在想,在特征选择步骤中使用的机器学习工具的参数是否重要。因为我目前为止看到的大多数网站在此阶段都只使用默认参数配置。

    我知道添加网格搜索会产生以下后果
    -它大大增加了计算时间。(在使用包装器(递归特征消除)时确实如此)
    -很难确定哪个能产生更好的结果,尤其是在最终模型是使用不同的机器学习工具构建时。

    但仍然值得研究并使用特征选择机器学习工具的多个参数配置吗?

    我的情况
    -一个具有约 20 个特征的(非线性)数据集。
    -计划在特征选择阶段使用 XGBooster(一篇类似数据集的论文指出这足够了)。
    -对于模型构建,我计划使用 MLP NN,并使用网格搜索来优化参数。

    提前感谢!

    • Jason Brownlee 2018年8月4日上午6:12 #

      是的,您可以调整它们。

      一般来说,我建议对输入生成许多不同的“视图”,为每个视图拟合一个模型,并比较结果模型的性能。甚至可以将它们组合起来。

      最有可能的是,您的​​问题没有一个最佳特征集。有许多具有不同技能/能力。找到一个最适合您需求的集合或集合的集成。

  67. Sa 2018年8月13日晚上9:14 #

    嗨 Jason

    我需要通过指定最佳窗口大小和帧大小来对行选择进行特征工程,您是否有任何在线示例?

    谢谢

  68. Yvonne 2018年8月24日上午12:00 #

    嗨 Jason

    我是 Python 和 scikit learn 的初学者。我目前正在尝试运行 SVM 算法,根据功能连接 EEG 数据对患者和健康对照进行分类。我正在使用 rfcv 从大约 20,000 个特征中选择最佳特征。我得到了 32 个选定特征和 70% 的准确率。接下来我想尝试运行排列统计来检查我的结果是否显着。

    我的问题:我必须对 32 个选定特征运行排列统计吗?还是我必须为此目的包含 20,000 个特征。

    您可以在下面看到我的代码。为了简化我的问题,我将代码减少到 5 个特征,但其余部分是相同的。如果您能提供帮助,我将不胜感激,因为我找不到任何关于此主题的帖子。

    此致 Yolanda

    homeDir = ‘F:\Analysen\Prediction_TreatmentOutcome\PyCharmProject_TreatmentOutcome’ # 连接矩阵的位置

    # #############################################################################
    # 导入分类所需的包
    import numpy as np
    import os

    import matplotlib.pyplot as plt
    从 sklearn.datasets 导入 make_classification
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import cross_val_score
    从 sklearn.model_selection 导入 cross_validate
    从 sklearn.model_selection 导入 StratifiedKFold
    从 sklearn.feature_selection 导入 RFECV
    从 sklearn 导入 svm

    从 sklearn.pipeline 导入 make_pipeline, Pipeline
    from sklearn import preprocessing

    从 sklearn.model_selection 导入 permutation_test_score

    类 PipelineRFE(Pipeline)

    def fit(self, X, y=None, **fit_params)
    super(PipelineRFE, self).fit(X, y, **fit_params)
    self.coef_ = self.steps[-1][-1].coef_
    返回 self

    clf = PipelineRFE(
    [
    (‘std_scaler’, preprocessing.StandardScaler()), #z-变换
    (“svm”, svm.SVC(kernel = ‘linear’, C = 1)) #估计器
    ]
    )

    # #############################################################################
    # 加载和准备数据集

    nQuest = 5 # 问卷数量

    samples = np.loadtxt(‘FBDaten_T1.txt’)

    # 导入目标(基于组变量在 R 中创建)

    targets = np.genfromtxt(r’F:\Analysen\Prediction_TreatmentOutcome\PyCharmProject_TreatmentOutcome\Targets_CL_fbDaten.txt’, dtype= str)

    # #############################################################################
    # 运行分类

    skf = StratifiedKFold(n_splits = 5) # 通过保留每个类别的样本百分比来创建折叠。

    # rfecv
    rfecv = RFECV(estimator = clf, step = 1, cv = skf, scoring = ‘accuracy’)
    rfecv.fit(samples, targets)

    # 通过交叉验证选择的特征数量。
    print(“最佳特征数量 : %d” % rfecv.n_features_)

    # 绘制特征数量与交叉验证分数的关系图
    plt.figure()
    plt.xlabel(“特征子集”)
    plt.ylabel(“交叉验证分数(正确分类数量)”)
    plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
    plt.show()

    #所选特征的掩码
    rfecv.support_
    print(“所选特征掩码 : %s” % rfecv.support_)

    #在布尔向量中查找真值的索引
    index_features = np.where(rfecv.support_)[0]
    print(index_features)

    #查找索引值
    reduced_features = samples[:, index_features]
    print(reduced_features)

    ## 对降维特征进行置换检验

    score, permutation_scores, pvalue = permutation_test_score(
    clf, reduced_features, targets, scoring=”accuracy”, cv=skf, n_permutations=100, n_jobs=1)

    print(“分类分数 %s (p值 : %s)” % (score, pvalue))

  69. Rafi 2018年8月29日上午7:00 #

    非常感谢您提供这个有用的教程。如果您能详细说明每种方法的优缺点,那就太好了。
    提前感谢。

  70. Mohammed 2018年8月30日晚上8:42 #

    我想问一下特征提取过程,停止训练和提取特征的标准是什么?它是否取决于模型的测试精度?换句话说,训练一个 epoch 或训练 100 个 epoch 后提取特征有什么区别?什么是最好的特征?也许我的问题很愚蠢,但我需要答案。

    • Jason Brownlee 2018年8月31日上午8:10 #

      您所说的提取特征是什么意思?在这里,我们讨论的是特征选择?

  71. Mohammed 2018年8月30日晚上8:51 #

    我询问特征提取过程,例如,如果我训练 CNN,应该在多少个 epoch 后停止训练并提取特征?换句话说,特征提取是否取决于训练模型的测试精度?如果我构建模型(任何深度学习方法)只是为了提取特征,我可以运行一个 epoch 并提取特征吗?

    • Jason Brownlee 2018年8月31日上午8:10 #

      我明白了。

      您希望使用来自熟练模型的特征。也许是相同的任务,也许是重建任务(例如自编码器)。

      • Mohammed 2018年8月31日晚上9:32 #

        我不明白答案

  72. munaza 2018年8月30日晚上9:55 #

    你好先生,

    非常感谢这项伟大的工作。

    您能否解释一下 Univariate Selection 中 plas、test、mass 和 age 的最高分数是如何获得的?我不明白您的意思。

    • Jason Brownlee 2018年8月31日上午8:11 #

      你到底遇到了什么问题?

      • munaza 2018年8月31日下午2:23 #

        谢谢您的回复,先生……

        实际上,我当时无法理解 chi^2 用于特征选择的输出。现在问题已经解决了。

        非常感谢。

  73. Gabriel Joshua Migue 2018年9月4日晚上10:33 #

    哪种特征选择技术最好?我想知道为什么我多次尝试时排名总是会改变?

  74. Paul 2018年9月15日晚上8:33 #

    你好,

    在您的特征重要性示例中,您使用 ExtraTreesClassifier 作为集成分类器。
    在 sci-kit learn 中,bootstrap 样本的默认值为 false。

    这难道不与寻找特征重要性相矛盾吗?例如,它可能会只在一个特征上构建树,因此重要性会很高,但不能代表整个数据集。

    谢谢
    保罗

    • Jason Brownlee 2018年9月16日上午5:59 #

      树将对特征进行抽样,并且总体而言,使用最多的特征将是“重要的”。

      这只意味着这些特征对于构建树很重要,您可以随意解释。

  75. Abdur Rehmna 2018年9月21日上午4:38 #

    嗨,Jason,

    我有一个数据集,其中包含分类特征和数值特征。我应该在对分类特征进行独热编码之前进行特征选择,还是之后?

    • Jason Brownlee 2018年9月21日上午6:34 #

      当然。这是一个廉价的操作(简单),并且对性能有很大的影响。

  76. Dean 2018年9月23日上午7:41 #

    嗨 Jason

    我没有阅读所有评论,所以不知道是否有人提到过这个。

    https://hub.packtpub.com/4-ways-implement-feature-selection-python-machine-learning/

    它与您在这里的帖子相同(可能经过编辑),并且正在作为一本书的一部分进行销售。我想我应该让您知道。

  77. zhyar 2018年9月30日上午12:31 #

    嗨 Jason

    我有一个包含两个类的数据集。在特征选择中,我想为每个类指定重要的特征。例如,如果我选择了 15 个重要特征,确定哪个属性对哪个类更重要。请帮帮我

    • Jason Brownlee 2018年9月30日上午6:03 #

      是的,这就是特征选择将为您做的事情。

  78. Thiago Batista Soares 2018年10月1日上午6:05 #

    嗨 Jason

    首先,祝贺您的帖子和书籍。
    我正在阅读您的《Python 机器学习精通》一书,第 8 章是关于这个主题的,我有一个疑问,我应该使用这些技术处理原始数据还是应该先对数据进行归一化?我测试了两种情况,但结果不同,例如(第一种情况,列 A 和 B 很重要,但第二种情况,列 C 和 D 很重要)

    非常感谢。

    • Jason Brownlee 2018年10月1日上午6:33 #

      谢谢。

      从每个模型构建模型,并采用在保留数据集上表现更好的方法。

  79. isuru dilantha 2018年10月24日下午1:54 #

    嗨 Jason,

    我正在做一个项目,利用动物的过去数据(如位置、日期和时间)预测它们的下一步行动。我可以使用哪些模型来预测它们的下一个位置?

  80. Hannes 2018年11月7日上午12:02 #

    你好,

    非常感谢您为向大众解释机器学习所做的辛勤工作。

    我目前正在尝试优化我的 Kaggle-kernel,并且我想使用特征选择。因为我的源数据包含 NaN,所以我被迫在特征选择之前使用插补器。

    不幸的是,这实际上导致 MAE 比没有特征选择时更差。

    您有什么关于如何在源数据中存在 NaN 的情况下实现特征选择的建议吗?

    • Jason Brownlee 2018年11月7日上午6:07 #

      也许您可以从用于训练特征选择器的数据中删除带有 NaN 的行?

  81. Supr 2018年11月28日上午7:24 #

    嗨,Jason,
    不知何故,你的博客几乎总是有我需要的东西。我能做的最少就是感谢你,并祝你一切顺利!

  82. PC 2018年12月13日下午1:06 #

    嗨,Jason,
    你的工作太棒了。访问你的网站后对机器学习产生了兴趣。谢谢你,继续你的好工作。

    我尝试在另一个数据集中使用 RFE,在该数据集中我使用 Label Encoder 将所有分类值转换为数值,但仍然出现以下错误

    —————————————————————————
    ValueError 回溯 (最近一次调用)
    in ()
    14 model = LogisticRegression()
    15 rfe = RFE(model, 5)
    —> 16 fit = rfe.fit(X, Y)
    17 print(“特征数量:%d” % fit.n_features_)
    18 print(“选择的特征:%s” % fit.support_)

    ~\Anaconda3\lib\site-packages\sklearn\feature_selection\rfe.py in fit(self, X, y)
    132 目标值。
    133 “””
    –> 134 return self._fit(X, y)
    135
    136 def _fit(self, X, y, step_score=None)

    ~\Anaconda3\lib\site-packages\sklearn\feature_selection\rfe.py in _fit(self, X, y, step_score)
    140 # self.scores_ 将在通过 fit 调用 _fit 时不计算
    141
    –> 142 X, y = check_X_y(X, y, “csc”)
    143 # 初始化
    144 n_features = X.shape[1]

    ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    571 X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,
    572 ensure_2d, allow_nd, ensure_min_samples,
    –> 573 ensure_min_features, warn_on_dtype, estimator)
    574 如果 multi_output
    575 y = check_array(y, ‘csr’, force_all_finite=True, ensure_2d=False,

    ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431 force_all_finite)
    432 其他
    –> 433 array = np.array(array, dtype=dtype, order=order, copy=copy)
    434
    435 如果 ensure_2d

    ValueError: 无法将字符串转换为浮点数:‘StudentAbsenceDays’

    我急需此问题的解决方案。请帮帮我。

    • Jason Brownlee 2018年12月13日 下午1:49 #

      这表明你的数据文件可能仍然包含字符串值。

      也许再检查一下你加载的数据?

      • PC 2018年12月13日 下午4:27 #

        我已检查该列的数据类型,如下所示,它是 int64 类型

        输入:
        mod_StudentData[‘StudentAbsenceDays’].dtype

        输出:
        dtype(‘int64’)

  83. Oswaldo Castro 2018年12月15日 上午4:54 #

    你好 Jason……
    一如既往的精彩文章。
    我是机器学习新手,这篇文章让我有些疑惑。
    SelectKBest、RFE 和 ExtraTreesClassifier 正在执行特征提取,而 PCA 正在执行特征提取。
    我这样理解对吗?
    谢谢 Jason

  84. afer 2018年12月24日 上午10:49 #

    嗨,Jason,
    首先,教程很棒!
    我的问题是,我有一个大约3万个样本的数据集,每个样本有大约150个特征,用于二元分类问题。我的计划是使用3折交叉验证(每个折叠,数据被分割两次,一次用于RFE,另一次用于网格搜索)在网格搜索(选择特征并在同一管道中调整参数)上执行RFE,这在整个数据集上完成。

    现在,在确定了最佳特征和参数之后,使用相同的数据集,我将其分为训练/验证/测试集,并使用选定的特征和参数训练模型以获得其准确性(当然是最佳模型的准确性,并且在测试集上)。

    这样做正确吗?我采用这种方法的原因是,特征/参数选择是一个与实际模型拟合(使用选定的特征和参数)完全不同的过程,这意味着实际模型拟合实际上不会知道特征/参数选择在整个数据集上学到了什么,因此重新使用整个数据集是可以的。

    如果不是这样,您有什么建议?也许将整个数据集分为特征/参数选择集和实际模型拟合集(50:50),其中在第一个50%上确定了最佳特征和参数后,将这些特征用于剩余的50%数据来训练模型(这50%进一步分为训练/验证/测试)。

    • Jason Brownlee 2018年12月25日 上午7:17 #

      我建议在每次交叉验证折叠或预先使用单独的数据集进行特征选择。

      • Aaron Carl Fernandez 2019年1月3日 下午2:11 #

        感谢 Jason 博士的回答!另外,网格选择 + RFE 过程会输出所获得的最佳模型(具有最佳特征集和参数)的准确率/F1 分数,这可以被视为模型性能的最终分数吗?还是您真的需要构建另一个模型(具有最佳特征集和参数的最终模型)来获取模型性能的实际分数?

        • Jason Brownlee 2019年1月4日 上午6:25 #

          我建议构建一个最终模型用于进行预测。测试工具的分数可能是一个合适的模型对未见数据性能的估计——这完全取决于你的项目,关于什么是令人满意的。

          • Aaron Carl Fernandez 2019年1月8日 上午1:52 #

            谢谢 Jason 博士。最后一个问题 :),我可以使用卡方统计检验(在单变量选择部分)来反映每个特征的 p 值或统计显著性吗?比方说,我将在我的数据中显示每个特征的修剪平均值,卡方 p 值是否证实了修剪平均值的统计显著性?

          • Jason Brownlee 2019年1月8日 上午6:52 #

            不,它只是评论分类变量之间的关系。

  85. Aaron Carl Fernandez 2019年1月10日 上午12:40 #

    谢谢 Jason 博士!最后一个问题,我保证 :) 我认为在构建我的最终模型时,在 3 折嵌套交叉验证的 RFE + GS 上修剪我的特征和参数,而在 10 折常规交叉验证上进行训练是没问题的。我在每个过程中使用了不同的数据集(我将原始数据集 50:50 分割,前半部分用于 RFE + GS,后半部分用于构建我的最终模型)。原因是嵌套交叉验证的 RFE + GS 计算成本太高,并且我希望以更精细的粒度训练我的最终模型,因此使用了常规的 10 折交叉验证。

    非常感谢!

    • Jason Brownlee 2019年1月10日 上午7:52 #

      我无法评论您的测试方法是否可行,您必须从稳定性/方差方面评估它,如果您觉得结果可靠,就可以使用它。

      • Aaron Carl Fernandez 2019年1月10日 晚上10:26 #

        非常感谢 Jason 博士

  86. Houssam 2019年2月4日 晚上11:03 #

    你好,Jason 博士;
    我想问您一个问题:我想在类似于 Pima Indians 糖尿病发病数据集的数据集上应用 PSO 算法,我很困扰,我该怎么做

    • Jason Brownlee 2019年2月5日 上午8:23 #

      抱歉,我没有使用全局优化算法进行特征选择的示例——我不确定这些技术是否相对有效。

  87. maedeh 2019年2月12日 下午5:42 #

    你好,
    我是初学者,我的问题可能不对。我们可以在自动编码器中使用这些特征选择方法吗?例如,我们的网络输入和输出是图像,比如 mnist?谢谢

    • Jason Brownlee 2019年2月13日 上午7:54 #

      并非如此,你将对像素值进行特征选择。

      自动编码器正在为你做这方面的工作。

  88. Rahul Ramaswamy 2019年2月20日 晚上7:36 #

    嗨,Jason,
    您提到的所有技术在存在目标变量(Y 或您案例中的第 8 列)时都完美运行。我正在处理的数据集使用无监督学习算法,因此没有任何目标/因变量。在这种情况下特征选择有效吗?如果有效,我该如何操作。

    • Jason Brownlee 2019年2月21日 上午7:54 #

      它可以,但你可能需要使用一种基于代理度量(如信息或相关性等)来选择特征的方法。

      抱歉,我没有一个可行的例子。

  89. Selene 2019年3月4日 上午9:19 #

    你好 Jason,
    您的博客以及您解释事物的方式都非常棒!我对特征选择有一个疑问,对于实际应用,某些特征选择技术的 fit 方法是只应用于训练集还是应用于整个数据集(训练 + 测试)?
    非常感谢!

  90. Keerti Bafna 2019年3月7日 上午5:36 #

    你好 Jason,

    首先,感谢您提供如此信息丰富的文章。

    我需要使用过滤、封装和嵌入方法进行特征选择。计划是然后取每个选择过程分数的平均值,并选择前 10 个特征。

    我的计划是最初将数据分为训练集和保留集。然后,我计划对上述 3 种方法中的每一种都使用交叉验证,并且只使用训练数据(在每个折叠内部)。一旦我获得了前 10 个特征,我将只在保留集中使用它们并预测我的模型性能。

    您认为这种方法能给我一个稳定的模型吗?如果不能,我能改进/改变什么?

    提前感谢。

  91. Mohamed Saad 2019年3月10日 下午5:07 #

    嗨,Jason,
    感谢您的努力,
    我想问一下 RFE 中的特征提取

    我使用您提到的代码
    names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’]
    结果是
    [1 2 3 5 6 1 1 4]

    当我按照我提到的方式更改列名顺序时

    names = [‘pedi’,’preg’, ‘plas’, ‘pres’, ‘test’, ‘age’, ‘class’,’mass’,’skin’]
    我得到相同的输出
    [1 2 3 5 6 1 1 4]

    你能解释一下它是如何工作的吗?
    谢谢你

    • Jason Brownlee 2019年3月11日 上午6:48 #

      改变标签的顺序不会改变数据集中列的顺序。这就是你得到相同输出索引的原因。

  92. Mohamed Saad 2019年3月11日 上午11:35 #

    我尝试更改列的顺序以检查 RFE 排序的有效性。
    如果我想检查排序的有效性,您有什么建议?

    另外,我想问一下,当我尝试选择影响我模型的特征时,我应该包含数据集中的所有特征(数值和分类)还是只包含分类特征?

    谢谢你

    • Jason Brownlee 2019年3月11日 下午2:14 #

      我不确定是否需要这样做。

      不过,您必须更改数据本身中的列顺序,例如 NumPy 数组或从中加载的 CSV。

      在选择过程中包含哪些特征取决于特征选择方法的功能。

  93. Waqar 2019年4月3日 上午8:03 #

    由于这个警告,我无法获得输出

    “C:\Users\Waqar\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py:626: 警告:y 中最少人口的类别只有 1 个成员,这太少了。任何类别中的最小成员数不能小于 n_splits=5。”

    如果有人知道,请帮忙。

    • Jason Brownlee 2019年4月3日 下午4:11 #

      也许你可以使用更少的拆分或者使用更多的数据?

  94. Viva 2019年4月13日 下午6:39 #

    嗨,Jason,

    我正在阅读您关于使用 Python 进行机器学习精通的书,并且我正在讨论上面提到的相同主题,我看到您选择了卡方进行单变量方法的特征选择,我如何决定在不同测试(卡方、t 检验、ANOVA)之间进行选择。

  95. Viva 2019年4月15日 晚上7:15 #

    谢谢,下一步学习有很多东西要读 :)

  96. Upender Singh 2019年6月7日 下午6:23 #

    嗨,jason

    请告诉我如何在使用 SelectKBest 这个类的情况下选择最佳 k 值。

    • Jason Brownlee 2019年6月8日 上午6:49 #

      评估不同 k 值的模型,并选择能提供最熟练模型的 k 值。

  97. shruthi 2019年6月16日 下午4:09 #

    嗨,杰森,

    我想使用单变量选择方法。
    我正在构建一个线性回归模型,它有大约 46 个分类变量。
    如果我想知道用于构建模型的最佳分类特征,我需要将独热编码值发送给 fit 函数,对吗?并且 score_func 也应该是 chi2?

    test = SelectKBest(score_func=chi2, k=4)
    fit = test.fit(X, Y)

    在上述代码中,X 应该是所有分类变量的独热编码值,对吗?

    提前感谢

  98. Rushali Jaiswal 2019年6月18日 上午3:31 #

    你好,
    我有一个问题。
    您是在创建虚拟变量之前还是之后应用特征选择?

    提前感谢

  99. Ankit Ganeshpurkar 2019年6月23日 晚上8:37 #

    尊敬的先生,
    我正在使用“移除低方差特征”进行特征选择。我有 1452 个特征,代码返回 454 个特征,但没有特征标签,即列标题。现在我无法知道哪些特征已被接受。所以我的问题是“我如何保留输出中的列标题”?

    • Jason Brownlee 2019年6月24日 上午6:25 #

      特征选择方法通常选择列索引。一旦您拥有了列索引,您就可以将其应用于原始数据以获取每个所选列的标题。

  100. Bharat Bargujar 2019年6月26日 上午4:11 #

    嗨,Jason,

    卡方检验仅适用于分类数据。但在您的示例中,您正在使用连续特征。我不确定,SelectKBest 是否正在进行任何类型的分箱以将卡方应用于连续数据,请解释。我也有类似的带有连续特征和二元类的数据。在使用此方法之前,我希望确保。

    谢谢,
    巴拉特

  101. Senthilkumar 2019年7月5日 下午5:08 #

    嗨,Jason,

    如果我必须弄清楚哪种特征选择方法适用于我拥有的数据类型,(比如说)我必须选择一些对我的目标变量贡献很大的特征,目标变量和预测变量可以是连续的、分类的,或者连续和分类的。

    另外,我可以直接实施一种被认为适用于所有此类情况的最佳技术,还是尝试一些技术并得出结论。

    谢谢,等待您的回复。

  102. Senthilkumar 2019年7月9日 下午2:53 #

    谢谢你的回复

  103. Kutsal 2019年7月25日 晚上9:50 #

    嘿,Jason
    感谢您的精彩教程。我只是想知道卡方检验中分数是如何计算的?我的意思是,是否有任何数学公式可以得到这个分数?如果您知道,可以解释一下吗?

    提前感谢你

  104. Anushka 2019年8月23日 下午6:17 #

    你好 Jason,
    感谢您的 informative 帖子。

    我使用了 feature_selection 中的 GenericUnivariateSelect()。
    我有以下关于此的问题

    1. 它说对于 mode,我们有一些选项可供选择,即:“mode : {'percentile', 'k_best', 'fpr', 'fdr', 'fwe'} 特征选择模式。” 这种模式的 K_best 是否与 SelectKBest 函数相同,还是不同?如果不同,您能解释一下它是如何进行评分和提供 p 值吗?

    2. p 值在这个输出中有什么意义?我理解通常当我们执行统计检验时,我们更喜欢选择 p 值小于 0.05 的数据点。那么在选定特征的输出中,如果特征的 p 值大于 0.05,是否建议从列表中删除这些特征?还是 p 值不应考虑?

    谢谢!我将等待您的回复。

    • Jason Brownlee 2019年8月24日 上午7:46 #

      好问题,我不能立即回答。也许可以查阅 API 文档?

  105. Bardia 2019年9月2日 上午2:05 #

    嗨,Jason,
    感谢您的教程

    我的数据中有 NaN 值,我收到了“Input contains NaN, infinity or a value too large for dtype('float64')”错误。

    有没有办法转换包含 NaN 值的数据。就像 xgboost 分类器如何处理这些值一样?

    • Jason Brownlee 2019年9月2日 上午5:29 #

      是的,在处理之前用实际值替换 NaN 是个好主意,例如,也许用平均值或中位数。

  106. C Smith 2019年9月12日 上午3:13 #

    下午好,

    当我尝试递归特征消除的示例代码时,我收到以下消息

    Num Features: %d
    回溯(最近一次调用)
    文件“rfe.py”,第16行,在
    print("Num Features: %d") % fit.n_features_
    TypeError: 不支持的 % 操作数类型:'NoneType' 和 'int'

    当我运行主成分分析代码时,我得到类似的错误
    解释方差:%s
    回溯(最近一次调用)
    文件“pca.py”,第16行,在
    print(“解释方差: %s”) % fit.explained_variance_ratio_
    TypeError: 不支持的 % 操作数类型:'NoneType' 和 'float'

    这是在完全复制粘贴代码并确保所有空格都保留且所有库都已更新之后。我使用 Anaconda 发行版中包含的 Python 版本:3.6。如果您能提供任何帮助,我将不胜感激,因为我在 Stack Exchange 或其他地方没有找到太多信息。

    谢谢!

  107. C Smith 2019年9月13日 上午6:12 #

    按照“为什么教程中的代码对我不起作用”中的建议,我回到 StackOverflow 并完善了我的搜索。(*我之前错误地输入了 stack exchange。)

    这是我找到问题解决方案的链接:https://stackoverflow.com/questions/41788814/typeerror-unsupported-operand-types-for-nonetype-and-float

    这里编写的代码是
    print(“解释方差: %s”) % fit.explained_variance_ratio_

    我只需要这样做就能让它工作

    print((“解释方差:%s”) % fit.explained_variance_ratio_)

    这太简单了,我没看到。感谢您的帮助!

  108. Mehran 2019年9月24日 上午12:48 #

    Jason,好文章,我为我的数据集运行了它。当我要求 k=1 时,最好的分数在第 101 列中为 0.01。当我要求 k=4 最佳时,我得到
    第 58 列(分数 = 0.02)
    第 62 列(分数 = 0.001)
    第 73 列(分数 = 0.0001)
    第 101 列(分数 = 0.01)

    但当我要求 k=2 时,我得到

    第 73 列(分数 = 0.0001)
    第 101 列(分数 = 0.01)

    看起来 SelectKBest 已经选择了 n 个最佳特征,并从最后一列中交付了 k 个最佳特征。我说的对吗?还是发生了别的事情??

    • Jason Brownlee 2019年9月24日 上午7:48 #

      K-best 将选择按计算分数排序的 K 个最佳特征。

      • Mehran 2019年9月24日 晚上10:23 #

        因此,应该给出第 58 列和第 101 列,而不是第 73 列和第 101 列。

        • Jason Brownlee 2019年9月25日 上午6:00 #

          如果您使用 SelectKBest,它将为您选择得分最高的特征。

  109. Shipika 2019年9月26日 下午3:52 #

    嗨,Jason,
    这也适用于分类数据吗?
    如果不行,请推荐其他算法。
    谢谢

    • Jason Brownlee 2019年9月27日 上午7:45 #

      好问题。

      卡方和互信息函数可用于具有分类输入和类别标签目标的特征选择。

  110. Hiral 2019年10月1日 晚上8:00 #

    你好,

    在您的一篇文章中,您提到特征选择方法是

    1. 过滤方法
    2. 封装方法
    3. 嵌入方法

    在这篇文章中,您说特征选择方法是
    单变量选择、特征重要性等

    这些方法之间有什么区别?
    为什么同一个主题有两篇不同的帖子?

    • Jason Brownlee 2019年10月2日 上午7:56 #

      主要有两种类型是过滤和封装,或许还有嵌入——但这可能是一种特征工程方法。

      另一种思考方式是方法中使用的变量数量——单变量或多变量。

      特征重要性是过滤方法的输入。

  111. Jianhua 2019年10月16日 上午1:47 #

    嗨,Jason

    REFCV 只能用于单个 Y 输出数据吗?如果我有 2 个输出回归数据,我如何使用 REFCV 选择特征?

    谢谢你

    • Jason Brownlee 2019年10月16日 上午8:09 #

      是的。

      好问题。我认为需要一些自定义的东西——也许可以尝试一下。

  112. saeed 2019年10月31日 下午3:45 #

    先生您好,我想通过使用基尼不纯度指数对特征进行排名来删除所有不相关的特征,然后选择具有非零 MDI 的预测变量。请帮帮我

  113. Klem 2019年11月6日 上午2:45 #

    嗨,Jason,

    在对逻辑回归进行 RFE 特征选择以寻找最佳特征时,我得到了与对单个特征拟合模型并通过最小化 AIC 找到最佳特征不同的结果。

    例如:
    RFE 发现特征 A,其
    AIC:2.4296372383358187,观察到并预测:0,未观察到并预测:0,未预测并观察到:92,未预测并未观察到:1498
    最小化 AIC 得到特征 B,其
    AIC 2.337092886023634,观察到并预测:3,未观察到并预测:13,未预测并观察到:89,未预测并未观察到:1485

    我假设 RFE 使用另一个分数来找到最佳特征。我曾想过应用 RFE 来识别不同数量特征 [1 到 n] 的最佳特征,并通过 [n] AIC 值的最小值找到最佳集,以规避逐步回归问题。

    但现在我不确定,因为这两个步骤似乎依赖于不同的分数?
    提前非常感谢您的帮助!

    • Jason Brownlee 2019年11月6日 上午6:43 #

      是的,您将对哪些是好特征有许多不同的看法。

      测试每个特征,看看什么能为您的特定数据集产生具有最佳技能的模型。

  114. shadia 2019年11月6日 上午8:59 #

    嗨,jason
    感谢您的帖子
    我不知道在交叉验证中进行特征选择是否更好

  115. lachu lax 2019年11月28日 下午2:41 #

    嗨,Jason。

    我遇到了这个问题。这是我的代码

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

    mtcars_data = pd.read_csv(“D:\Python\Assignment solutions\mtcars.csv”)

    # 使用 Extra Trees 分类器进行特征重要性分析
    from pandas import read_csv
    from sklearn.ensemble import ExtraTreesClassifier

    # 加载我的数据
    array = mtcars_data.values
    X = array[:,1:]
    Y = array[:,:-10]

    # 特征提取
    model = ExtraTreesClassifier(n_estimators=10)
    model.fit(X, Y)
    print(model.feature_importances_)

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

    NotFittedError: 估计器未拟合,请在 `feature_importances_` 之前调用 `fit`。

    • Jason Brownlee 2019年11月29日 上午6:41 #

      这很令人惊讶,很抱歉听到这个消息。

      我没有看到任何明显的问题。也许可以尝试将您的代码和错误发布到 StackOverflow?

  116. Ricardo 2019年12月8日 上午3:13 #

    非常感谢您,您的帖子对我选择最佳特征非常有帮助。

  117. Afonso Orgino lenzi 2020年1月6日 上午12:40 #

    你好 Jason,你分享了 4 种选择特征的方法,每种方法都有不同的答案。你如何在这 4 种方法中进行选择?感谢你如此有启发性的帖子。

  118. RaviTeja 2020年1月27日 上午2:48 #

    你好 Jason,

    好帖子,它真的帮助了我。

    我想知道统计假设检验是否可以用于预测模型的特征选择,其中目标变量是连续的,预测变量是分类的。

    我们可以使用 t 检验、anova、卡方检验进行特征选择吗?

  119. priya 2020年3月7日 晚上11:06 #

    尊敬的先生,
    我查看了您的博客,关于递归特征消除,请问您能否在不使用内置的 RFE 方法(特征选择过程)的情况下帮助我。

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

      谢谢,我将推出关于这个主题的教程。

      • priya 2020年3月10日 下午4:19 #

        谢谢先生的回复。我期待您的教程,请问何时发布。

  120. priya 2020年3月17日 下午3:52 #

    谢谢先生。

  121. Muhammad Basit Umair 2020年5月11日 上午6:27 #

    你好先生
    我想将多层 CNN 应用于分类任务,数据集是多类别的,并且包含分类特征。我使用了卡方方法进行特征选择。在 DNN 之前使用卡方方法进行特征选择是有效的吗?
    谢谢

  122. Deeksha 2020年5月13日 晚上10:39 #

    你好 Jason,

    再次感谢您发表如此精彩的帖子!

    我的数据集有 200 多个变量,我正在对其运行分类模型,这导致模型过拟合。您建议使用哪种方法来减少特征数量?我从特征重要性开始,但是由于变量数量如此庞大,我无法将其可视化。有没有办法我可以绘制或展示这些值与给定变量的关系?

    • Jason Brownlee 2020年5月14日 上午5:50 #

      也许可以使用受控实验,并找出最适合您的数据集的方法。

  123. bala 2020年8月25日 晚上10:45 #

    你好 Jason,很高兴能再问一个问题。在进行特征提取后,模型性能是否有所提高?我

    • Jason Brownlee 2020年8月26日 上午6:49 #

      当然。这取决于数据集和模型的选择。

  124. EOE 2020年9月28日 上午12:19 #

    你好先生,

    感谢您提供如此出色的特征选择教程。

    所提出的方法将特征与单个列(或“变量”?)进行比较。

    如果我的特征不是单个列,我该如何进行特征选择?
    例如,如果我想对音频数据集进行分类,我可能会提取音频文件的 MFCC 特征、RMS 能量等。

    我该如何比较 MFCC(有 12 列)和 RMS 能量(单列)?
    我该如何比较两个多列特征?

    • Jason Brownlee 2020年9月28日 上午6:19 #

      抱歉,我没有关于处理音频数据/DSP 的教程。

      • EOE 2020年9月28日 晚上8:08 #

        实际上,我并不是特指音频。

        我问的是,如果提取的特征本身包含多个列,那么我如何将上述方法应用于它们进行特征选择?

        • Jason Brownlee 2020年9月29日 上午5:35 #

          时间序列/序列问题的特征选择可能需要专门的方法。抱歉,我没有示例。

  125. Despoina M 2020年11月26日 晚上8:40 #

    您好,感谢您这篇有用的帖子!

    我想问一下主成分分析和特征重要性同样的问题。我有 2686 个样本和 86 个特征。是否可以保留所有 n_samples,只使用这两种方法减少特征数量?如果可以,如何操作?
    例如,在我的数据集上应用 PCA 时,当我设置 n_components=2686 时,就会出现这个错误

    ValueError: n_components=2686 必须介于 0 和 min(n_samples, n_features)=86 之间,svd_solver='full'

    非常感谢您

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

      PCA 不执行特征重要性,它使用线性代数创建新特征。

      是的,如果您愿意,可以在管道中使用一系列特征选择和降维方法。

      • Despoina M 2020年11月30日 上午3:46 #

        谢谢,我会尝试的。

        此致,Despoina

  126. aya 2020年12月26日 上午8:17 #

    谢谢,但如果我想打印所选特征的名称,我该怎么做?

  127. Gaayathri 2021年3月3日 下午5:05 #

    嗨,在基于封装的特征选择中,为什么以随机方式选择 k 个特征,例如前 3 个,前 5 个等等……有人能回答这个问题吗?

    • Jason Brownlee 2021年3月4日 上午5:46 #

      它不是随机选择的,我们必须选择一个最适合我们的模型和数据集的值。

  128. Nour 2021年3月31日 晚上10:49 #

    谢谢,如果我想从 csv 文件中选择特征,代码是什么?
    示例:file = pd.read_csv(“dataset.csv”)
    #选择特征

  129. Atta 2021年4月13日 晚上7:51 #

    嘿,Jason,我目前正在 mengerjakan 我的学校项目。
    我们有一个不同患者的数据集,他们的生命体征每小时检查一次。生命体征例如血压、PH 值、心率。所以我们每个患者有 10 小时的生命体征数据(有很多缺失数据)。然后我们必须预测,例如,他们是否会在下一小时内死亡。
    我们每个患者的数据看起来像这样
    患者编号 小时 血压 心率 PH
    1 1 NaN 80 NaN
    1 2 NaN 78 NaN
    1 3 NaN 75 7.1
    1 4 30 NaN NaN
    1 5 35 NaN NaN
    1 6 30 NaN NaN
    1 7 NaN NaN NaN
    1 8 NaN 78 7.2
    1 9 NaN 75 NaN
    1 10 NaN 80 NaN

    我们使用 SimpleImputer 和均值策略替换了缺失值。我们展平了数据,因此每个患者基本上只有一行数据,并尝试用线性回归拟合它,但我感觉这种方法就像用两块石头生火一样,虽然可行,但肯定有更好的方法。而且结果预测很差。
    对于 1) 一般方法 2) 填充缺失值的策略 3) 使用哪个模型 4) 也许一个好的教程可以帮助我更深入地了解细节,您有什么建议吗?

    非常感谢这个博客

  130. Atta 2021年4月13日 晚上7:55 #

    抱歉,最初的问候不太正式,您是博士,我只是一个为作业苦苦挣扎的学生。称呼布朗利博士会更合适
    🙂

    • Jason Brownlee 2021年4月14日 上午6:25 #

      不,请叫我“Jason”。这只是一个博客,我只是一个在网上帮助别人的人。

  131. Mehdi Fatan 2021年5月10日 上午10:29 #

    各位亲爱的

    这是一个很棒的网站,我非常喜欢。我在这里学到了大部分使用 Python 进行机器学习和深度学习的专业知识,非常感谢。

  132. Abbas Najmi 2021年5月25日 晚上9:01 #

    嗨,Jason Brownlee,

    感谢您的教程

    请问,如果我想从 2048 个特征中选择前十个特征,ExtraTreesClassifier 中的 n_estimators 的值应该是什么?

    • Jason Brownlee 2021年5月26日 上午5:53 #

      持续增加该值,直到模型性能不再有进一步改善为止。

  133. Abbas Najmi 2021年5月26日 上午10:18 #

    @ Jason Brownlee 感谢您的回复。

    您能告诉我如何知道模型性能没有进一步提高吗?因为使用 ExtraTreesClassifier,我只会得到重要的特征,而这些特征会随着 n_estimators 的变化而变化。

    • Jason Brownlee 2021年5月27日 上午5:31 #

      要知道不同配置是否有改进的唯一方法是使用该配置拟合模型并进行评估。

  134. Shivan 2021年8月9日 上午7:45 #

    你好,先生
    如何将mRMR算法与CNN或(任何预训练模型)结合?
    您有什么想法或参考代码吗?
    感谢您的努力…

  135. Shivan 2021年8月10日 上午9:44 #

    mrmr是一种特征选择算法

  136. mulu 2021年8月25日 晚上10:25 #

    如果我想在入侵检测问题中使用深度学习中的特征选择技术,这可能吗?

    • Adrian Tam
      Adrian Tam 2021年8月27日 上午5:35 #

      为什么不呢!你尝试过什么吗?结果如何?

  137. knowme_love 2021年9月5日 上午9:48 #

    Jason博士您好,
    我正在尝试使用特征选择进行分类。我的数据集中有36个特征,我想运行多种特征选择方法来计算所有特征的特征分数。我如何使用特征选择方法计算所有特征的特征分数?你能帮帮我吗?

  138. Priya 2021年11月29日 晚上8:54 #

    我的工作是开发一个用于多输出预测的模型(即,通过单个模型预测五个输出)。当我应用Kbest和递归特征消除方法来选择最佳特征时,我得到了一个错误“坏的输入形状(x,5)”。
    这是否意味着我们只能将这些特征选择算法应用于单输出预测问题?

    • Adrian Tam
      Adrian Tam 2021年12月2日 上午1:57 #

      不。这只是意味着模型期望一个形状的数组,而您提供了一个不同形状的数组。您需要做的是检查我们的输入和输出并进行更正。

      • Priya 2021年12月2日 下午4:39 #

        抱歉,但我没听懂您的回答。也许我没能解释清楚我的问题。

        我有一个形状为 (x,60) 的输入数组和一个形状为 (x,5) 的输出数组。
        现在,当我应用 SelectKbest 算法将输入向量的特征数量从 60 减少到 20 时,它会报错“错误的输入形状 (x,5)”。

        然而,如果我使用只有一个列的形状为 (x,) 的输出向量,SelectKbest 会给出所需的结果。

        所以这意味着输出向量应该是一个一维数组吗?

        所以我的问题是,SelectKbest 如何在输出向量中列数可以大于一的多输出问题中工作?

        • Adrian Tam
          Adrian Tam 2021年12月8日 上午6:18 #

          好的,没错。RFE 的 fit(X,y) 函数期望 y 是一个向量,而不是矩阵。因此,您不能拥有形状为 (x,5) 的输出——这仅仅是 scikit-learn 的 RFE 的一个限制,但如果您能定义如何测量五维输出的误差,理论仍然适用。

  139. Jessica 2022年1月15日 上午6:25 #

    你好。非常感谢您分享如此有价值的信息。我非常喜欢您的内容。我有一个问题:执行特征选择后,我们是否可以直接在模型中使用最重要的特征,或者我们是否应该检查最重要的特征之间没有相互关联(例如,从相关图来看)?谢谢!

  140. Adil 2022年3月3日 晚上10:29 #

    如果我们有一个混合数据集,包含数值数据和分类数据,哪种特征选择方法会更合适?

  141. Fatemeh 2022年5月2日 晚上11:06 #

    感谢分享此代码。我运行了PCA示例代码,但我认为存在一个问题,因为加载数据集的维度是(768,8),所以我们有768个样本和8个特征。通过应用PCA,我们将找到n_components(这里=3)个新特征,因此在应用PCA后我们应该得到(768,3)。但是所写的代码给出的数据集维度是:(3,8)
    即,降维应用于样本而不是特征。
    我认为在PCA之前应该对X进行转置。

    • James Carmichael 2022年5月3日 晚上11:14 #

      嗨,Fatemeh……你实施你的想法了吗?

  142. Hossein 2022年5月26日 上午9:34 #

    嗨 James,
    我对这篇帖子和“https://machinelearning.org.cn/feature-selection-with-numerical-input-data/”这篇帖子有点困惑。它们都是用于分类目标数据特征选择的,都使用数值数据吗?如果是,为什么有两篇帖子用不同的方法解决同一个问题。为什么有两篇文章用不同的方法?我是否遗漏了什么?!

    感谢您花时间制作如此出色的教程,它是我的最佳资源。

  143. Berkay 2022年6月1日 上午12:47 #

    我想知道f_classif方法中分数是如何计算的?

  144. Tal 2022年6月1日 上午2:54 #

    嗨 Jason,您的网站很棒

    我怎么知道一个特征是否对监督机器学习模型中的每个因变量都有贡献,例如。假设我预测数据中一些人的体重,我想看看“炸薯条”特征是否比“番茄”特征更能帮助模型预测体重较高的人的概率。
    我有一堆特征,想知道每个特征是贡献给“0”还是“1”

    感谢您的帮助

  145. Berkay 2022年6月4日 晚上8:38 #

    你好,使用f_classif方法对用二进制代码(0, 1)或(0, 1, 2, 3)表示的特征进行评分是一种正确的方法吗?
    例如,一个表示人们性别的特征被编码为0和1。

  146. Fatima 2022年10月12日 上午7:51 #

    谢谢,非常有用的主题,我完全理解这个概念
    但我有一个问题,是否可能应用PCA和DT的特征重要性,然后提取它们之间的共同属性。然后使用这些属性来应用机器学习模型以提高准确性?有没有方法可以在对数据集应用PCA后打印特征?

  147. Carl 2022年10月25日 上午6:19 #

    你好 Jason Brownlee,很棒的网站,信息量很大!!

    我有一个关于如何为我的问题选择正确的特征选择算法的问题?我读过您的一篇关于这方面的文章。然而,它只讨论如何选择过滤方法,那么包装器和嵌入式方法呢?我如何选择它们,基于什么?

    非常感谢 James 博士

  148. Solomon 2025年4月16日 晚上8:44 #

    嗨 Jason,我尝试了您书中关于RFE的示例——《Python机器学习精通》。
    我遇到了一个错误。model = LogisticRegression(solver=’liblinear’)
    然后,rfe = RFE(model, 3),但是它抛出了一个错误消息,并且找不到原因?消息是需要2个位置参数,但您提供了3个。

发表评论

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