今天还是因为ROC的问题被审稿人难住了,才意识到自己统计知识的匮乏,事情的经过是这样的,我在文章中加了一个这样的图
然后审稿人就提了这样一个问题
In figure 5, the difference between ROC curves of training and test data sets suggest overfitting. What model was used to computes this. Also, ROC should have many points. To achieve this with, instead of passing predict_class use predict_proba function. The exact syntax of the commands may depend on the package. The essence is to get probabilities rather than 0 or 1 prediction of the class
大概意思就是你这ROC过拟合了,用的什么模型构建的,本该有很多点的,然后贴心的给我提供了解决方案
但是,按着审稿人提供提供的思路我并不能解决这个问题,于是我上网搜索找了这样的东西
关于ROC曲线画出来只有一个点
原因可能是我当初画ROC的时候直接用了分类的预测值,而没有用上概率这玩意,被划分为正类的概率,所以我尝试去查看我的原始R代码,却发现我好像并不是这个原因导致的,概率值也无限趋紧0跟1,所以默认还是0跟1,但是这时候才注意到R是报了这样的warning的,
Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一
又以这个warning进行搜索,找到了这样一篇博文
广义线性模型 R--glm函数
看完,基本明白自己错误发生在哪了
第一个警告:算法不收敛。
由于在进行logistic回归时,依照极大似然估计原则进行迭代求解回归系数,glm函数默认的最大迭代次数 maxit=25,当数据不太好时,经过25次迭代可能算法 还不收敛,所以可以通过增大迭代次数尝试解决算法不收敛的问题。
但是当增大迭代次数后算法仍然不收敛,此时数据就是真的不好了,需要对数据进行奇异值检验等进一步的处理。奇异值检验,呵呵,有点高估我的能力了,兄弟!
我们再来看第二个警告
第二个警告:拟合概率算出来的概率为0或1
这个警告的意思就是训练样本为'setosa'类的概率不是几乎为0,就是几乎为1,并不是我们预想中的logistic模型的S型曲线
出现这样的原因:当样本数据完全可分时,logistic回归往往会导致过拟合的问题,即出现第二个警告:拟合概率算出来的概率为0或1。
出现了第二个警告后的logistic模型进行预测时往往是不适用的,对于这种线性可分的样本数据,其实直接使用规则判断的方法则简单且适用
所以,到这,原因是找到了,数据本身的原因,如何解决呢,机器学习过拟合问题,对不起,我还是个菜鸟,谷歌搜索,出现这样一篇文章
机器学习中的过拟合
解决方案很多,但有一个思路完全可行,
交叉验证!嗯,我就干脆将训练集跟测试集直接合并为一个进行验证,虽然没有之前分开具有说服性,但,也是一种解决方法,于是有了下面这张图
嗯,好了,这样的解决方案,个人还挺满意的,我是审稿人肯定还是会给过的!我是小琪,一枚有点小理想的小医生,咱们下期见!
作者:解琪琪
链接:https://www.jianshu.com/u/bcb81276c29d
来源:简书
参考学习资源:关于ROC曲线画出来只有一个点
广义线性模型 R--glm函数
机器学习中的过拟合
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处