为了个性化的预测患者的患病情况(生存情况),都会使用影像组学分数来进行评估。但是分类器如何产生rad score呢?
最常见的就是lasso-logistic回归,使用lasso回归的系数(coef)与对应特征的线性组合作为评分,这样每位患者只要将自己的特征的分数带入公式,就能计算出自己的radscore得分,进而从列线图中知晓自己的疾病预测结果。
然而,lasso回归不是万能的,对于我所处理的数据(100多个样本,1000多个特征),属于n<<p的情形,实测lasso的表现很糟糕,并不能有效的降维。
对于这样的高维度数据,使用支持向量机会是更好的选择,事实证明,SVM的确能获得比lasso更好的AUC且更不容易过拟合。
然而使用SVM怎么计算radscore呢?
开始由于并不了解SVM的数学原理,仅仅会调包一直也没有明白如何计算。后来学习了一下相关的数学原理,可以得出,在使用线性linear核函数kernel的时候,我们是可以获得模型中的coef_的,这个参数和上面lasso的一样,计算coef_和对应特征的线性组合可以作为得到radscore的公式。
此外,吴恩达的机器学习课程中也提到了
一种选择是不使用kernel(也称为linear kernel),直接使用x: 这种情况是当我们的n很大(即维度很高,features很多)但是训练样本却很少的情况下,我们一般不希望画出很复杂的边界线(因为样本很少,画出很复杂的边界线就会过拟合),而是用线性的边界线。
一种选择是使用Gaussian kernel: 这种情况需要确定σ2(平衡bias还是variance)。这种情况是当x的维度不高,但是样本集很多的情况下。如上图中,n=2,但是m却很多,需要一个类似于圆的边界线。(即需要一个复杂的边界)
如果features的范围差别很大,在执行kernel之前要使用feature scaling
虽然我的数据符合维度很高,训练样本却很少,但是当我们绘制出了一些特征的散点图发现,大量的特征都是难以用线性方式区分的,在尝试过程中,使用linear kernel 得到的结果非常糟糕,AUC一度维持在50左右。
所以只能使用gaussian kernel,这样的效果确实要比线性核函数好很多,但是由于数据的特征本身质量很差,医生方面又根本对数据情况和数据内容不了解(相当于甲方给乙方数据,然而甲方连数据是什么都不晓得,真的不知道这种医生是怎么当上的),效果也很有限,
特征选择结果.png
可以看到,在进行特征的重要性排序时,最佳的ROC也只有0.62,在使用了RBF kernel以后,可以将模型的AUC最高提升至0.67。
当然,特征工程部分十分粗糙,考虑接下来把之前删掉的一些数据进行特征值填补来增加数据集。
但是一个问题就是RBF kernel是非线性核,是不可能得出一个可以用来进行线性组合的coef_的,最早使用SVM radscore方法的北京大学协和医学院的论文中和后续的浙大论文中都是适用的线性核计算的radscore,但是我们的数据质量是没法使用线性核的,那么
-
优化数据质量,将特征的有效性显著提高
-
不使用radscore,只做出一个模型的auc结果,将后续工作写到展望中,迫不得已。
Liu Z , Zhang X Y , Shi Y J , et al. Radiomics Analysis for Evaluation of Pathological Complete Response to Neoadjuvant Chemoradiotherapy in Locally Advanced Rectal Cancer[J]. Clinical Cancer Research, 2017:clincanres.1038.2017.
得到的结论就是如果想要使用svm,必须使用线性方式来得到coef_,我觉得应该是我了解得还不够,应该有其他方式进行转化吧,希望研究影像组学的同行前辈有发现可以一起讨论。
网友评论