Kyon Huang 的博客

Github 连接不稳定,请科学上网以获取最佳访问效果

0%

注册著名的数据科学竞赛平台 Kaggle 四个多月了,当初是为了要一份数据集,而一直没有参加比赛。这个寒假终于按耐不住,决定拿入门级的 Titanic: Machine Learning from Disaster 打响革命第一枪。

Titanic 生存预测比赛是一个二分类问题。题目提供了一份乘客名单,包含了乘客的名字、性别、年龄、船票等级等信息,以及是否成功获救的标记,最终需要提交一份对测试集中的乘客是否成功获救的 csv 文件。

经过了四次提交,最后我的 Public Score 暂时定格在 0.80861,这个成绩目前在前 7%。这篇博文主要简述一下我所做的尝试和改进,并对最后一次换用 XGBoost 所得到的最好成绩的代码进行一个详细的说明,也是对相似题目处理流程的一个总结。

Titanic-public-score

阅读全文 »

我所在的专业没有开设 C 语言的课程,而大一虽然有开设 C++,但一是两门语言还是有一些区别,二是也过去了一年,很多东西都差不多忘干净了。这学期的系统级程序设计课程(即著名的“csapp”)和 C 语言密不可分,因此我借来了《C 程序设计语言》来补一补相关知识,并记了一些笔记。最终这门课拿了满绩,还是对得起自己的付出。

我认为《C 程序设计语言》是一本很好的 C 语言入门书籍,简洁清晰。这里的笔记也都是 C 语言最基础的语法。越往深里学,越会感觉 C 语言和计算机系统的相辅相成,博大精深,也越烧脑。但是现在都必须要按需所学了,还是希望有机会能够继续深入挖掘 C 语言的精粹。

阅读全文 »

Andrew-Ng-Deep-Learning-notes

早在吴恩达(deeplearning.ai)的《深度学习》系列课程在网易云课堂刚刚发布时,它就已经躺在我的计划列表中了。当时还没有特别坚定说要深入学习这方面的知识,因此搁置了一段时间。这几个月终于下定决心,排除万难,开始对这个系列的课程进行学习。

这个系列的课程给我的感觉是,对 DL 新人,以及像我这样数学不是非常好的学习者非常友好。吴恩达老师真正做到了深入浅出,但又没有抛弃那些重要的细节。在我一边看视频,一边想看看花书对应章节时,发现晦涩到根本看不动。而这个系列的课程作为入门启蒙,是再合适不过的。

另外,这个系列课程的作业全都是精心设计过的,虽然难度不大,但对巩固视频所学知识、帮助理解细节非常有帮助。如果只是听课而不独立完成作业,我认为和没有学过没有什么区别。我也打算过一段时间再重新将这些作业再写一遍。

在学习的同时,像网上很多同学一样,我也记录了自己的笔记,并将其发布在 Github 上。因为在 Github 上,在 md 文件中用 LaTex 写的公式不能正常显示,之前都是用 MacDown 由 md 文件生成 html,虽然公式可以看了,但是不太美观。之后,我恰好发现了 docsify ,一个可以由 md 文件动态生成文档网站的库。于是折腾了一会,将自己的笔记全部用它生成,最终效果如题图所示,非常美观(虽然折腾的途中也踩了几个小坑)。

因为在学习的过程中,我也看了很多网上的笔记。它们对我起到了很大的帮助,因此我也想将我的笔记分享出来,也许能够帮助到其他的同学。两周前在学完前两门课时,我在知乎的专栏发了一篇文章(即这篇博文的前身)。到目前为止,知乎的文章收获了 147 个赞,而 Github 上的 repo 得到了 42 个 star。这对我简直是受宠若惊。因此,即使这两周是考试周,我还是抽出时间学完了第三门课,并更新了笔记。一方面,这个系列课程的内容确实非常吸引我,另一方面,也是很多同道中人的认可对我有着很大的鼓励。

