旁白:周启源的 QQ 是默认头像——企鹅。为此,他给人的印象总是停留在八十年代。虽然他明确标明了是 99 年出身,但许多人依旧不相信他是个刚满 20 岁的大男孩,至少在技术上是如此。QQ 也是周启源的一个开源“基地”,他经常混迹在一个叫“AI 机器学习”的群上。某一天,他发现有为网友“兔子啦”问了一个技术问题。
场景:QQ 群(群名:AI 机器学习)
兔子啦:“能不能请教下随机森林过拟合一般怎么处理,训练集 R 方0.8,测试集 R 方为负值。”
余军(网名):“减少叶子数,迭代次数,树个数等”
(注:随机森林是多个决策树模型集成在一起的,决策树也是一种,能够根据输入,预测输出的机器学习模型。余军网友,说的是解决决策树,过拟合的方法。)
[第二天]
周启源(网名:显然):“嗯,其实集成模型的过拟合,应该可以从集成模型、基模型的正则化来解决,比如集成模型的话,可以用 Dropout 正则化;基模型的话,就用决策树的剪枝处理呗,随机森林说到底是一种 Bagging 集成吧”
兔子啦:“设置了树最大深度,特征随机比例是 0.8,树的个数增加到500个,但是对于未来的数据还是没有预测能力。数据取了7到11月的数据,11月的数据做了检测集”
周启源:“是不是是数据的问题了?你的数据是否是时序的呢?”
兔子啦:“嗯”
周启源:“随机森林是静态模型啊,用于时序数据,会很糟糕的”
兔子啦:“那有什么办法呢?”
周启源:“你考虑一些时序模型吧。比如:隐马尔可夫模型、条件随机场,或者 LSTM 神经网络”
兔子啦:“LSTM 神经网络吗?可是我是根据特征,判断是否贷款给客户呢,这种时序性应该不强吧。”
周启源:[白猫拿碗筷].JPG
周启源:“哦,这种不是时序数据额。我刚才听你说月份,以为是流水数据呢”
旁白:两人互加好友
场景: QQ 聊天(周启源&兔子啦)
周启源:“是不是可以用交叉验证先验一下哪个模型比较好用呢?毕竟模型有很多的嘛”
兔子啦:“我用了SVR,Lasso,Ridge,...,10折交叉验证,效果都很差,机器学习什么模型都试过了。就连 AdaBoost 这种复杂的集成模型,也不好用。训练集 R 方 0.8,但测试集,才-0.003,晕了。我是用 7~10 月份的数据作为训练集,用 11 月份的数据作为测试集的”
周启源:“会不会是你数据量太少了呢?”
兔子啦:“不会吧。60 个特征,10 万的数据”
周启源:“那的确是够了”
“我觉得,应该考虑一下:1、特征预处理一下,或者特征个数能不能再扩一扩;2、你把11月份的数据都加上,作为训练集,然后在随机抽样,选测试集。如果还是不行的话,就用神经网络吧。实在不行,就要考虑,有没有什么特征是没有考虑到的?测试集的数据会不会太少了?”
兔子啦:“哦,好的哈,我试试看呢。11月份有2000条左右,应该不会太少”
(两人下)
落幕
第二幕
旁白:秉持着开源的原则,在参加完泰迪杯之后,周启源就将其论文上传到了开源论坛上,反响不小。这天,就有一个取名为“haonanqumingzi”的网友,前来询问。
场景:论坛私信(haonanqumingzi&周启源)
haonanqumingzi:“您好,我想请问一下类似今年泰迪杯C题这类文本处理的数据挖掘题,使用什么软件会比较合适呢?类似的参考文献查找有什么比较推荐的渠道吗?”
周启源:“文本挖掘呀,当然用 Python 语言比较好。你可以用 Python 的 HanLP 模块(最新的,国人开发的,推荐)。如果是英文的 NLP(自然语言处理),可以用 Python 的 NLTK”
[提示消息:对方尚未回复你,你只能发送3条消息](注:开源论坛的限制)
周启源:“参考文献的话,在汉语言处理这一块,建议何晗的《自然语言处理入门》这本书”
“参考文献的渠道:百度学术、googlescholar、bing,都是比较好的论文搜索引擎”
haonanqumingzi:“谢谢你!”
周启源::“自然语言处理是比较难的,一般用 Matlab 做不出来。所以如果是要做 NLP 之类的项目,特别是汉语言,建议用 HanLP。”
“如果是工程开发的话,可以用 Java 的 HanLP。不过科学工作的话,及其建议用 Python”
haonanqumingzi:“因为我Python基础比较薄弱,算是小白,想问一下有什么能够比较快速掌握文本数据挖掘方法吗?因为现在要处理数据所以其实挺急的”
周启源:“首先你要明白,你做的问题叫自然语言处理(NLP)。如果是汉字,也就是汉语言处理。Matlab 是老外开发的,而且要收费,一家独大。所以相应的,虽然方便,他的功能就太拮据了。因此,如果要解决 NLP ,Matlab 你就不要想了”
“Python的话,你可以直接安装 Anaconda,然后用里面的 Spyder 来编程,Spyder 长得非常像 Matlab,绝对可以帮到你。而且,直接安装 Anaconda ,就不用安装 Python了,里面自带 Python 和 IDE。当然,也可以用 Pycharm”
“然后,你打开 cmd,输入 pip install pyhanlp,就可以安装 HanLP 模块了。”
“文本分类问题一般可以用朴素贝叶斯分类器,就是我博客上写的,也叫贝叶斯分类器”
haonanqumingzi:“好的,那请问文本分类用类朴素贝叶斯会相对简单一点吗,文本是否要先转化成向量呢”
周启源:“当然,任何机器学习问题,都要转换成向量。一个文本一个向量,一个语料库,一个矩阵”
“文本转向量的方法:BOW、TF-IDF、词向量”
“词向量涉及深度学习(一个三层的神经网络),文本分类用贝叶斯分类器(BNN)的确是很简单,效果也一针见血。我当初用了,测试集的 F1 值有 86%左右吧”
“当然,我当初用遍了绝大多数的机器学习方法。你可以加我微信:weixin_xxxxxx,这里聊天不方便。我把论文发给你。”
haonanqumingzi:“好的感谢”
大约十分钟后,该网友以“xx论坛”为备注,加了周启源的微信。只见其微信的网名为:“坎德拉”,地区:“阿富汗”,朋友圈:“未开启朋友圈”。
落幕