2017总结
上一个在博客发表的总结是 2011 年,之后我就“一蹶不振”了。2017 这一年最大的变化在心态,肩上责任重了,考虑的问题同之前不一样了。
17年填掉了几个旧坑(animation package bug,压箱底的“如何从衍射实验中观察出DNA双螺旋结构”),还做了一个slack bot(作品自己非常满意,但是还有bug,尚未公开),但是也有很多仍旧未完成的项目在等待着我填坑。另外最近我和同事一起做了个 side project,这个要持续做下去,还需要很长很长一段时间(1~2年)。总之是旧坑填不完,新坑又开挖。最关键的问题,要治好自己的拖延症。
明年将是一个重要的分水岭,在今年我彻底理解了做“隐士”是不行的,需要推广自己,让别人了解自己,所以今后会更加积极的参与到自己所属行业的活动中,争取留下自己的名字。做科研的 Lijia Yu 有好几个,同名同姓的人就更多了,希望以后搜索时能在搜索结果的首页找到自己(虽然我不一定还会继续做科研;)
)。
另外,我争取在近一个月内填充完我欠的博客内容(论文研读,生物信息测序方法,以及量化投资指标),之后我就会放慢更新中文博客的内容,基本上每月一篇,学术方面的东西可能就不会再写了,以后主要写一些杂七杂八以及个人爱好的东西。所有学术相关的博客今后都只会更新在英文博客中。
2017技术栈总结:
- 开始学习javascript
- 理解基因组基本概念,喜爱研究各种二代测序方法应用
- 理解了 biology 和 biomedical science 的异同点
- 开始学习量化投资,对于带数字和公式的东西都很感兴趣
- 开始理解中英文混排的排版要求(加空格)
2018要做的事情:
- 需要找时间重新捡起物理以及化学
- 需要进一步加深对各种统计学方法的认识
- 合理规划时间
- 尽最大努力填坑
中小学生科技竞赛
首先要吐槽一个事情:最近在指导一个高二的中学生独立做癌症相关的科学研究,她要参加一个重要的科技竞赛,首先需要在州内参加比赛,如果做得好,她可以被选上参加全国比赛。
说是指导,其实就是我替她写所有的程序(R语言),这个研究里包含两种癌症的数据,我写完程序,她用一组数据跑一遍确定程序能运行,然后换一组数据再跑一遍(她会把程序文件复制一份,改数据路径和变量名字,就是自己写的程序了 -_-
)。课题做了将近两个月,来实验室不到8次。她对写程序一点都没学会,连安装软件包不提醒的话都不知道如何安装,记得来实验室的第一天,就告诉她要自己主动学习一下编程,想必给她的自学材料也一点没看过。从不问我问题,我问她懂不懂,她都说懂。我还发现她连excel里自动填充功能都不会用。
根据同她平时聊天以及她做课题的表现,这位同学应该是一个非常聪明的学生,但是她并不一定能完成这个课题,我觉得这个课题已经超出她的能力范畴了。美国的中学教育其实比国内的中学教育让学生觉得更加辛苦,不仅要学习成绩好,体育运动好,参加各类社会志愿活动,还要有时间做科学研究参加竞赛。这不是只比拼一次高考成绩,而是各种活动都如同高考那么重要。这个高中生曾说过,如果要坚持体育运动,就要牺牲自己睡眠时间。但是这种科技竞赛,如果是几个学生一组来完成一个课题,我觉得整个科研过程和结果都比较可信。若是单个学生独立完成科研,能做到的人其实是凤毛麟角。然而每年参加这种个人科研比赛的高中生还是满多的,这其中的工作很多都是家长或者大学里头的研究人员替他们做的。这种在评审时一眼就能看出来造假,让自己变成比赛分母的事情,当初何必浪费时间去做呢。究其原因,因为这个经历可以写在自己的简历上,为申请大学做准备。
不光美国的科技竞赛如此,国内的科技竞赛也有这样的现象,据我所知,我所还出现过小学生来做科研实习的事情,小学生来中科院打酱油,这不是扯么。通过这次经历,让我感慨万分,以后再看到什么中小学生发明了什么什么,科研做了什么什么,心里都要打个问号,如果是个人比赛的结果,基本都不会那么相信。
此外我还想说比赛获奖,有时靠得也不是个人能力,而是家长的能力,靠大树好乘凉。国内校级,区级的比赛,有关系就能脱颖而出,这种事情已经见怪不怪了。就连可以来大学和科研院所做科研,也应该是靠父母的关系。就我上面所说的两个学生例子,美国学生家长父母都是医生(精英移民的标配),网上还能找到关于他们的个人采访,这个学生做个志愿者取得了什么成绩都会上本地的新闻(为了申请大学铺路),新闻中还说她是同龄人中的领导者;那个小学生,父母也都是在研究所工作的。
综上所述,穷人家的孩子做到阶级向上越迁,真的很难,输在起跑线。
=================
2017.12.25 更新
知识分子上登载了一篇文章《清华,北大,人大资助招生选拔出更优秀的学生了吗》,结论是获得自主招生加分破格录取的学生通常是那些来自城市,父母受过大学教育,就读重点中学的优势阶层学生。这项研究说明了两个问题,家庭背景好的学生更可能获得自主招生加分。而因自主招生进入名校的学生们无论在学业表现、社会活动能力、非认知能力,还是就业去向上,都和普通高考统招生没有明显差异。
==================
2018.01.22 更新
介绍个科技竞赛作品。
https://www.dnaloopr.org/
不得不说题目起得真好《DNALoopR: A Novel High-Performance Machine Learning Predictor to Identify Genome-Wide 3D DNA Interactions in Cancer》,这就是一篇标准的生物信息工具类论文的题目啊。再看网站,非常专业的购买了SSL保护,上面一大堆媒体报道。结果要使用软件时,需要登录,竟然不是开源的。登录后再看软件,就一个输入,上传一个ChIP-seq文件,填写email地址,然后网站在计算完之后会将结果发给上传文件的人,连个样例都没有。。可惜手边没有ChIP-seq数据,否则还可以上传个文件测试一下。这个同学成功被斯坦福录取,并有机会出席了去年的诺贝尔颁奖典礼。
从外观上说,该网站的工程量已经很大了,可惜我无法对这个项目的软件和算法进行评价。高中时期的我,肯定做不出来这么牛X的项目。。。
这个男人来自地球
这部片子其实我大学时就看过,一开始逞能看的是英文版,结果差点没看下去,然后换了中文字幕才看完第一遍,那时纯粹把这个当作故事,没有去详细思考这部片子为什么受欢迎。
今天我又找到了在线的版本看了一遍,John Oldman看似像讲故事一样的叙述,其实给他的朋友灌输了宗教产生的另一种可能。这次欣赏时,剧情里我最喜欢的一段话是:
EDITH: You think that’s all religion is about? Selling hope and survival?
JOIN: The Old Testament sells fear and guilt. The New Testament is a great work of ethics, put into my mouth by better philosophers and poets than I am. But the message isn’t practiced. The fairy tales build churches.
当然,朋友们听过John的故事后的反映出乎了意料,几位教授讨论了这究竟是真是假,EDITH甚至陷入了信仰的崩塌。John每一个口述的事情都有文献或者专家的推测。但是当把这一切组合成一个故事时,影片中的各位仿佛身陷其中,无法辨别(验证)其真伪。但是如果仔细想想John所说的话,他得过黑死病并没有留下伤疤,这本来就是一个很好的证据,说明John是在编故事的。可惜剧中的人物并没有再追究下去。
正如知乎上 大家对这部影片的看法,本片之所以有让人无法辩驳的推演逻辑的原因是它参照了典型的科学研究的步骤,即观察->假设->验证
。在逻辑上基本无懈可击,让人感觉故事完整,令人思考“究竟是不是真的是这样”,这正是该片的独特之处。
关于宗教,我只想说,宗教的起源最好阅读一下《金枝》(the golden bough),这个东西是随着人类社会的发展需要而产生的,也会随着社会的需要而变化。
EDITH: Christianity’s been a worldwide belief for two thousand years.
JOHN: How long did the Egyptians worship (Goddess of health, marriage, and wisdom)? The Sumerians, Ishtar? Sacred cows wander freely in parts of India, as reincarnated souls. In a few thousand years they’ll be barbecued, and the souls will be in squirrels.
模型融合:Stacking model
模型融合的方法有5种:1. 投票,2. 求均值,3. bagging,4. Boosting,5. Stacking1。
其中投票运用在分类问题上,求均值是最简单的回归问题的模型融合方法。
bagging就比较复杂了,有放回的抽样,对抽样的样本建立模型,然后对结果进行1.投票或者2.求均值。
Boosting是用迭代思想,我先建立一个简单的模型,然后找到这个模型的剩余误差,接下来在用另一个模型来预测前一个模型的剩余误差,以此类推,这样会产生多个若分类器(模型),然后给每个分类器一个权重,最终组合成一个强分类器(模型)。
上图来自于参考资料2。
Boosting的权重究竟怎么选? 目的是让加权后的错误最小化(损失函数数值最小)。 损失函数有:
- 无权重平均
- 加权平均
- logistic MSE
- hinge … 等等
例如决策树,计算weighted impurity scores,一个二分类问题:根据class1和class2中的比例,求信息熵2。
好了,说了这么多废话,终于到重头戏,stacking方法了,这个方法网上的文献不多,混乱程度那是相当高。 stacking 方法的第一层是类似cross validation,对于训练集合分成10份,用其中的9份做training,1份做validation,另外在对test集合做预测,这样,最后会得到一个完整的训练数据的validation结果,以及测试数据的预测结果,然后将这两个结果分别作为第二层的训练数据和测试数据,进行预测3。
上图来自于参考资料3。
那么问题来了,究竟是对测试数据集在第一层时,做10次预测,并将10个结果求均值或者投票,还是每次只对测试数据集的十分之一做预测? 我个人认为是后者,如果已经对10次预测结果求均值或者投票了,那么就等于已经做了一次第二层对模型融合。个人观点,不一定对,主要是我没有找到3中的代码里对第一层的测试数据集合求均值或者投票。
另外在第二层做模型融合时,regression数据用glm,classification数据用boost,我测试过regression数据用boosting tree,结果糟糕的一塌糊涂(仍旧是个人观点,不一定对)。
后记另一件事情:我发现我在5年前就用gbm
方法做预测,但是我完全不记得我自己做过这样的事情了_-_
。如果觉得理解不了stacking model究竟是用了哪种方法在第一层做预测,直接用python或者R的软件包。在独立日写了一天的代码,最后才发现软件包的我并不感到高兴 :(
。
参考资料:
Kaggle奔驰猜数字挑战赛
大约5天前,Kaggle的一项由奔驰汽车公司主办的机器学习挑战赛变成了猜数字挑战赛。比赛原意是通过给定的抹去信息的数据来预测y值,预测结果的准确性根据决定系数来评估。
参与者
在Kaggle平台提交测试数据
的预测结果后,平台会先检测19%的预测结果,产生参与者
在公开排名榜的名次。还有81%的预测结果的检测不公布排名,参与者
就有了一个自己也不清楚的非公开排名榜的名次。等到比赛结束,公开那个“非公开排名榜”的结果,产生参与者
的最终排名。
这个方法本来是为了防止大家通过排名榜来“撞出”测试数据的预测结果,由于这19%和81%的测试结果排序是固定的(不是每次随机挑出19%和81%),在这次的比赛中公开排行榜彻底沦为娱乐工具。
一个参与者
在Kaggle论坛上公布了他们的发现,可以用公开排行榜反馈的决定系数来找出19%测试数据的真实值。
原理十分简单:
决定系数(R squared) \(R^{2}=1-\frac{\sum_{i=1}^{N}{(y_i-\hat{y})^2}}{\sum_{i=1}^{N}{(y_i-\bar{y})^2}}\) 分母是个常数,被称作总平方和,记为 \(S_{tot}\) 。
首先提交一个所有预测结果都为0的答案,得到:
\[R_{0}=1-\frac{\sum_{i=1}^{N}{(y_i-0)^2}}{S_{tot}}=1-\frac{y_1^2}{S_{tot}}-\frac{\sum_{i=2}^{N}{(y_i-\hat{y})^2}}{S_{tot}}\]然后将预测结果第一个数值改成100,再次提交,可以得到: \(R_{100}=1-\frac{(y_1-100)^2}{S_{tot}}-\frac{\sum_{i=2}^{N}(y_i)^2}{S_{tot}}\)
通过联立两个方程,就能求解出\(y_{1}\)的真实值。
该方法公布人做了网站, 号召大家一起来“撞库”。目前已经停止提交新的撞库结果,因为有人蓄意提交假信息。
说来说去,机器学习比赛中撞库的事情常有发生大多是根据评判测试数据的方法来猜数字。如何能避免这种情况,评估测试结果的19%和81%这两组数据最好要随机产生。在预测数据集足够大的情况下,才能避免此类情况产生不良后果。
最新进展,官方出了一个声明,表示不会公开“公开排行榜”的结果,并且强调若参赛者若过分关注公开排行榜的数据结果,会造成模型过拟合。