图不全看链接

2016/06/27更新:

评论里有不少同学从严谨、科学的角度提供了很多意见,非常感谢。然后我补充说明一下:

1.我的主业是产品运营,这是我在coursera学习machine learning课程以后、拿来练手的题目,所以从严谨的角度来看,一定有很多问题;

2.已经有无数前辈用这种方法或类似方法研究过,我肯定不是原创(别怂恿我搞科研);

3.非专业同学从零开始学习machine learning课程并且小露一手,是完全可能的,互勉;

===================================================

前几天灯神给我发了一篇文章,讲的是用机器学习的方式来判定红楼梦后40回到底是不是曹雪芹写的。

我这段时间也在自学Andrew Ng的机器学习课程,还差4周就能完成课程了。

计算机是一个很强调learning by doing的学科,于是我也来「学以致用」,用刚学到的SVM算法来分析下雪芹老师到底有没有写后面的40回。

作为一个从没看过红楼梦的人,我的大致思路是这样的:

  1. 受到全职猎人里蚁王破解会长无敌招数的启发,每个人的写作都有些小习惯,虽然文章前后说的内容会有差别,但是这些用词的小习惯不容易改变;

  2. 用开源的分词工具把全书分词(python的jieba分词),然后统计词频。把出现频次超过100次的词语找出来,人工去掉一些可能因为文章内容造成前后出现不一致的人名、地名;

  3. 然后每一章按照2中的词频表,看这一章中出现这些词语的频次;

  4. 前80回、后40回各选15回作为机器学习的数据,让机器学习这些章节的用词特点,然后推算其他章节的用词特点是属于前80回呢、还是后40回;

  5. 如果机器根据这些用词特征推算的是否属于后40回的结果跟实际的结果吻合,那么就说明后40回的写作风格跟前80回有很大不同,很可能是两个人写的;

好了,下面我尽量少涉及数学跟编程的知识,来一步步解读机器学习是怎么完成这个问题的。

生成全书的词频表

我截取了其中一段的词频表。像宝二爷、黛玉笑这种涉及人物的词语,可能前面戏份多、后面戏份少,所以就不选它们作为用词习惯的特征,而像忽然、故、只要、可不是这种承接性质的碎词,就不太容易会受情节的影响,所以适合选出来作为用词习惯的特征。

最终,我按照出现从多到少排序,选择了278个词作为机器学习的用词习惯。

将120回的词频进行统计

接下来我把每一回出现这278个词的频次统计出来,得到我们给机器学习的样本。这个样本的样子大概是这样的:

比如以B行2列举例,说明在第一回里面「道」这个动词,出现了36次。

通常我们在进行复杂的事情前,喜欢先简化问题,或者给自己一些直观的图表,以便了解问题。机器学习也是一样的。

我尝试着在图上把前80回和后40回习惯用词出现的频次画出来。以第一回为例,x1坐标代表「道」出现多少次,x2坐标代表「说」出现多少次,x3坐标代表「也」出现多少次......x280坐标代表「则」出现多少次。

什么?超过三维了,那人类的大脑可是没办法理解的啊。

没关系,当我们用灯光照射一个立体的图时,平面会有它的影子。这个影子虽然没有立体图的信息这么丰富,不过我们看影子还是可以猜出来大致的样子。对于高纬度的问题,我们也可以用投影的方式来降低纬度。

虽然信息损失了不少,不过能给我们一个直观的感受。

这个是120个章节的用词习惯从278纬降到3维以后的图,红色+的点是前80回,蓝色o的点是后40回。

从这个图可以直观地看到,确实在用词习惯上有明显的区别。就算我们没有机器学习工具的帮忙,也可以大胆猜测后40回是出自于另外一个人了。

下面我们用机器学习来看精确一点的判断。

机器学习

通过课程我大致了解了SVM的原理和简化版问题的算法实现,不过对于复杂问题我还是没这个编码能力的。于是用python的scikit库来帮助我来完成这个预测。

算法的步骤很简单,前80回、后40回各选15个来喂给机器学习它们的特点,然后把剩下的章节输入给机器,问它们属于前80还是后40。

看out[44]的结果,代表了机器预测这120回的用词习惯到底属不属于后40回(0为不属于,1为属于)。

如果你看不懂上面的代码,没关系。我告诉你结果好了。

机器在学习以后告诉我,如果我把随便一章的用词习惯告诉它、但不告诉它到底是前80回还是后40回,那么机器有95%的把握能猜出它是不是后40回。

至此,我们可以很有信心地判断它们的写作风格不同。

那么,问题来了,会不会因为是情节的需要所以导致写作风格不同了呢?

情节不同会造成用词习惯多大的差别?

好吧,那我再来做一个旁证。我把另外一部四大名著「三国演义」拿来分析,看看上部跟下部的用词习惯会不会有比较明显的差别。

这个是三国演义的用词习惯缩到三维以后的图,红色+代表前60部的用词习惯,蓝色o代表后60部的用词习惯。

你可能会说,虽然中间交叉的地方比较多,但是还是可以看出来是有区分的。

可如果你比对一下跟红楼梦的图,你就会发现红楼梦的差别会明显得多。

(红色+为红楼梦前80回/三国前60回,蓝色o红楼梦后40回/三国后60回)

最后,用机器学习的方式来说,如果我把三国演义随便一章的用词习惯告诉它、但不告诉它到底是前60回还是后60回,那么机器有7成的把握猜对,这个准确度已经远远低于红楼梦的95%的预测水平。

所以,我们用「三国演义」这个旁证来分析,即便是因为情节需要导致的用词习惯差别也不应该这么大。

所以,我们就更有信心说曹老先生没有写后40回了。

更多的机器学习有趣的玩法,我会在学习的过程中慢慢尝试的。以上。

