数据挖掘实战之天池精准医疗大赛(2)——算法思路

Part 1-2 算法思路:

下面我们根据前文对数据集的认识,分析问题和解题思路。

其实讲述算法思路是一件十分复杂和困难的事儿,按照自上向下的顺序结合一位大佬的文章,谈一谈:

一,说到思路,其实就是数据、特征、模型三个部分,数据预处理服务于特征工程,特征服务于模型,又决定了模型的上限。这三部分密不可分,而且在后续的流程中还会返回来完善、改进前面的工作;

二,开始我们仍未对特征作用于模型的效果有所尝试,故首先建立一般框架,尤其是对新手来说的一些流程和经验,但是某个问题、思路说起来很容易深入下去,钻牛角尖;

三,从问题入手,这是一个有监督回归问题,常用的回归方法有哪些呢?

刚学习了算法的小伙伴,可能对于回归的算法心中只有一种:最小二乘线性回归;其实,各种分类算法都有他的回归算法实现。

少略总结如下:

线性回归类(lasso回归、岭回归),决策树-集成树回归类(决策树回归,随机森林回归,GBDT回归,xgboost回归),

SVM回归,神经网络回归等。调用sklearn包均可实现。。

四,泛泛的画图说一下分类与回归,具体内容还有待完善,毕竟我也是新手:


本次血糖预测是一个回归问题,但是前面分析也看到了,血糖分布极不均衡,而评分标准又是MSE,MSE会放大误差。

(此处转载一位大佬的分析,十分透彻,并作了适当修改)

一般把大于6.1的认为是高血糖,大于11.1的认为是糖尿病。在训练集提供的5642个实例中,大于6.1的911个,大于11.1的97个。如果测试集的分布与训练集一致,大约有17个实例血糖在11.1以上

拿测试集来说,即m=1000,如果把某个实例5.5预测成5,它对误差的贡献是(5-5.5)^2 /2000=0.000125,如果把20预测成5,误差为(5-20)^2 /2000=0.1125, 它是前者的900倍。如果你的预测结果少一个高值,那么误差大概增大0.05-0.1吧, 有10个预测不出,误差就0.5-1了。再考虑这个题目要解决什么问题, 如果根本测不出谁是糖尿病患者,只是纠结正常范围内的小误差,这算法就没意义了
一开始我的计算结果也是这样的,这可能是源于大家都在使用Boost迭代改进算法,它的原理是不断迭代,并在每次计算时加大前一次算错实例的权重,可以想见,本题中80%多都是正常血糖值,于是它模型拉向了均值,大量分枝在5附近做细小切分,后来试了等深分箱,也没什么用。 基于这个原因,我尝试修改了算法的损失函数,评价函数,实例权重等等,但效果都不太好,这也可能因为我个人水平有限。后来直接把回归问题改成了 先分类后回归,效果还可以。
作者:xieyan0811
链接:https://www.jianshu.com/p/3e4e456b397e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这一部分算法思路比较深,对于新手并不友好,需要慢慢体味, 总结起来就是,血糖值高的(或者说糖尿病的)的样本的正确预测是模型的关键,是减小误差的根本,因而一些模型、算法并不适合,甚至这样一个回归问题应该做到先分类、再回归。
再看上图,对于其他类型的分类、回归问题,都要有一定思路思考你的具体的问题,并提出相应的算法思路。

五,要注意数据量少,避免过拟合的问题。此处考虑模型和特征问题,有人说加上id竟然有用,这种特征实不可取,一定不具有泛化能力,体检日期若范围较大可能会有效果(实际上也是和天气相关),该问题体检时间比较集中在10,11月份的某几天,故体检日期字段去掉比较好。在构造特征的过程中,也要控制过拟合的问题。另外在调参中也要注意防止过拟合,提高模型鲁棒性,这一问题我们在比赛过程中一直难以衡量,用sklearn中的验证曲线、学习曲线函数很有必要,今后还要多多尝试,否则线下表现好了仍然要担心线上表现,因为你并不知道是否发生了过拟合。

六,特征工程是这一类问题的核心,一般模型我们就选工业上速度快、性能好的几个,并没有太大选择空间,不会去考虑神经网络、SVM那些的回归方法~ 新手们到达模型这一阶段时,有必要学习一下之前学习不曾涉及的xgboost,lightbgm等等。故特征工程会占用很大的精力,特征工程是一项十分复杂的东西,而一些课程、书面上的介绍十分浅显,内容不足,缺乏实践,详细的特征工程后面会细心介绍、探索。

七,我们从算法思路,到模型、特征,最后才是底层的数据分析和预处理,特征决定模型的上限,而数据的处理则是特征的基础,无需赘言吧,缺失值必须要填充,而数据的异常点(噪声或者标注错误的),也要通过数据 分析的手段识别出来并处理,后文会对此介绍。

八,杂乱无章的罗列了这些算法思路,希望对初次实践的新手有所帮助,我再次转载了那位大佬的一段话,一些想法:

(1) 一般去医院看病有问题的居多,所以相对正常值有些偏差,医生也可能作出有倾向性的判断。

(2) 该题可以把已有的知识和算法融合,使用一些现成的数据,比如正常范围。

(3) 周末检查拿结果的可能是比较特殊的病人。

(4) 岁数分成几段,更具代表意义。

(5) 可将数据修改为正常值,偏高,偏低,几个层次,做分段特征。

(6) 考虑病情比较严重的情况,可能需要分开处理,作为噪点先拿出来。

(7) 预测只是想知道被测试人是否为糖尿病,而不关注是预测与实际值的微小差距,所以也可以将其处理为分类问题。

(8) 可能需要对误差函数和评价函数做微调。

作者:xieyan0811
链接:https://www.jianshu.com/p/3e4e456b397e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


总结:对于数据挖掘,没有固定的流程和思路,也没有绝对的正确与错误,不同的业务领域,不同的目标值的分布,对于数据处理、特征工程都会有不同的套路,随时出现的一些小想法都可能对算法的改进有所帮助。既要有一整套方法论,也要有各种创新的idea.
对于算法的思路就介绍到此,后面每一部分都会渗透着整体的算法思想,还要在实践的过程中不断加深对问题的理解。考虑到每一步流水线都充斥着sklearn包的使用,下面一节对此工具包进行简要介绍~熟悉的跳过~


猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/79260889