如何在 Weka 中对机器学习数据进行特征选择

原始的机器学习数据包含多种属性,其中一些与进行预测相关。

你如何知道该使用哪些特征以及该删除哪些特征?在数据中选择特征以建模你的问题的过程称为特征选择

在这篇文章中,你将了解如何在Weka中对机器学习数据执行特征选择。

阅读本文后,您将了解

  • 关于在处理机器学习问题时特征选择的重要性。
  • Weka平台如何支持特征选择。
  • 如何在Weka中对你的数据集使用各种不同的特征选择技术。

使用我的新书《Weka机器学习精通》启动你的项目,其中包含所有示例的逐步教程和清晰的屏幕截图

让我们开始吧。

  • 2018年3月更新:添加了替代链接以下载数据集,因为原始链接似乎已被删除。
How to Perform Feature Selection With Machine Learning Data in Weka

如何在 Weka 中对机器学习数据进行特征选择
图片由Peter Gronemann提供,保留部分权利。

预测糖尿病发病

本示例使用的数据集是Pima印第安人糖尿病发病数据集。

这是一个分类问题,每个实例代表一个患者的医疗详细信息,任务是预测该患者是否会在未来五年内患上糖尿病。

你可以在此处了解更多关于此数据集的信息:

你还可以在Weka安装的`data/`目录下找到名为`diabetes.arff`的此数据集。

在Weka机器学习方面需要更多帮助吗?

参加我为期14天的免费电子邮件课程,逐步探索如何使用该平台。

点击注册,同时获得该课程的免费PDF电子书版本。

Weka中的特征选择

Weka支持许多特征选择技术。

在Weka中探索特征选择的一个好起点是Weka Explorer。

  1. 打开Weka GUI选择器。
  2. 点击“Explorer”按钮启动Explorer。
  3. 打开Pima印第安人数据集。
  4. 点击“Select attributes”选项卡以访问特征选择方法。
Weka Feature Selection

Weka特征选择

特征选择分为两个部分:

  • 属性评估器
  • 搜索方法。

每个部分都有多种技术可供选择。

属性评估器是评估数据集中每个属性(也称为列或特征)相对于输出变量(例如,类别)的技术。搜索方法是尝试或导航数据集中不同属性组合的技术,以便得出选定特征的简短列表。

一些属性评估器技术需要使用特定的搜索方法。例如,下一节中使用的CorrelationAttributeEval技术只能与Ranker搜索方法一起使用,后者评估每个属性并按排名顺序列出结果。在选择不同的属性评估器时,界面可能会要求你将搜索方法更改为与所选技术兼容的方法。

Weka Feature Selection Alert

Weka特征选择警告

属性评估器和搜索方法技术都可以配置。选择后,点击技术名称即可访问其配置详情。

Weka Feature Selection Configuration

Weka特征选择配置

点击“更多”按钮以获取有关特征选择技术和配置参数的更多文档。将鼠标悬停在配置参数上会显示一个包含更多详细信息的工具提示。

Weka Feature Selection More Information

Weka特征选择更多信息

现在我们知道如何在 Weka 中访问特征选择技术,接下来我们将学习如何在选定的标准数据集上使用一些流行方法。

基于相关性的特征选择

选择数据集中最相关属性的常用技术是使用相关性。

在统计学中,相关性更正式地称为皮尔逊相关系数

你可以计算每个属性和输出变量之间的相关性,只选择那些具有中等到高正或负相关性(接近-1或1)的属性,并删除那些相关性较低(值接近零)的属性。

Weka通过CorrelationAttributeEval技术支持基于相关性的特征选择,该技术需要使用Ranker搜索方法。

在我们的Pima印第安人数据集上运行此操作表明,一个属性(plas)与输出类别的相关性最高。它还表明许多属性具有一定的适度相关性(mass,age,preg)。如果我们将0.2作为相关属性的截止值,则其余属性(pedi,insu,skin和pres)可能会被删除。

Weka Correlation-Based Feature Selection Method

Weka基于相关性的特征选择方法

基于信息增益的特征选择

另一种流行的特征选择技术是计算信息增益。

你可以计算每个属性对于输出变量的信息增益(也称为熵)。熵值从0(无信息)到1(最大信息)不等。那些贡献更多信息的属性将具有更高的信息增益值并可以被选中,而那些没有添加太多信息的属性将具有较低的分数并可以被删除。

Weka使用InfoGainAttributeEval属性评估器支持通过信息增益进行特征选择。与上述相关性技术一样,必须使用Ranker搜索方法。

在我们的Pima印第安人数据集上运行此技术,我们可以看到一个属性(plas)比所有其他属性贡献了更多的信息。如果我们使用0.05的任意截止值,那么我们还将选择mass、age和insu属性,并从数据集中删除其余属性。