第四门课是有关计算机视觉和卷积神经网络的。我们知道近年来深度学习的爆红很大程度上是缘于 2012 年 ImageNet 图像识别比赛中 Hinton 课题组构建的 CNN 网络 AlexNet 有着碾压级的表现,因此我对这门课也是非常期待,希望能够在寒假结束前完成对这门课的学习。

最后,再次将笔记的 Github 的 repo 地址公布如下:

欢迎查阅,欢迎在 Issues 中交流或提出意见,更欢迎 star 一下以兹鼓励!

之前在写算法一篇通——动态规划时,看到不少相关的资料都谈到了贪心算法。原本我对贪心算法的认知比较简单,但是越看越混,尤其是和动态规划的差异,少有文章能说的准确透彻。因此,这几天也对贪心算法加以了解学习。

给出 n 个物体,第 i 个物体重量为 wi,要求选择尽量多的物体,使得总重量不超过 C。对于这个问题,我们很容易想到,因为在对总重量有要求的情况下要选择尽量多的物体,因此挑轻的肯定比挑重的划算。这样,我们将所有物体按重量从小到大排序,依次选择每个物体,直到装不下为止。

这就一种典型的贪心算法,只顾眼前利益,做出局部最优的选择,寄希望于这样的选择能导致全局最优解。

阅读全文 »

2017 年过去了,我很怀念它。

时间匆匆,转眼又到了一年的结尾。现在我坐在图书馆里,周围很多考研的学长学姐明天就要奔赴考场,其中也包括院队的几个老大哥。明年的这时我在哪里?在做什么?没有答案。

这个博客的第一篇文章在去年的 12 月 4 号写下,迄今也有一年有余了。看了看去年的总结和展望,大部分的计划都实现了,大概是因为写的比较保守的缘故。而“早睡早起”、“尽量不翘课”、“在自己真正的兴趣上利用时间”、“每天过得健康、充实、开心”这几点没有做到,尤其是最后一点。

2017 年,尤其是下半年,我时常想要遵从兴趣、学习技术、保持自信、做到更好,但又日复一日地跟懒惰、压力、无所适从、自我怀疑、对未知的未来的恐惧作着斗争。20 岁的路口有了更多的分岔,很多以前从来没有想过的东西不停地折磨着我,而我又不是那种十分豁达开朗的性格,只能尽力不在这些负面情绪中沉沦。也许在新的一年里斗争还会继续下去,我希望最终乐观战胜忧郁,我战胜过去的自己。

总之,无论是论取得的各种成果,还是既有价值观的动荡,2017 年于我个人都是重要的一年。让所有的改变在 2018 年来得更猛烈一些吧,我喜欢这种改变。

阅读全文 »

上周四去参加了第一次校招实习考试。虽然原本只是和同学凑个热闹,但结果还是着实有点打击。算法题一点思路都没有,前端知识也基本忘干净了。回到学校反思了一下,感觉从成都回来后学习状态确实很差。

另外,感觉自己把自己就预先划分到保研的身份去了。之前一直认为机器学习和前端不可兼得,自己划死了高度。实际上,很多业界人士在前端、机器学习以及其他方向都有很高水平。前端是我的兴趣,机器学习是之后可能深入研究的领域,但是如果抱着只能二选一的心态去学习,只能说明自己不够勤奋。之后的学习目标首先是为读研打好稳固基石,然后也要涉及多方面的知识。

回到正题。这次实习考试的第一题在当时没有思路,出来后同学讨论说要用到动态规划思想。之前有听过几次这个词,但是没有去了解,恰逢这个机会(以及为之后的美赛做准备),查阅了很多资料。在此总结一下我对动态规划的了解,以及用几个例子来说明,希望能尽可能地把动态规划给弄通。

阅读全文 »

在从成都回武汉的火车上开始写这一篇博客。

历时共七个月的花旗杯终于结束了。作为创队元老,我从头到尾参与了这个项目,从每个组员的奇思妙想中挖掘出我们现在的选题,在一次次的争论中始终坚持它就是最好的选择。我也投入了大量的时间和精力,写完了整个网站前端开发的每一行代码,并参与了部分的算法研究工作。整个项目也数次从被放弃的边缘拉回来,成员也有一定的变动,可以说历经波折。