臭不要脸的自我介绍

我叫黎晨,英文名LC,是我中文拼音的简称,跟LV并无关系;

性别男,遵纪守法,无不良前科。我的很多朋友都说我是「死变态」。所以我经常宅在家里不出去祸害社会。

为此,我向政府申请维护社会公序良俗的奖励,但还没有获得任何回复;

00年开始接触互联网,可是很年轻。在互联网牛市造福浪潮中连小小的牛尾巴都没沾到,不过,我会继续努力的;

我公众号的所有文章均为无版权声明。无须征求本人意见,可以随意修改转载。

如果觉得文章还行,欢迎关注公众号「xiaochenxiangtaiduo」(小晨想太多的拼音)

机器学习判定红楼梦后40回是否曹雪芹所写相关推荐

  1. [机器学习]---如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 看到用机器学习方法分析红楼梦的文章不少,也有好几种方法,大观是因为纯文字的分析成本低吧,比较适合初学者练手,先转载一两篇文章过来学习.所谓机器学习也是一些数学统计的方法,通过习惯用词来做判断, ...

  2. [机器学习]如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 今天在涉机器学习相关知识时,看到黎晨这篇文章,觉得蛮有意思的,拿来这里介绍大家.这里判定的维度越多越精准,下面判定仅供参考,仅供娱乐学习! #判定整体思路 主要从以下几个方面可以进行粗略进行判定 ...

  3. 用人工智能判断红楼梦后40回是否是曹雪芹写的

    本博文主要是用机器学习的方法判断红楼梦后四十回是不是曹雪芹写的 开发语言: Python3.6 开发工具: numpy,matplatlib,sklearn 相关算法: SVM 先放上预测结果,再慢慢 ...

  4. 重做红楼梦的数据分析-判断前80回后40回是否一个人写的

    重做红楼梦的数据分析-判断前80回后40回是否一个人写的 红楼梦的数据分析已经有许多人做过,结论也各不相同. 我在知乎上看到两篇帖子: 1. 通过数据挖掘能分析<红楼梦>各回的真伪吗? 2 ...

  5. python红楼梦作者_用 Python 分析《红楼梦》,后四十回是曹雪芹所写吗?(开源)...

    原标题:用 Python 分析<红楼梦>,后四十回是曹雪芹所写吗?(开源)

  6. python词频统计之红楼梦_用 Python 分析《红楼梦》,后四十回是曹雪芹所写

    用 Python 分析<红楼梦>,后四十回是曹雪芹所写 2020年11月04日 16:03:11    作者:九九文章网 处理后的效果是这个样子: #甄士隐梦幻识通灵#贾雨村风尘怀闺秀#此 ...

  7. python红楼梦人物词频统计_通过数据挖掘能分析《红楼梦》各回的真伪吗?

    可以的.小智最近就尝试通过用机器学习的方法,分析了一下红楼梦后四十回的真伪. 以下内容引自小智的微信公众号,转载需申请授权. ------------------------------------- ...

  8. 机器学习之红楼梦作者判断(贝叶斯分类)

    上篇文章不带假设的使用聚类算法去判断红楼梦的作者,这一篇打算使用监督学习方法的贝叶斯分类,假设后四十回不是曹雪芹所写, 去做个验证. 关于我读过比较好的贝叶斯讲解:A simple explanati ...

  9. 谈谈红楼梦(第1-5回)

    曹雪芹留给世人一部经典的小说,让人说不尽,道不完.因为有了红楼梦,产生了红学.而红楼梦原版的迷失又留给了世人多少遗憾,但是却给红楼梦带来了一种不可名状的残缺美.要说的实在是太多了.我想以红楼梦的一首好 ...

  10. [机器学习] --- 红楼梦后四十回到底是谁写的?机器学习分析法

    流传到今天的<红楼梦>共有120回,很多人认为是曹雪芹写了前八十回,后四十回是高鹗续写.后来随着新材料的发现,红学界经过慎重考察,认为后四十回并不是高鹗所写,高鹗和程伟元只是整理出版了&l ...

最新文章

  1. CentOS6 修改主机名的规范步骤
  2. 第二篇:salt-api使用填坑指南
  3. Discuz!X2论坛 “在线时间”更新问题
  4. 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)
  5. Spring入门详细教程(四)
  6. Python基础入门之解释器安装
  7. 如何查询oracle死锁,Oracle死锁查看和解决办法汇总
  8. ENSP综合配置 实例十二 实战
  9. MMOCR: OpenMMLab 全流程的文字检测识别理解工具箱
  10. JDBC_ResultSet类_结果集对象
  11. Azure Storage架构介绍
  12. 五个Metro UI 风格的网页设计
  13. 软件测试——selenium环境搭建及自动化测试
  14. Feb14 小白《Linux就该这么学》学习笔记1
  15. 心理测试单机小软件,成人心理测评系统(单机版)
  16. 正则表达式在线测试 | 菜鸟工具
  17. 微信朋友圈点赞测试用例
  18. 基于解决sci和ei等外文思维顺序问题的辅助软件分析
  19. python 涨停统计_Python采集选股宝涨停信息
  20. [免费专栏] Android安全之Android Xposed插件开发,小白都能看得懂的教程

热门文章

  1. 时频分析工具箱典型函数的使用
  2. MFC中画出圆形按钮,告别方形普通按钮
  3. 大白话云计算,大数据,人工智能
  4. java将小写金额转为大写金额
  5. PS证件照蓝底转白底红底转白底
  6. 第一章 智能体与学习环境
  7. everedit 保存机器学习路径注意事项
  8. python爬虫微信刷票_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
  9. Java main是什么_java中的public static void main是什么意思
  10. Pycharm, 生成可执行文件,Unhandled exception in script报错