Weka Information Gain-Based Feature Selection Method

Weka基于信息增益的特征选择方法

基于学习器的特征选择

一种流行的特征选择技术是使用通用但功能强大的学习算法,并评估该算法在具有不同选定属性子集的数据集上的性能。

产生最佳性能的子集被视为选定的子集。用于评估子集的算法不一定是你打算用于建模问题的算法,但它应该训练速度快且功能强大,例如决策树方法。

在 Weka 中,这种类型的特征选择由 WrapperSubsetEval 技术支持,并且必须使用 GreedyStepwise 或 BestFirst 搜索方法。如果计算时间允许,后者 BestFirst 更受青睐。

1. 首先选择“WrapperSubsetEval”技术。

2. 点击“WrapperSubsetEval”名称打开该方法的配置。

3. 点击“分类器”的“选择”按钮,将其更改为“trees”下的J48。

Weka Wrapper Feature Selection Configuration

Weka Wrapper特征选择配置

4. 点击“确定”接受配置。

5. 将“搜索方法”更改为“BestFirst”。

6. 点击“开始”按钮评估特征。

在Pima印第安人数据集上运行此特征选择技术,选择了8个输入变量中的4个:plas、pres、mass和age。

Weka Wrapper Feature Selection Method

Weka Wrapper特征选择方法

在Weka中选择属性

回顾这三种技术,我们可以看到选定特征(例如plas)存在一些重叠,但也存在差异。

评估你的机器学习数据集的多个不同“视图”是个好主意。数据集的视图只不过是给定特征选择技术选择的特征子集。这是你可以在Weka中轻松创建的数据集副本。

例如,根据上次特征选择技术的结果,假设我们想创建Pima印第安人数据集的一个视图,只包含以下属性:plas、pres、mass和age。

1. 点击“预处理”选项卡。

2. 在“属性”选择中,勾选除plas、pres、mass、age和class属性以外的所有属性。

Weka Select Attributes To Remove From Dataset

Weka从数据集中选择要删除的属性

3. 点击“移除”按钮。

4. 点击“保存”按钮并输入文件名。

你现在有了一个新的数据集视图可以探索。

Weka Attributes Removed From Dataset

Weka从数据集中移除的属性

使用哪些特征选择技术

你无法知道哪种数据视图将产生最准确的模型。

因此,最好在数据上尝试多种不同的特征选择技术,进而创建数据的许多不同视图。

选择一个好的通用技术,比如决策树,并为你的数据的每个视图构建一个模型。

比较结果以了解哪种数据视图能带来最佳性能。这将让你了解哪些视图,或更具体地说,哪些特征最能向学习算法普遍揭示你问题的结构。

总结

在这篇文章中,你了解了特征选择的重要性以及如何在Weka中对数据使用特征选择。

具体来说,你学到了:

  • 如何使用相关性执行特征选择。
  • 如何利用信息增益进行特征选择。
  • 如何通过在不同特征子集上训练模型来执行特征选择。

你对 Weka 中的特征选择或本文有任何疑问吗?请在评论中提出你的问题,我将尽力回答。

探索无需代码的机器学习!

Master Machine Learning With Weka

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

...只需几次点击

在我的新电子书中探索如何实现
使用 Weka 精通机器学习

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

最终将机器学习应用到你自己的项目中

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

查看内容

