【问题标题】:Genetic algorithm for feature selection特征选择的遗传算法
【发布时间】:2012-02-06 15:17:45
【问题描述】:

我正在做有关心脏病预测系统的项目。这里使用的是“克利夫兰心脏病数据集”,其中包含 13 个属性

  1. 胸痛型
  2. 空腹血糖
  3. Restecg – 静息电图结果
  4. Exang – 运动性心绞痛
  5. 坡度 - 峰值运动 ST 段的坡度
  6. CA – 荧光检查显色的主要血管数量
  7. 塔尔
  8. 崔斯特血压
  9. 血清胆固醇
  10. Thalach – 达到最大心率
  11. Oldpeak – 运动引起的 ST 压低(相对于休息)
  12. 年龄

我找到了一篇论文,他们为此应用了遗传算法并选择了以下属性

  1. 类型 - 胸痛类型
  2. Rbp - 静息血压
  3. Eia - 运动诱发的心绞痛
  4. Oldpk - 老峰
  5. Vsl - 有色容器的数量
  6. Thal - 达到的最大心率)

但是,他们没有提到他们用来寻找最合适的属性(适应度函数)的标准。由于我是这个概念的新手,我不知道如何执行任务。谁能帮帮我?

【问题讨论】:

  • 我会通过电子邮件向作者发送电子邮件,询问他们使用了哪些适应度函数。有很多方法可以在 GA 中组合适应度的特征,而您使用的适应度函数很可能会影响您最终选择的特征。
  • @timothy 非常感谢。希望这篇文章对您有所帮助。
  • @TimothyJones 您应该将其发布为答案。

标签: java genetic-algorithm


【解决方案1】:

定义总体及其代表

候选者(GA 群体)是属性的不同子集。每个子集都可以是与或不与炉膛疾病相关的一组良好属性。

所以我知道你有不同的测量数据,用于衡量被测人是否患有心脏病的属性和指标。

您可以使用每个属性的位轻松表示属性子集。所以 10000000000000 将是只有第一个属性的子集。 11000……只有前两个……以此类推。

求适应度函数

如何判断候选人(属性的子集)是炉灶疾病的好坏指标。如果它与疾病直接相关,我会说它是好的。因此,对于所有在该指标上数字高的患者,他们都患有疾病,而对于所有数字低的患者,他们都没有疾病。

TODO: find a correlation measure... :) (I'll edit the answer)

指标多于必要的子集是不好的。因此,如果子集中的某个属性不相关,则必须得分更差。

TODO: find a way to introduce this.

两个方向

另外,我将不得不考虑这两个方向。例如,如果一个属性的数值较小,则它可能与炉灶疾病相关。所以我将使用 26 位。每个指示符的两位。一个使用属性值,另一个使用负值。

寻找健康指标

通过统计数据,您可以判断任意一组属性是否有助于发现心脏病。

根据每个属性,每个患者将是第一名、第二名,依此类推。例如血压。压力小者排第一,压力大者排在最后。

因此,如果血压高度相关,那么值高的人会患病,而血压低的人不会患病。

因此,一组属性的好分数是您可以根据您拥有的数据进行多少正确诊断。如果你有属性 A 和 B,它们作为良好指标的得分将随着患者数量多和心脏疾病(相关)的增加而增加,并且随着数量少和心脏疾病(不相关或相互矛盾)的患者数量减少。

对于唯一的属性

我可以根据该属性对患者进行排序。然后我可以看到他们中的哪些人有病。如果数字较高的人(在排序的右侧)患有疾病,那么它是相关的。否则不行。

如果我得到:

ND ND ND ND ND D D D D D D

ND = no disease
D = disease

非常相关。

所以对我来说,分数将是 ND/D 值的排序,在按患者在该属性上的值排序之后。

对于一组属性

当然,您必须为一组属性(例如,列表的前三个属性)打分。所以我应该先按每个病人排序:

Ordered by -> Attr1, Attr2, Attr3

Patient1       1st    3rd    10th
Patient2       2nd    11th   2nd
Patient3       6th    1st    3rd

然后对每个病人的位置求和:

Ordered by -> Attr1, Attr2, Attr3

Patient1       1st    3rd    10th -> 1+3+10 = 14
Patient2       2nd    11th   2nd -> 2 + 11 + 2 = 15
Patient3       6th    1st    3rd -> 6+1+3 = 10

然后按该总和对患者进行排序。

P3, P1, P2

那么如果他们的疾病状态是高度有序的(有疾病的在右边),那么分数就很高。

举例:

ND ND D -> only patient 2 has disease, highly correlated
D D ND -> patients 3 and 1 has disease, doesn't seem correlated (in fact, it seems contradictory)

所以定义评分方法的最后一部分是找到一种方法来判断位序列是否有序:

ND ND ND ND D D D D D D -> high score
D ND D ND D ND D ND D ND -> low score

希望对您有所帮助! :)

【讨论】:

  • 非常感谢。真的很有帮助
  • 糟糕,对于像性别这样的布尔属性,您可以使用 0/1。对于像胸痛类型这样的非标量值,也许你可以制作不同的布尔属性,比如¿has-pain-1? ¿has-pain-2?等等。
【解决方案2】:

要了解其他作者使用的适应度函数,您可以随时向他们发送电子邮件。

在 GA 中组合适应度的特征有很多方法,而您使用的适应度函数会影响您最终选择的特征。因此,如果您想实现与另一组作者相同的功能组合,我会问他们。大多数科学家对其他对其工作感兴趣的人非常有帮助。

根据我的经验,有时您可能得不到回复 - 因此,如果必须再次询问,请不要感到难过。根据他们所在机构的规则,他们可能甚至有你可以使用的代码,但你要问才知道。

但是,如果您只是想通过某种方式减少集合中的特征数量,this question 上的答案可能会有所帮助。

【讨论】:

    【解决方案3】:

    由于您是研究人员,您应该能够真正说出您想要实现的目标。 “适合度”是解决方案与您要实现的目标的匹配程度。例如 这个原因中的“适应度”可能是最接近预测的函数。

    【讨论】:

    • 非常感谢您的回复。这就是我想要弄清楚的。我不知道如何开发健身功能。如果你给我一个有助于我继续前进的想法
    • 要依赖一个适应度函数,你需要能够描述你在寻找什么。只有你能做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2023-03-07
    • 2016-07-18
    • 1970-01-01
    • 2020-08-06
    • 2016-09-11
    相关资源
    最近更新 更多