遗传算法的特征选择

时间:2012-01-10 06:31:35

标签: java genetic-algorithm

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

  1. 胸痛类型
  2. 空腹血糖
  3. Restecg - 静息电图结果
  4. Exang - 运动诱发的心绞痛
  5. 斜率 - 高峰运动ST段的斜率
  6. CA - 通过荧光检查着色的主要血管数量
  7. Thal
  8. Trest Blood Pressure
  9. 血清胆固醇
  10. Thalach - 达到最大心率
  11. Oldpeak - 运动相对于休息引起的ST段压低
  12. 年龄
  13. 我找到了一篇论文,他们为此目的应用了遗传算法并选择了以下属性

    1. 类型 - 胸痛类型
    2. Rbp - 静息血压
    3. Eia - 运动诱发心绞痛
    4. Oldpk - Old peak
    5. Vsl - 有色的容器数
    6. Thal - 达到最大心率)
    7. 但是,他们没有提到他们用来找到最适合的属性(适应度函数)的标准。由于我是这个概念的新手,我不知道如何执行任务。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分: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

希望它有所帮助! :)

答案 1 :(得分:0)

既然你是研究员,你应该能够说出你想要达到的目标。 “健身”是指解决方案与您要实现的目标的匹配程度。例如 这个原因中的“适应度”可能是与预测最匹配的函数。

答案 2 :(得分:0)

要了解其他作者使用的健身功能,您可以随时通过电子邮件发送。

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

根据我的经验,有时候你可能得不到回复 - 所以如果你不得不再问一次,那就不要感到难过。根据他们所在机构的规定,他们可能甚至可以使用您可以使用的代码,但在您提出要求之前,您不会知道。

但是,如果您只是想要某种方法来减少一组中的功能数量,this question上的答案可能会有所帮助。