《如何在Weka中使用机器学习数据执行特征选择》的120条回复

  1. Rajesh 2016年10月7日 4:33 am #

    先生,Weka中的classifierattribute eval和wrapperattributeeval有什么区别。

  2. Mark 2016年10月13日 8:55 pm #

    所以,我在不使用任何应用程序(J48以及diabetes.arff数据集的所有实例和特征)的情况下获得的准确率为84.11%,错误率为15.88%。

    应用CorrelationAttributeEval、InfoGain和WwrapperSubsetEval中的任何一种后,准确率都会降低。当然,这是显而易见的,因为我最终会删除一些特征,但这到底有什么好处呢?我正在丢失信息。这不好,我错了吗?

    • Jason Brownlee 2016年10月14日 9:02 am #

      好问题,Mark。

      我们只希望执行最终有利于模型性能的特征选择。

      我将特征选择用作指导,每种方法都会对哪些特征可能重要提供不同的提示。每个集合/子集都可以用作训练新模型的输入,以与基线进行比较或组合在一起与基线竞争。

      特征选择后性能变差仍然能教会你一些东西。不要丢弃这些特征,或者基于这种“新”的问题视图构建模型,并将其与基于其他智能选择的问题视图训练的模型结合起来。

      我希望这能让你对你提出的一个非常重要的话题有更深入的了解。

  3. Shailesh 2016年11月4日 3:32 am #

    嗨,Jason,

    感谢这篇内容丰富的文章!

    因此,您使用了任意的截止值来进行相关性和信息增益,以便选择特征子集。
    有什么方法可以选取截止值吗?

    我对特征选择还有另一个疑问。

    为了从“信息增益 + Ranker”方法的输出中选择最佳特征子集,我逐一移除了低排名特征,并检查了每个子集分类器的准确性,然后选择了给出最大准确性的子集。

    然而,对于某些数据集,我得到了2个特征子集的相同(最大)准确率值。
    例如,我有一个包含21个特征的集合,其中10个特征和6个特征的子集在所有可能的子集中给出了相同的最大准确率。

    所以我很困惑该选择哪个子集?
    你能帮我吗?

    谢谢!

    • Jason Brownlee 2016年11月4日 11:14 am #

      谢谢 Shailesh。

      我建议尝试使用每个值作为截止值来创建特征模型,并让模型技能决定要采用的特征。

      是的,我喜欢你概述的方法。特征越少越好(复杂度越低,越容易理解)。另外,将这些结果与新的集成模型进行比较,该模型对具有不同特征数量的模型性能取平均值。

  4. Poornima 2016年11月9日 5:19 pm #

    如果我使用IG进行特征选择,然后使用SVM进行交叉验证分类,那么特征选择将完全应用于整个数据集,而不仅仅是训练集……这不正确,我想……

  5. Sadiq 2017年1月11日 5:03 am #

    尊敬的Jason Brownlee先生
    我想请教您如何在weka中将PSO作为特征选择算法来执行?有没有办法将PSO添加到weka程序中?
    提前感谢。

    • Jason Brownlee 2017年1月11日 9:30 am #

      抱歉,Sadiq,我没有在Weka中使用PSO进行特征选择。我无法给你好的建议。

  6. Poornima 2017年2月19日 12:57 am #

    如果我使用信息增益来选择训练数据集的属性,并使用命令行将输出保存到另一个.arff文件中。现在我们有了带有选定属性的训练数据集。是否可能只使用这些选定属性来创建测试数据?因为我的数据维度非常大,手动删除属性非常困难。- 谢谢

    • Jason Brownlee 2017年2月19日 8:53 am #

      我相信可能有一个数据过滤器可以应用特征选择并移除未选择的特征。

      也许可以查看一些数据过滤器以找到这样的过滤器。

      然后你可以将过滤后的特征保存到新文件中并直接使用它。

  7. Miks 2017年5月1日 1:22 am #

    Jason,很棒的帖子。

    我遇到了一个令人困惑的情况。我用我自己的数据集尝试了CorrelationAttributeEval,并在评估器的配置窗口中指定了outputDetailedInfo:true。Weka给我列出了每个特征的每个独立值的相关性。这很棒,但是有一个特征只有两个可能的值,并且两者具有相似的相关性。据我理解,这意味着这个特征不能以任何方式影响预测,因为相关性与任何可能的值都相似……即使该特征的总相关性是与其他特征相比最好的之一。我说的对吗?

  8. Agung 2017年6月29日 3:08 pm #

    嗨,Jason,
    这是一个很好的解释。但我想知道,特征选择到底是什么?如果我把所有的属性值加起来,为什么总和不是1或100%?

    • Jason Brownlee 2017年6月30日 8:07 am #

      特征选择是一种减少模型输入变量数量的方法,希望能够获得更简单的模型或更好的预测,或者两者兼而有之。

  9. lena 2017年11月5日 7:17 am #

    执行特征选择时,我们应该对整个数据集(训练集和测试集)执行,然后拆分数据吗?还是只在训练部分执行?

    • Jason Brownlee 2017年11月6日 4:46 am #

      最好只在训练数据上执行数据预处理操作,然后使用训练数据中的系数/等将这些操作应用于测试数据。

  10. Dharmaraj 2017年11月24日 1:29 am #

    嗨,Jason,
    我有两个问题,

    1. 我在特征选择和不进行特征选择时面临同样的问题。在没有任何特征选择方法的情况下,J48的准确率为99.10%,但使用CFS、卡方和IG以及不同的子集,我得到了较低的准确率,如98.70%、97%等。我哪里错了?

    2. 这与Weka GUI和API有关,为什么我在使用GUI和API时对相同的算法得到不同的结果。我搜索了很多,但没有找到任何有用的东西。
    谢谢

  11. Tadele Debisa 2017年11月24日 7:09 pm #

    尊敬的Jason,我正在使用三种机器学习算法,如GA进行特征选择,ANN和SVM对数据集进行分类。我想使用封装方法,您能告诉我如何在预处理中应用交叉和变异操作概念吗?

    • Jason Brownlee 2017年11月25日 10:15 am #

      抱歉,我没有遗传算法用于特征选择的实际示例。

  12. Dharmaraj 2017年11月24日 7:44 pm #

    谢谢 Jason。
    但是,为什么我在Weka GUI和API上对相同数据集使用相同算法时会得到不同的结果呢?

  13. Sarah 2017年12月13日 5:46 am #

    亲爱的 Jason,
    我想开发一个新的特征选择算法,我可以使用WEKA来完成吗?

    • Jason Brownlee 2017年12月13日 5:46 am #

      是的,你可以自己实现它以在Weka中使用。

      • sarah 2017年12月13日 5:57 am #

        谢谢你的回复
        你能给我一些建议或提供一个说明性示例的链接吗?

  14. Vijay 2018年3月3日 7:45 am #

    Jason,很棒的帖子。

    我费了很大力气,但未能找到针对分类问题的一些问题的直接答案,您的观点将非常有帮助。

    1) 信息增益和基尼系数似乎合理,但皮尔逊相关系数和卡方过滤器是否适用于二元变量/糖尿病数据集典型的分类问题?

    2) 统计学教授和一些在线媒体强烈主张将属性选择作为交叉验证内循环的一部分。不这样做是一种作弊行为,因为训练数据已经用于属性选择,并会偏向估计以产生较小的误差。Ian Witten在他的MOOC中建议使用AttributeSelectedClassifier。在使用Weka中的属性选择选项卡时,这些过滤方法是否应该在测试/验证集上运行?

  15. Irem 2018年3月6日 8:32 pm #

    亲爱的 Jason,
    属性评估器和搜索方法的执行顺序是怎样的?我正在尝试使用蚁群搜索(默认评估器为模糊粗糙子集)和CfsSubsetEval作为属性评估器。在这种情况下,首先,CfsSubsetEval函数评估属性并给出信息子集(带有优点),然后蚁群搜索在所有这些子集上进行,通过模糊粗糙子集评估器进行评估;是这样吗?
    谢谢

  16. Muhammad Irfan 2018年3月16日 5:14 am #

    这篇帖子是关于从现有的CSV或ARFF文件(可以使用excel或一些python代码从原始数据中生成)中进行特征选择的。我们能否在WEKA中使用窗口化(1秒或更长)和重叠(50%左右)从任何CSV或ARFF或EXCEL文件中生成特征?

  17. Maha Alarifi 2018年3月24日 2:22 am #

    尊敬的Jason博士
    感谢您提供如此丰富的信息文章
    我正在Weka中使用属性选择进行我的毕业研究,主题是视频场景中的异常行为。
    我想知道是否需要为属性选择的每个搜索方法设置参数?
    另外,我需要对属性评估器的结果进行一些解释。

  18. LenaM 2018年4月1日 3:54 pm #

    嗨,Jason,

    我的作业要求我使用属性选择并进行测试以查看最佳结果。

    我应该使用attributeSelectionClassified还是attributeSelection?

    有没有链接可以告诉我如何比较结果以获得最佳属性集?

    • Jason Brownlee 2018年4月2日 5:20 am #

      你必须通过实验才能找出最适合你的预测建模问题的特征子集。

  19. Lucky . 2018年4月10日 12:34 am #

    我可以在Weka中使用我的算法进行特征选择吗?

  20. SURAJ KUMAR 2018年4月10日 8:25 pm #

    在Weka Explorer中,当我们导入数据后使用相关属性评估器时,它会为每个特征分配与决策变量相关的相关系数。

    我想知道Weka如何知道我把决策变量放在哪一列?

  21. Arman 2018年5月4日 4:12 am #

    谢谢你,你给我打开了一个新世界!

  22. Don 2018年5月13日 5:34 pm #

    使用InfoGainAttributeEval -> 输出是熵。这是什么单位?它是如何计算的?(据我所知,熵通常以比特为单位衡量)

    非常感谢
    Don

  23. Yesh 2018年5月21日 1:57 am #

    我如何使用weka进行基于深度学习的网络入侵检测系统特征选择?

    谢谢你

  24. Raj 2018年6月1日 4:53 pm #

    嗨,Jason,这真是一篇很棒的帖子,解释得很有启发性。

    一个简单的问题
    1) 您提到了使用wrappersubsete eval来选择特征子集
    我们可以使用Cfssubset eval来选择特征吗

    2) 我们能否使用肘部法则(图表)来选择特征与类别相关值的最佳特征集?

  25. obsa gilo 2018年7月13日 10:51 pm #

    亲爱的Jason,我正在研究使用机器学习分类从新闻文本中提取信息,如何在WEKA中应用?

    • Jason Brownlee 2018年7月14日 6:18 am #

      抱歉,我没有在Weka中处理文本数据的示例。

  26. Abdrahman 2018年7月17日 8:38 pm #

    有人知道在Weka中去哪里找PSO吗?

    谢谢你

  27. Royel 2018年8月28日 10:23 pm #

    如此有用的文章。谢谢

  28. Rawan 2018年9月2日 4:08 pm #

    尊敬的Jason,我正在处理文本数据集,其中单词频率表示为属性(这意味着我面临高维度问题,数据集可能包含多达3000个特征)。
    我尝试应用属性选择(信息增益和相关性)过滤器,但没有任何改变,属性数量仍然相同。这是否意味着所有属性都是必需的?我应该不应用特征选择方法继续吗?

    • Jason Brownlee 2018年9月3日 6:11 am #

      3K不算多。尝试直接对问题进行建模。然后看看能否通过删除任何特征来获得提升。

  29. Nick 2018年10月11日 11:47 pm #

    一个属性评估器有很多搜索方法,不同的组合可以产生不同的属性子集。那么如何匹配属性评估器和搜索方法呢?
    (例如:CfsSubseteval+bestfirts,CfsSubseteval+greddysteowise,CfsSubseteval+Genetic search)

  30. Thierry Bachmann 2019年1月24日 4:46 am #

    你好,Jason
    感谢您所有出色的文章,它们非常有用。
    我不是数据科学家,所以我不确定如何正确解释 Weka 的结果。
    我尝试用深度学习算法根据车辆特性(40个特征)预测车辆油耗,但精度对于业务来说过高,误差在3%左右。

    所以,我使用CorrelationAttributeEval + Ranker算法在weka中检查了我的数据。我发现排名在-0.01和0.02之间。
    这些低排名是否表明这些属性真的不相关?

    非常感谢
    Thierry

  31. Minh-Trung 2019年6月9日 11:41 am #

    嗨,Jason,

    我正在进行特征选择。我的数据不平衡,我使用SMOTE来平衡数据。之后,我尝试通过信息增益和基于相关性的选择来查看属性的重要性。这两种方法没有给出相同的结果。我想知道是不是因为我使用了处理过的数据而不是原始数据?我还运行了数据中数值变量之间的相关性分析,结果没有相关性,我应该使用信息增益而不是基于相关性的特征吗?问题是,当查看树时,CorrelationAttributeEval + Ranke给出的重要性顺序给出了合理的结果。

    谢谢你

    此致

    Minh-Trung

    • Jason Brownlee 2019年6月10日 7:35 am #

      我预计SMOTE之后特征选择会不可靠。

      也许可以尝试在不同的特征子集下拟合模型并比较模型性能?

  32. Mic 2019年7月17日 8:28 pm #

    嗨,Jason,

    这真是一篇很棒的文章。我有一个数据集,其中所有标签都没有意义,有label1、2…30,并且有450条记录,它们都是二项式的,除了ID标签外都有缺失数据。我有两个问题,请问:

    1. 对于二项式(是/否)数据,您对预处理阶段处理缺失数据的建议是什么?其中一个标签在120条记录中为空,其他标签有10-30个字段有缺失数据?

    2. 在这种情况下,哪种属性选择方法最适合充分比较?

    我非常感谢您的建议。

    Mic

  33. Michael Joyner 2019年7月21日 2:30 am #

    Jason,

    感谢您的精彩文章,也感谢您坚持不懈地回复这个帖子。我正在参加Weka在线课程,我爱上了这个简单而强大的工具。

    我有一个问题。

    这3种能力是否属于特征选择范畴?

    1) 前向选择:前向选择是一种迭代方法,我们从模型中没有特征开始。

    2) 后向消除:在后向消除中,我们从所有特征开始,并在每次迭代中删除最不重要的特征

    3) 递归特征消除:它是一种贪婪优化算法,旨在找到性能最佳的特征子集。

    • Jason Brownlee 2019年7月21日 6:32 am #

      它们是特征选择的不同方法,可能还有更多。

  34. Hassan 2019年7月31日 7:58 pm #

    如何在weka中应用水平和垂直特征选择

  35. Nazreena Rahman 2019年9月22日 3:08 pm #

    我可以在Weka中使用蚁群优化技术进行特征选择吗?

  36. abhay 2019年10月7日 8:36 pm #

    先生,我将后向消除特征选择和信息增益与排序器方法应用于我们的数据集,并为机器学习模型选取了共同特征。后向消除技术是在Weka的预处理选项卡中手动完成的,而信息增益是自动选择特征的方式。我只是想知道这是一种好的特征选择方法吗?

    • Jason Brownlee 2019年10月8日 7:59 am #

      只有当它在你的数据集上产生更熟练的模型时,这才是一种好的方法。

  37. Mohammad 2019年10月25日 2:28 am #

    嗨 Jason
    我的数据集都是数值型数据,一些算法(如J48)无法应用于它们(它们是灰色的)来测量准确率。当我在Weka中使用“交叉验证”或“百分比分割”时,我得到以下摘要报告:

    • 相关系数 0.5755
    • 平均绝对误差 1.1628
    • 均方根误差 1.737
    • 相对绝对误差 81.5909 %
    • 相对均方根误差 81.9522 %

    我应该报告模型预测的准确率。我如何获得确切的准确率?是准确率数字还是图表?

    谢谢你

  38. Mathew 2019年12月2日 3:55 pm #

    你好 Jason!!!

    我直接使用Python内置库中的特征选择技术。如果我使用Weka进行特征选择,结果会有什么不同?

  39. Lilly 2019年12月6日 3:52 am #

    嗨,Jason,
    这个博客很棒,对我的机器学习帮助很大。有一个有点不相关的问题,我正在测试当我降低置信度(使用J48和交叉验证)时我的数据会发生什么,令我惊讶的是,准确率上升了。
    有什么想法为什么会这样吗?这完全与我预期的相反。

    • Jason Brownlee 2019年12月6日 5:24 am #

      谢谢。

      抱歉,我不太明白。也许你能详细说明一下?什么置信度?

  40. arti 2019年12月25日 7:03 pm #

    谢谢您的指导。

    先生,我在Weka中尝试了Wrapper特征选择与SMO,但有时没有得到选定的特征。只显示消息“评估了所有特征”。

  41. MOHAMMAD SHOJAESHAFIEI 2019年12月31日 5:30 am #

    我从weka得到的最佳准确率是44%,我应该如何处理我的excel数据集才能获得更好的准确率?
    我使用了神经网络、Kstar、随机森林。

    问题是数据分布不均。有没有什么技术可以处理数据集?

  42. benish 2020年2月5日 11:40 pm #

    先生,我们如何使用weka工具制作特征模型???

  43. chourouk 2020年3月13日 6:26 am #

    Jason,很棒的帖子。
    我正在处理我的数据集的预处理阶段,我只想知道我是否可以随机选择一些特征选择方法,或者在选择时必须遵守一些标准?

    谢谢你

  44. Shubham Jagtap 2020年4月9日 7:35 am #

    我们可以在WEKA中使用RT3和RC4.5数据降维技术吗?

  45. Malik Elam 2020年5月9日 8:28 am #

    Jason,非常有用的帖子

    我的问题是:有时单个特征可能不显示与输出的相关性,但是多个特征的组合会显示相关性。在这种情况下,您推荐哪种方法来选择特征?

    • Jason Brownlee 2020年5月9日 1:50 pm #

      可能是封装方法,例如RFE(或其他搜索方法)。

  46. shadia 2020年6月6日 8:44 am #

    感谢您宝贵的帖子,
    我想知道如何在Weka中使用基于粗糙集的特征选择

  47. Le Anh 2020年6月17日 1:22 pm #

    亲爱的,
    我用Weka运行了我的数据集。但是,如果我使用Explore,它不显示完整的输出结果(准确性等)(我点击完整的评估指标以显示所有输出结果),如下所示:

    === 测试分割评估 ===

    测试模型在测试分割上花费的时间:0.28秒

    === 总结 ===

    相关系数 0.6715
    平均绝对误差 0.4936
    均方根误差 0.6244
    相对绝对误差 74.1773 %
    根相对平方误差 76.5897 %
    实例总数 36000

    在使用Experimenter的情况下,提交数据集并开始后,Weka显示:
    12:17:54: 已启动
    12:17:55: 类属性不是标称型!
    12:17:55: 已中断
    12:17:55: 发生1个错误。

    我的数据集像以下矩阵(属性类:0,1,2)
    A0 A1 A2 A3 A4 A5
    0.0122 0.0112 0.2134 0.10321 0.21984 1
    ....

    • Jason Brownlee 2020年6月17日 1:44 pm #

      Weka 似乎认为你的数据是一个回归问题。

      尝试通过过滤器或手动在文件中将目标更改为名义型。

  48. uzma 2020年6月23日 5:24 am #

    感谢这篇文章……对使用weka过滤器非常有帮助。

  49. FAIZ JILLANI 2020年7月6日 2:02 am #

    我在使用特征选择技术时感到困惑。在weka中,我只能使用3种技术
    1. 相关性
    2. 信息增益
    3. 决策树

    我能得到至少5种其他特征选择技术的名称吗?

    • Jason Brownlee 2020年7月6日 6:38 am #

      干得好!

      是的,考虑数据预处理部分中的一套封装器和过滤器方法。

  50. Paul Moulton 2020年10月12日 8:31 pm #

    嗨,Jason。非常感谢您介绍了不同的特征选择工具——非常有帮助。

    比较特征选择子集/排名很好,但我很难理解为什么会出现如此大的差异……

    如果“pres”在相关性和信息增益技术中都排在8个属性的最后一位,那么该列及其值的哪些特征使得它对决策树方法如此有用(8个属性中的第二个选择)?

    谢谢,
    保罗

  51. Paul Moulton 2020年10月13日 9:18 am #

    感谢您的及时回复——以及全面的常见问题解答链接——不胜感激。

    我对这些都比较陌生,但只是担心如果一个变量几乎完全不相关(就像pres似乎那样,与目标类别),而且没有信息增益,我就会被指责过于努力地寻找某种碰巧有效的方法,也许是随机的,也许只在这个数据集上有效(而不能很好地推广到未来的实例)。但我想这些也可以进行测试。

    上面和其他地方的见解都很棒——非常感谢。

  52. Osamah Alysiri 2020年10月23日 晚上7:55 #

    嗨,Jason。非常感谢您提供的信息。
    我对选择排名较高的特征感到困惑,所以请您帮帮我。

    当应用信息增益过滤器时,通过计算最高排名来降低数据的维度。
    如何从众多特征中保存选定的特征?
    例如,我们有4000个特征,只需要200个,那么如何一次选择200个并删除1800个呢?

  53. Osamah Alyasiri 2020年10月25日 凌晨12:15 #

    亲爱的Jason Brownlee,

    我想将通过信息增益过滤器选择的排名特征(例如200个特征)的输出作为输入,使用另一个程序将其输入到Wrapper FS中,这就是为什么我需要知道如何通过Weka保存所选的最高排名特征以创建新的数据集。
    我的数据集格式是词频形式。

    祝好

    • Jason Brownlee 2020年10月25日 上午7:05 #

      是的,您可以应用特征选择方法,然后直接保存结果数据集。

  54. Sarah 2020年11月19日 凌晨2:58 #

    我使用了预处理选项卡,使用监督特征选择方法(分类器子集评估,随机森林)来选择特征,但是当我使用“选择属性”选项卡使用相同方法时,结果却不同。您能解释一下在Weka中使用“选择属性”选项卡和“预处理”选项卡进行特征选择有什么区别吗?谢谢!

  55. Ashna 2020年12月22日 凌晨6:34 #


    Weka中选择属性的信息增益可以大于1吗?如果不能,是否应该删除该属性?

  56. Musa 2022年5月15日 晚上7:32 #

    你好……Weka中有使用果蝇优化算法进行特征选择的方法吗?

  57. Lukumba 博士 2024年6月18日 晚上7:16 #

    您好,

    我有一个包含54个属性的数据集,但我希望Weka模型只对其中的46个进行分类。如何在分类阶段选择这46个属性?

    • James Carmichael 2024年6月19日 上午8:38 #

      你好,Lukumba 博士……要使用Weka进行特征选择,并确保在分类阶段只使用54个属性中的46个,您可以按照以下步骤操作

      ### 步骤1:加载数据集
      1. 打开Weka。
      2. 转到“Explorer”选项卡。
      3. 单击“Open file…”按钮并加载您的数据集。

      ### 步骤2:选择属性
      1. 转到“Select attributes”选项卡。
      2. 选择一个属性选择方法
      – 对于简单的手动选择,您可以使用“Remove”过滤器。
      – 对于更高级的选择,您可以使用属性评估器和搜索方法。

      #### 手动删除属性
      1. 在“Filter”面板中,单击“Choose”按钮。
      2. 选择 weka.filters.unsupervised.attribute.Remove
      3. 单击“Remove”过滤器进行配置。
      4. 在“Remove”过滤器选项中,将“attributeIndices”设置为您要删除的属性索引。例如,要删除前8个属性并保留剩余的46个,您可以将 attributeIndices 设置为 1-8
      5. 单击“OK”应用过滤器。

      #### 使用评估器和搜索方法进行属性选择
      1. 在“Attribute Evaluator”面板中,单击“Choose”按钮。
      2. 选择一个属性评估器,例如 weka.attributeSelection.CfsSubsetEvalweka.attributeSelection.InfoGainAttributeEval
      3. 在“Search Method”面板中,单击“Choose”按钮。
      4. 选择一个搜索方法,例如 weka.attributeSelection.BestFirstweka.attributeSelection.Ranker
      5. 根据需要配置评估器和搜索方法。
      6. 单击“Start”按钮运行属性选择过程。Weka将根据您选择的评估器和搜索方法选择最相关的属性。

      ### 步骤3:将选定的属性应用于分类器
      1. 转到“Classify”选项卡。
      2. 在“Filter”面板中,单击“Choose”按钮。
      3. 选择 weka.filters.unsupervised.attribute.Remove
      4. 单击“Remove”过滤器进行配置。
      5. 在“Remove”过滤器选项中,将“attributeIndices”设置为您要删除的属性索引,就像您在“Select attributes”选项卡中所做的那样。
      6. 单击“OK”应用过滤器。
      7. 在“Classifier”面板中,选择您的分类器(例如,J48、NaiveBayes等)。
      8. 单击“Start”运行分类过程。

      ### 示例:删除特定属性

      如果您想按索引手动删除特定属性,请更详细地按照以下步骤操作

      1. **选择删除过滤器:**
      – 在“Filter”面板中,单击“Choose”并选择 weka.filters.unsupervised.attribute.Remove

      2. **配置删除过滤器:**
      – 单击过滤器以打开其配置。
      – 将“attributeIndices”字段设置为您要删除的属性索引。例如,要保留属性9到54(即删除前8个属性),请将 attributeIndices 设置为 1-8

      3. **应用过滤器:**
      – 单击“OK”应用过滤器。您现在应该看到数据集中只保留了所需的属性。

      4. **保存过滤后的数据集(可选):**
      – 如果您想以后重复使用,可以单击“Save”保存过滤后的数据集。

      5. **运行分类器:**
      – 转到“Classify”选项卡。
      – 选择您想要的分类器并设置您的评估参数。
      – 单击“Start”在过滤后的数据集上训练和评估分类器。

      通过遵循这些步骤,您可以确保在Weka的分类阶段只使用选定的46个属性。

  58. faramak 2024年7月5日 晚上11:32 #

    我有一个包含数值类进行回归的数据集,将其数值类转换为名义类并使用信息增益进行特征选择是否可以?

    • James Carmichael 2024年7月6日 上午6:54 #

      你好,faramak……为了使用信息增益进行特征选择,将数值类转换为名义类是可以的,但了解其含义和适用背景至关重要。以下是一些考虑因素

      ### 何时可能适用
      1. **分类问题**:如果您打算解决分类问题而不是回归问题,将数值转换为分类类别(名义)可能是有意义的。例如,如果您的连续目标变量是年龄,并且您将其转换为年龄组(例如,儿童、青少年、成人、老年人),那么您可以使用信息增益等技术。

      2. **离散区间**:如果您的数值目标可以有意义地划分为代表不同类别的离散区间,这种方法是合理的。例如,将温度读数转换为“冷”、“暖”、“热”等类别。

      ### 潜在问题
      1. **信息丢失**:将数值数据转换为分类数据可能会导致信息丢失,特别是如果数值数据具有在分类形式中被平滑掉的有意义的变化。

      2. **任意分箱**:将数值转换为类别的过程通常涉及对分箱阈值的任意决定,这可能会引入偏差并降低模型的预测能力。

      3. **特征选择方法**:信息增益是分类任务中特征选择的合适方法,但如果您的原始问题是回归任务,它可能不合适。对于回归问题,相关系数、互信息回归或来自随机森林或梯度提升等模型的特征重要性等技术通常更合适。

      ### 替代方法
      如果您的最终目标是执行回归并希望进行特征选择,请考虑使用专为回归任务设计的方法

      – **互信息回归**:测量输入特征和目标变量之间的依赖关系。
      – **相关性分析**:分析每个特征和目标变量之间的线性关系。
      – **基于模型的特征重要性**:使用随机森林、梯度提升或Lasso回归等模型来评估特征重要性。

      ### 实际步骤
      1. **分析数据性质**:了解您的数值目标变量的分布和性质。决定转换为分类类别是否会增加有意义的上下文。

      2. **选择适当的方法**:如果您的主要任务是回归,请使用回归特定的特征选择方法。对于分类,将数值转换为名义并使用信息增益可能适用。

      3. **验证您的方法**:如果您决定将数值类转换为名义类,请验证对模型性能的影响。将结果与其他特征选择技术获得的结果进行比较。

      如果您需要有关特定数据集或问题的进一步指导,请随时分享更多详细信息,我可以提供更量身定制的建议。

发表回复

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