到达成都后,临行前请人算了一卦的浦先生幸运地抽到答辩的最后一位,这让我们可以观摩其他队伍的答辩、对评委的关注点进行揣摩,并有较为充足的准备时间。之后,前往成都的核心队员开始昼夜不分地修改项目计划书、PPT、展示讲稿等各种材料,直到上台答辩的最后一秒。这个过程中,另外四名成员应该比我要更为辛苦,在答辩前一夜,负责算法的曹队和冯大佬更是直到凌晨三点还在讨论评委可能提出的问题(他们也确实命中了绝大部分问题,功居甚伟),而王同学也果断承担起本来属于队长的项目展示的重任。在这样的准备强度下,尽管也有遗憾,我对我们组的答辩表现可以打到 100 分,也为我们的付出感到骄傲。

最终,我们的“探方网——网络文学 IP 价值评估及预测系统”获得了第十三届“花旗杯”金融创新应用大赛的三等奖。可惜的是,我们是最后一个宣布的三等奖,也就是说离二等奖仅有一步之遥。但能在全国二十强中最终名列第四,也是大赛诸多评委老师对我们项目极大肯定。

从比较现实的角度来看,这次参赛经历带给我个人大学期间第一个有分量、对保研有加分的奖项,以及一点和劳动量好像不太对等的奖金。当然,我还有一些对我而言更为重要的东西与看到这篇博文的每一位分享。

huaqi-prize

阅读全文 »

作为互联网上最著名的数据科学竞赛平台之一,Kaggle 无疑是数据从业者和爱好者最喜欢的社区之一。最近,Kaggle 发布了 2017 用户调查报告,共有 16000 余名用户参与的这份调查可以让我们对数据工作者的各类信息有一个了解。

其中,对于“工作中遇到的障碍主要是什么?”这个问题,有 49.4% 的被调查者选择了“脏数据(dirty data)”这一项,占该问题所有选项的第一位。也就是说,数据科学家一般最常见的困扰就是要对手头的数据进行大量的预处理工程。

在业界有一句广泛流传的话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。从这句话可以看出,数据的好坏对于机器学习模型的最终效果有着极大的影响。

然而,现实世界中数据大体上都是不完整、不一致、含噪声的脏数据,无法直接使用,或结果差强人意。为了提高数据的质量,数据预处理技术应运而生。实际上,在一个基于机器学习模型的实际应用中,对于数据的预处理工作所需的时间和精力可能远大于模型和算法的选择和应用。

阅读全文 »

更新:10 月 26 日我跟朱老师进行了一次时间较长的近期学习成果展示,并且对于接下来的学习方向聊了一会。结合花旗杯进入决赛的事情,将此文做一次更新。


这段时间博客更得不勤,因为实在太忙。解释器构造、系统级程序设计、Spark、公选课作业、算法、英语、大创…每天睁开眼睛就想起这么多学习任务,让人不免感觉身在虎山,危机四伏,战战兢兢。

只有在这种强度的学习压力下,才会发现自己的很多问题,其中最致命的就是自己的学习效率太低了,很难集中注意力去解决手头即时的任务。快速学习和解决问题的能力是程序员必备之一,我在这方面可以说不及格。再就是还有惰性心理,浮躁,不能保持健康的作息,以至于高效学习的时间不足。

同时,每天忙碌的同时也会胡思乱想:我真的适合读研吗?自己学习前端知识的时候还是比较开心的,和现在学习 Spark 的态度可能还是有一些差别,并且也在要不要向机器学习方向深入学习而犹豫。读研以后,不是说完全不可能,但是基本上以后就不会从事前端领域的工作了。确定喜欢的领域和确定喜欢的人一样,难以割舍的感觉似有若无。但是对我来说,父母和老师都给了很大的期望,自己也没有做好找工作的准备,争取保研是箭在弦上,不得不发。我能做的,只有将弦拉的更满,箭一发便是千钧之力,穿越更高的云霄。

