本项目基于逻辑回归模型完成二分类问题。
本项目为SIT国家级项目,由三人团队申请,本项目申请之初,考虑医院接诊量大,决定设计一个判别系统来判定黄疸的概率,来决定是否立马进行全面检查(当然这违背了先到先检查的原理,但是重病先治疗,也算是人之常情吧)
问题一:数据属性处理问题
1、对于皮肤颜色是否变黄,这种二分类的属性,采用1bit的哑变量0、1来对此属性进行反映;
2、对于其中的无序多分类属性,直接将k分类的属性转化为k-1个哑变量进行描述;
3、对于有序的多分类属性,比如腹部肿胀程度的描述,通常情况下我们也常会将其赋值为1、2、3(等距)或1、2、4(等比)等形式,通过由小到大的数字关系,来体现疾病严重程度之间一定的等级关系。但需要注意的是,一旦赋值为上述等距或等比的数值形式,这在某种程度上是认为疾病的严重程度也呈现类似的等距或等比的关系。而事实上由于疾病在临床上的复杂性,不同的严重程度之间并非是严格的等距或等比关系,因此再赋值为上述形式就显得不太合理,此时可以将其转化为哑变量进行量化。(初次处理为了体现肿胀程度,采取的数值处理,而在后期对比后发现,利用哑变量描述效果更加好);
4、对于连续变量,很多人认为可以直接将其带入到回归模型中即可,但有时我们还需要结合实际的临床意义,对连续性变量作适当的转换。例如年龄,以连续性变量带入模型时,其解释为年龄每增加一岁时对于因变量的影响。但往往年龄增加一岁,其效应是很微弱的,并没有太大的实际意义。此时,我们可以将年龄这个连续性变量进行离散化,按照10岁一个年龄段进行划分,如0-10、11-20、21-30、31-40等等,将每一组赋值为1、2、3、4,此时构建模型的回归系数就可以解释为年龄每增加10岁时对因变量的影响。以上赋值方式是基于一个前提,即年龄与因变量之间存在着一定的线性关系。但有时候可能会出现以下情况,例如在年龄段较低和较高的人群中,某种疾病的死亡率较高,而在中青年人群中,死亡率却相对较低,年龄和死亡结局之间呈现一个U字型的关系,此时再将年龄段赋值为1、2、3、4就显得不太合理了。因此,当我们无法确定自变量和因变量之间的变化关系,将连续性自变量离散化时,可以考虑进行哑变量转换。而在此病例中,明显年龄带来的影响不是线性的,因为在对数据进行处理的时候,直接使用数值型不太合适,所以采用哑变量对其进行处理。
ps:在上述多分类情况下, 对于哑变量选取,考虑k分类构造k-1个哑变量,因而基准变量的选取就会显得格外重要,在开始,直接选取第一个顺利类别作为基准变量,这是一种没有经过思考的选择,而在后期的调整中,使用该属性的正常类别作为基准参照(至少在病例判定这个项目中,表现的很好,这样的处理也是合乎情理的)。
问题二:数据来源及数据生成
1、数据来源:此项目数据来源为湘雅医学院,为了保护患者隐私,只提供了病症和患病与否的信息,患者身份信息皆不提供。
2、在本项目中,去检查黄疸患病与否的,基本患病的比例很大,因而在数据中,正例的比重很大,占到9成以上,有3k多份数据,而反例的数据很小,只有几百份。(在初次实验中,当时并没有接触过什么数据均不均衡的问题,因而就直接用原始数据进行模型训练了,而且效果还很好,达到了90%以上的ACC,然而在一次讨论中,有人指出这样的效果是毫无意义的,这时候才重视到数据的平衡性问题。)考虑到正例的样例3k在本项目中,数据其实勉强算足够,初步考虑进行下采样,对正例样例进行随机采取,每次获取和负例相同的样本大小,进行九次采样,训练出九个逻辑回归模型,进行集成学习,由投票决策获取最后的分类类别,最终达到的ACC在0.8左右
3、在初次进行上采样以后,再次进行分析,在初次进行上采样后,每次进行模型训练时,负例都没有改变,感觉有点不符合抽样原理,因而对数据再次进行处理,进行负例的数据生成:
3.1 对每个负例样本进行样本合成,利用knn,选取K大小为5,在其中随机抽取一个样本为基础,生成新样本,在这种情况下,使得正例样本数都达到3K,在从中各个类别中抽取1k进行模型训练,进行bagging学习,在ACC 0.8左右提高到了0.82.虽然有一定的提高,但是总感觉不太令人满意。
3.2 继续思考样本生成的问题,上述样本生成为每个负例样本都生成了新样本,这带来一些潜在的问题:一方面是增加了类之间重叠的可能性,另一方面是生成一些没有提供有益信息的样本。为了解决这个问题,对SVM模型进行思考,在SVM模型中,对决策平面起到决定性作用的,是几何间距最小的向量,我们称之为支持向量,那对照这样的思考,是不是在边缘附近生成的样本更具有代表性呢?因而基于这样的思想,只为那些K近邻中有一半以上大众样本的小众样本生成新样本。直观地讲,只为那些周围大部分是大众样本的小众样本生成新样本,因为这些样本往往是边界样本。确定了为哪些小众样本生成新样本后,在按照上述样本生成新样本。在此基础上,进行集成学习,最后ACC达到了0.88左右,至此,本项目结束,改不动了。