具体实施方式
结合图1,本发明的基于信息理论的医疗数据集特征选择方法,包括以下步骤:
步骤1、根据待分析的医疗数据集构建原始高维数据矩阵和标签列,自定义要选取的特征个数T;其中,T小于医疗数据集的特征总数;
步骤2、根据原始高维数据矩阵和标签列,求取每个特征对称不确定性SU值;
步骤3、根据SU值对所有特征进行降序排列,获得待选的有序特征序列,将SU值最大的特征加入构建的初始为空的特征子集,并将其从待选的有序特征序列中剔除;
步骤4、针对待选的有序特征序列中剩余的每个特征fp,求取其对称不确定性SU值以及其与已选的所有特征关于标签列的多变量对称不确定性MSU值,结合每个特征的SU值和MSU值构建该特征对应的特征评价函数;
步骤5、利用每个特征对应的特征评价函数对该特征进行评价,将评价值最高的T-1个特征加入所述特征子集;
步骤6、根据所得特征子集从原始高维数据矩阵选择相应T个特征对应的数据构建新的医疗数据集,并结合分类器和K折交叉验证方法对所选特征子集进行评价。
进一步地,步骤1中根据待分析的医疗数据集构建原始高维数据矩阵和标签列,具体为:
假设构建原始高维数据矩阵
n为医疗数据集样本总数,m为原始特征维数;矩阵M的第一列为标签列,用向量
表示,矩阵M除第一列之后的部分为数据矩阵,用矩阵
表示;所述数据矩阵的第i行表示第i个样本在所有特征下的观察值,第j列表示第j个特征的所有观察值。
进一步地,步骤2根据原始高维数据矩阵和标签列,计算每个特征的对称不确定性SU值,具体为:
对称性是用于度量特征之间关联的有力指标。互信息的取值易于倾向具有多值的变量,而对称不确定性改善了这一缺点,实际上为互信息的归一化表示。
两个离散型随机变量X={x1,x2,...,xn}和Y={y1,y2,...,yn}的对称不确定性定义为:
式中,定义p(xi)为离散型随机变量xi的概率质量函数,H(X)为随机变量X的信息熵,定义为:
式中,对数函数默认以2为底,单位为bit。
同理,H(Y)为随机变量Y的信息熵。
在信息论中,信息熵描述了变量不确定性的期望。在Y的条件下,X的条件熵定义为:
条件熵H(X|Y)表示关于X在已知Y的条件下不确定性剩余的大小。
定义X和Y的联合分布为p(xi,yj),边缘分布为p(xi),p(yi),变量X和Y的互信息(Mutual Information)I(X;Y)定义为:
综上,每个特征的对称不确定性SU值为:
式中,Xk表示特征fk对应的高维数据矩阵中第k列数据,y表示标签列,I(Xk,y)表示Xk与y的互信息,H(Xk)、H(y)分别表示Xk、y的信息熵,H(Xk|y)表示在y的条件下,Xk的条件熵。
进一步地,步骤4中求取剩余的每个特征fp与已选的所有特征关于标签列的多变量对称不确定性MSU值,具体为:
假设已加入特征子集的特征有t个,则fp对应的MSU所用公式为:
其中,
式中,H(X1:t,y)为联合熵。
进一步地,步骤4中由每个特征fp的SU值和MSU值构建该特征对应的特征评价函数为:
JMSU(Xp)=SU(Xp,y)-MSU(X1:t,y)
特征评价函数同时考虑了特征与标签的相关性和特征之间的冗余性。
进一步地,步骤6中结合分类器和K折交叉验证方法对所选的特征子集进行评价,具体为:
步骤6-1、随机将新的医疗数据集中的样本划分为K个样本子集;其中,正例的样本标签由+1表示,反例的样本标签由-1表示;
步骤6-2、将每一个样本子集分别作为测试集,剩余的K-1个样本子集作为训练集,训练分类器,共获得K个分类器;
步骤6-3、(1)求取每个分类器的分类准确率acc:
acc=length(find(Y_test_resu==Y_test))/length(Y_test)
式中,Y_test_resu为分类器预测的标签,Y_test为真实数据标签;
之后对所有分类器的分类准确率acc求平均,获得平均准确率
(2)求取每个分类器的均衡分类错误率BER:
式中,TP为该分类器正确预测为正例的样本的数量,FN为该分类器错误预测为反例的样本的数量,FP该分类器错误预测为正例的样本的数量,TN为该分类器正确预测为反例的样本的数量;
之后对所有分类器的均衡错误率BER求平均,获得平均均衡错误率
(3)求取每个分类器的AUC值,其为ROC曲线下的面积,ROC曲线的纵坐标为真正率TPR,横坐标为假正率FPR:
AUC与BER之间的关系为:
AUC=1-BER
利用上述平均准确率
平均均衡错误率
和平均
值即可评价特征选择效果,值越大,分类效果也越好,表示选择的特征子集越优。
示例性优选地,步骤6中分类器具体采用KNN分类器。
下面结合实施例对本发明作进一步详细的描述。
实施例
本发明基于信息论的医疗数据集特征选择方法,包括以下内容:
1、根据待分析的医疗数据集构建原始高维数据矩阵和标签列,自定义要选取的特征个数T;其中,T小于医疗数据集的特征总数;
本实施例中采用的医疗数据集是UCI机器学习库的Heart Disease数据集中的Cleveland数据库,该数据库包含76个特征和242个样本。其中,第58个特征是num,是每个样本的标签,代表是否患心脏病。原本的分类目标是预测观察对象是否患心脏病(未患病标签为0),或者患心脏病的种类(标签分别为1,2,3,4),本实施例简化了分类目标,只考虑二分类问题,即预测对象是否患病(患病的标签为+1,未患病的标签为-1)。除去标签,还有75个待选特征,具体如下表1所示:
表1 Heart Disease数据集的特征
本实施例设定选取的特征个数T=5,10,20,并分别考察分类效果。
2、根据原始高维数据矩阵和标签列,计算每个特征对称不确定性SU值:
对称不确定性SU的计算公式如下:
当T分别取5,10,20时,得到的SU值分别如下表2、3、4所示,表格中加粗的是SU的最大值:
表2 T=5时,特征的SU值
表3 T=10时,特征的SU值
表4 T=20时,特征的SU值
3、根据SU对所有特征进行降序排列,获得待选的有序特征序列,将SU值最大的特征加入构建的初始为空的特征子集,并将其从待选的有序特征序列中剔除;
由上述2得出的SU值降序排列的特征序号分别为:
(1)T=5时:
idxs=[60,66,59,64,62,1,51,67,12,9,44,38,41,32,43,40,71,58,30,34,15,33,23,10,36,70,3,4,29,56,37,35,31,14,21,25,20,24,55,72,19,17,39,26,27,57,22,11,18,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
此时,首先被加入特征集合的是第60个特征laddist。
(2)T=10时:
idxs=[60,66,64,59,62,67,1,51,12,9,38,44,32,43,40,71,41,30,58,15,34,3,4,23,10,36,33,70,29,37,31,35,14,21,25,56,19,20,24,55,26,72,17,27,57,39,22,11,18,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
此时,首先被加入特征集合的是第60个特征laddist。
(3)T=20时:
idxs=[60,66,64,59,62,1,67,51,9,38,12,32,44,43,41,71,40,30,15,58,34,4,10,36,33,3,31,23,29,70,72,21,35,19,14,56,25,37,20,24,55,39,27,26,17,57,18,22,11,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
此时,首先被加入特征集合的是第60个特征laddist。
4、针对待选的有序特征序列中剩余特征的每个特征fp,求取其对称不确定性SU值以及其与目前已选的所有特征关于标签列的多变量对称不确定性MSU值,结合每个特征的SU值和MSU值构建该特征对应的特征评价函数:
JMSU(Xp)=SU(Xp,y)-MSU(X1:t,y)
其中,假设加入待选取的特征后,已加入特征集合的特征有t个,则待选取特征与目前已选的所有特征关于标签列的多变量对称不确定性MSU值为:
式中,C(X1:k,y)计算了t个特征及标签之间的相关性和特征与特征之间的冗余关系,能够更好的给候选特征打分,定义为:
5、利用每个特征对应的特征评价函数对该特征进行评价,将评价值最高的T-1个特征加入所述特征子集;
由于候选特征数目较多,需要迭代计算评价函数的值,本实施例中只列出选择第二个特征的计算结果:
(1)T=5时:
此时,剩下的候选特征按照SU值降序排序为:
idxleft=[66,59,64,62,1,51,67,12,9,44,38,41,32,43,40,71,58,30,34,15,33,23,10,36,70,3,4,29,56,37,35,31,14,21,25,20,24,55,72,19,17,39,26,27,57,22,11,18,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
经计算JMSU值,idxleft的第15个特征的评价值最大,为0.6734,所以第40个特征oldpeak被选为第二个代表特征加入特征子集。
(2)T=10时:
此时,剩下的候选特征按照SU值降序排序为:
idxsleft=[66,64,59,62,67,1,51,12,9,38,44,32,43,40,71,41,30,58,15,34,3,4,23,10,36,33,70,29,37,31,35,14,21,25,56,19,20,24,55,26,72,17,27,57,39,22,11,18,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
经计算JMSU值,idxleft的第14个特征的评价值最大,为0.6776,所以第40个特征oldpeak被选为第二个代表特征加入特征子集。
(3)T=20时:
此时,剩下的候选特征按照SU值降序排序为:
idxleft=[66,64,59,62,1,67,51,9,38,12,32,44,43,41,71,40,30,15,58,34,4,10,36,33,3,31,23,29,70,72,21,35,19,14,56,25,37,20,24,55,39,27,26,17,57,18,22,11,16,2,5,6,7,8,13,28,42,45,46,47,48,49,50,52,53,54,61,63,65,68,69,73,74,75]
经计算JMSU值,idxleft的第16个特征的评价值最大,为0.6792,所以第40个特征oldpeak被选为第二个代表特征加入特征子集。
6、由原始高维数据矩阵中特征子集T个特征对应的数据构建新的医疗数据集,结合分类器和K折交叉验证方法对所选特征子集进行评价。
本实施例具体采用KNN分类器,并且近邻参数设置为1。分类结果的“混淆矩阵”如下表5所示:
表5二分类的混淆矩阵
本实施例采用10折交叉验证方法来评价所选特征子集的优劣。首先将新的医疗数据集随机划分为10个样本子集,然后选取其中的1个样本子集当做测试集,其余的9个样本子集当做训练集。让10个样本子集轮流作为测试集,将该过程重复10次,最终训练得到10个分类器,并根据分类器在测试集上的表现得到10个分类准确率。
经本发明特征选择方法选择出的特征包括由运动引起的ST段压低(STdepression);由运动引起的心绞痛(1代表有,0代表无);贫血状况(3代表正常,6代表固定性缺损,7代表可逆性缺陷);胸痛类型(1代表典型心绞痛,2代表非典型心绞痛,3代表非心绞痛,4代表无症状)等,具体为:
(1)T=5时:
求出的特征编号为:
feature=[60,40,66,62,59]
所对应的特征集合为:{'laddist','oldpeak','rcaprox','cxmain','ladprox'}
经过10折交叉验证得到的分类准确率acc,分类错误率ber和auc值分别如下表6所示:
表6T=5时的10折交叉验证结果
轮次 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
acc(%) |
92 |
95.83 |
92 |
100 |
91.67 |
83.33 |
87.5 |
95.83 |
91.67 |
100 |
ber(%) |
6.67 |
3.33 |
9.09 |
8.57 |
13.33 |
10 |
7.14 |
9.09 |
0 |
4.55 |
auc(%) |
93.33 |
96.67 |
90.91 |
91.43 |
86.67 |
90 |
92.86 |
90.91 |
100 |
95.44 |
由表可知,平均分类准确率为92.57%,平均分类错误率为7.18%,平均AUC为92.82%。
(2)T=10时:
求出的特征编号为:
feature=[60,40,66,59,62,64,67,38,51,9]
所对应的特征集合为:
{'laddist','oldpeak','rcaprox','ladprox','cxmain','om1','rcadist','exang','thal','cp'}
经过10折交叉验证得到的分类准确率acc,分类错误率ber和auc值分别如下表7所示:
表7T=10时的10折交叉验证结果
轮次 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
acc(%) |
95.83 |
100 |
100 |
100 |
95.83 |
100 |
100 |
100 |
100 |
96 |
ber(%) |
4.55 |
0 |
0 |
0 |
7.14 |
0 |
0 |
0 |
0 |
6.25 |
auc(%) |
95.45 |
100 |
100 |
100 |
92.86 |
94.44 |
100 |
100 |
100 |
93.75 |
由表可知,平均分类准确率为98.77%,平均分类错误率为1.79%,平均AUC为98.21%。
(3)T=20时:
求出的特征子集为:
feature=[60,40,66,59,64,62,67,51,38,9,41,71,58,44,1,12,32,43,30,15]
特征集合为
{'laddist','oldpeak','rcaprox','ladprox','om1','cxmain','rcadist','thal','exang','cp','slope','lvx4','lmt','ca','id','chol','thalach','rldv5e','thaltime','years'}
经过10折交叉验证得到的分类准确率acc,分类错误率ber和auc值分别如下表8所示:
表8K'=20时的10折交叉验证结果
轮次 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
acc(%) |
95.83 |
91.67 |
95.83 |
91.67 |
91.67 |
87.5 |
91.67 |
92 |
100 |
84 |
ber(%) |
6.25 |
7.14 |
8.33 |
8.57 |
8.33 |
10.71 |
11.11 |
8.33 |
0 |
20 |
auc(%) |
93.75 |
92.86 |
91.67 |
91.43 |
91.67 |
89.29 |
88.89 |
91.67 |
100 |
80 |
由表可知,平均分类准确率为92.18%,平均分类错误率为8.88%,平均AUC为91.12%。
图2给出了选择不同特征数目下的AUC值,经观察发现,当K=10时,分类效果最好,平均AUC高达98%;并且不是选择的特征数目越多模型的分类效果越好,因为原始数据集中存在不包含鉴别信息的无关特征,本发明提出的特征选择方法剔除了冗余特征,最大化保留了有代表性的特征,在降低计算复杂度的同时提升了分类效果。
本发明实现了对医疗数据集的特征选择,通过最大化特征与标签的相关性,同时最小化特征之间的冗余性进行特征选择。特征选择的结果可解释性高,选择出的特征规模还可由用户自定义,且选择的特征规模大小在一定范围内对分类效果的影响不明显。实验证明,相比较于目前流行的医疗数据集的特征选择方法,本发明的方法在计算效率,分类准确率和选择的特征子集规模上明显更优。