现在确实有些迷茫,每天过的感觉不到自己有实打实的进步。希望狮子座的天性能够帮助我顺利度过这段大学最忙碌也最缥缈的时期。

定期任务

每天

  • 一道 LeetCode
  • 六级单词

每周

  • 《算法》一节
  • Coursera 华盛顿大学《机器学习基础:案例研究》课程一节(尽早刷完这个)[已完成]
  • 六级练习题若干(有时间可以做一整套题)
  • 一篇会议论文阅读(abstract 和 introduction)[按照标准认真读,做一些简短的笔记]
  • 12 月后读薄 CSAPP 系列每周两篇

学期计划

给这个最重要的学期列一个总体的学期计划。

课业

三门必修课,解释器构造实验以及系统级程序设计的理论和实验课,必须满绩

花旗

一个月的时间,逼自己尽全力去争取最好的结果。

实验室

积极完成朱老师布置的任务,并且和他交流。也要关心组里其他同学的工作。

朱老师建议我先学习机器学习的应用。根据这个建议,我把对吴恩达的《机器学习》课程的学习计划暂时改为华盛顿大学《机器学习基础:案例研究》课程的学习。这门课更偏重实际应用,也可以避免我绕到数学内容里。

论文

阅读朱老师推荐的会议,积累感觉找方向。多和朱老师交流心得。

每周抽时间细看一篇,也算是练习英语阅读。重点读 abstract 和 introduction。可以参考 [Paper Reading] Efficient Estimation of Word Representations in Vector Space 的格式来做笔记。为了督促自己,可以考虑申请一个新的知乎专栏或者在 PaperWeekly 做笔记。

算法

每天一道 LeetCode 加上自己控制页数的《算法》阅读。下学期可以做九度 OJ 和北大 OJ 练手。

英语

不要放弃六级,老师们都很看重英语能力。每天还是要抽时间背背单词,有时间练习一下听力、翻译、阅读、作文等。题目重在整理,而非数量。

项目

有时间自己做一些开源小项目。没时间就算了,还是以自己参与度较高的科研项目为重。

机器学习

暂时考虑按照以下路径,这个学习肯定搞不定,但是要自己把握进度:

  1. 学完 Coursera 华盛顿大学《机器学习基础:案例研究》课程并完成所有作业
  2. 通过《利用Python进行数据分析》的阅读学习,掌握 sklearn、numpy、pandas、matplotlib 的使用
  3. 吴恩达《机器学习》课程:绕不开的必修课
  4. 建立大局观的书籍:中文:周志华老师的西瓜书《机器学习》和李航老师的《统计学习方法》;英文:《Patten Recognition and Machine Learning》,《Elements of Statistical Learning》
  5. kaggle、阿里巴巴天池实战

其他

  • 组队参加美赛。抽时间了解一下赛事信息和要求。有时间点一些技能点。
  • 可以考虑申请软件著作权(当然要有比较好的项目)。
  • 坚持把日记给记好。

忙乱时方显修为,管理好自己的时间,专心于自己的事业。自己能走多远,很大程度上取决于这个学期。

那就继续人间游 虽说不太平
明知山有虎 偏向虎山行

— GAI / 艾福杰尼 / Kungfu-Pen 《虎山行》

根据实验室的要求,现在在啃《Spark 机器学习》。这本书和市面上大多数 Spark 书籍一样,全都基于 Spark 1.x。在 Spark 版本已经升到 2.2 的今天,敲这本书上的代码可以说是遍地是坑了,很多东西都已经变更,而且很难找到正确的解决方案,弄的我很是烦躁。

没办法,问题要一点一点解决。我决定先从理清《Spark 机器学习》提到的某些 Spark 2.2 提供的概念、模块和配合工具下手,主要关心一下几点:

  1. RDD 是什么?在升级到 Spark2.2+ 后有什么改动?
  2. Dataset 是什么?DataFrame 又是什么?
  3. MLlib 是什么?在升级到 Spark2.2+ 后有没有变动?如何使用?
  4. IPython 是什么?如何配合 Spark2.2+ 使用?
阅读全文 »