·背景

在知道KNN之前,楼主有时候会粗糙地做一些分类模型的计算。在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393.html]的一些文章从中得到了一些启发,这些天突发奇想决定把N年前的分类模型按照KNN的思路重写,重新把大神的思路形象地再回溯一下,方便后人更加清晰的认识整个过程。很多时候,历史的进步来源于前辈们的传道、授业、解惑。既然大神给JAVA,不材这边就继续补充一个C++的,为陷在JAVA中的斗士们吹一曲老革命之歌。

·设计思路

像大多数的ML体系一下,向量和概率学几乎是整个ML体系的基础,但从历史经验的推断又是ML的命门,人类与机器之间的战争从未体质。文档分类工具的设计初衷是希望拿到的这边文章能够准确的归为某一类,大神是通过KNN把复旦的语料分个类。楼主这边就简单地把公司投诉内容也简单归个类。KNN的最早设计模型如下图所示:

如上面左所示,X在K的定义范围内(规则半径或规则图形内)与其周围邻居属性归类最多的一项,则归为某类。具体到与邻居的相似是如何计算的,则是采用最基本的向量空间算法,Cos夹角。而SVM则是利用两个向量至理想边界的最大距离来分类,所以对于向量的理解至关重要。很多人KNN很简单,但是越是简单的,要用好反而更难。

在得知了最基本的计算思路后,做文档分类就能迎刃而解。把用自然分词分类,把每一个文档设置成一个向量,把每个词汇出现概率增益作为向量的维度,这样每一个向量就有了自己的标尺。有了标尺之后,就可以回到了上面有图的理论部分。剩下的工作就是遍历计算夹角,如下图所示,一目了然吧。

·编码中的可能碰到问题

  1. 文档分词工具,按目前汉字系来说其实都差不多,看个人喜好,楼主喜欢用SCWS开源加自定义词汇,唯独在编译时会碰到const char*的警告问题,这个与会不同的编译器有关。有洁癖者,请变量前加const。
  2. 计算文档向量原始矩阵:原著中推荐使用了berkleyDB+MR,但是实际操作过程中,并没有原著中那么复杂,经过实践,64位下c++ String和Map,真的隐秘而强大。
  3. 从流行的角度,在真正分类时,可以推荐使用Spark,几乎完爆hadoop了,后续楼主会补充pyspark的代码。可惜了分词的时候不能发挥外部API的特色。
  4. 由于出于个人兴趣,未追求程序计算量的性能极限,有一些声明和全局的处理比较粗糙。有该癖好的者,请多用指针。
  5. 下面是代码和工具截图,方便期间仅做了.a文件。其中涉及到部分公司的商业数据,楼主做了敏感处理,请仅做学术之后。如派为他用,请自行接受法律制裁。
  6. 仅适用linux/centos kernel2.6

·测试的结果

把投诉内容按网络质量、终端销售、服务质量进行分类。如之前所述楼主把cos值做了直接相加,相加最大值为最相似判定。在测试样本的随机结果中命中还是OK的。当然,话说回来,任何ML算是的弊端还是"历史经验和人的因素。

跟着大神重写的KNN 文档归类小工具的更多相关文章

  1. 帮哥们做的一个整理文档的小工具(C++ string的标准函数还是很给力的,代码在最下)

    其实把程序用到生活中,真的能节约不少时间!程序的力量是无穷滴! 哥们的毕业设计是要做法律文书匹配之类的东东,有一步是要抽取所有的法律法规名称,而刚好我们要处理的文件中,法规的名称之前都有个‘.‘,所以 ...

  2. phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法

    phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法   实这个很简单的只要更改php.ini里三个配置即可.(见下面加粗部分,改成你自己的需求即可) ; Maximum allo ...

  3. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  4. sphinx doc 文档生成脚手架工具

    sphinx 在python 语言开发中,是一个使用的比较多文档生成脚手架工具,我们帮助我们生成 专业的帮助文档,同时也有远端的免费saas 托管服务,方便分发 安装 sphinx 的安装好多方便,m ...

  5. Docker相关环境全套安装文档兼小技能

    Docker相关环境全套安装文档兼小技能 以下环境皆为ubuntu16.04,主要安装docker,docker-compose,docker仓库等. Docker安装 参考官方 A: 有源安装 Ub ...

  6. 基于 React 开发了一个 Markdown 文档站点生成工具

    Create React Doc 是一个使用 React 的 markdown 文档站点生成工具.就像 create-react-app 一样,开发者可以使用 Create React Doc 来开发 ...

  7. RESTful API接口文档规范小坑

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 前后端分离的开发模式,假如使用的是基于RESTful API的七层通讯协议,在联调的时候,如何避免配合过程中出现问 ...

  8. 听justjavac大神live前端的入门与进阶小笔记

    代码规范 代码强壮,调试代码 少用变量,多用常量 少用for循环,why循环,多用函数式, 不要直接去使用框架 刷题 提高编程思维 用js去做c语音的问题 阅读别人代码,去看别人的代码 a+b> ...

  9. 干掉 Postman?测试接口直接生成API文档,这个工具贼好用

    大家好,我是小富~ 前几天粉丝群有小伙伴问,有啥好用的API文档工具推荐,无意间发现了一款工具,这里马不停蹄的来给大家分享一下. ShowDoc一个非常适合团队的在线API文档工具,也支持用docke ...

随机推荐

  1. OpenCV——Delaunay三角 [转载]

    从这个博客转载 http://blog.csdn.net/raby_gyl/article/details/17409717 请其它同学转载时注明原始文章的出处! Delaunay三角剖分是1934年 ...

  2. 对SA权限的再突破 (对付xplog70.dll被删)转载

    原文:对SA权限的再突破 (对付xplog70.dll被删)转载 对SA权限的再突破 (对付xplog70.dll被删)转载 转载自:http://www.bitscn.com/plus/view.p ...

  3. 玩转Web之JavaScript(一)-----javaScript语法总结(一) 与鼠标操作有关的语法

    click()  对象.click()  使对象被点击. event.clientX  返回最后一次点击鼠标 X 坐标值: event.clientY  返回最后一次点击鼠标 Y 坐标值: event ...

  4. 第三篇——第二部分——第二文 计划搭建SQL Server镜像

    原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...

  5. URL压缩算法的短地址

    时下,短网址应用已经在全国各大微博上開始流行了起来.比如QQ微博的url.cn,新郎的t.cn等. 我们在新浪微博上公布网址的时候.微博会自己主动判别网址.并将其转换,比如:http://t.cn/h ...

  6. VS公布 错 到文件失败 复制到

    他自己和构建网站 ASP.MVC4 最近更改写功能 自此从未公布 已经报道 错 15 到文件失败 easyui\themes\gray\images\Thumbs.db  拷贝到 obj\Releas ...

  7. 新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t

    新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  8. ASP.NET Identity

    使用ASP.NET Identity实现基于声明的授权 阅读目录 走进声明的世界 创建并使用声明 基于声明的授权 使用第三方来身份验证 小节 在这篇文章中,我将继续ASP.NET Identity 之 ...

  9. 每天收获一点点------Hadoop之HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  10. Java新手如何学习Spring、Struts、Hibernate三大框架?(转)

    整理知乎大牛答案: 1.入门看文档(blog,书籍等等),深入理解配置文件的含义(Spring.Struts.Hibernate); 2.遇到问题,自己动手解决,如果解决了,为什么这样解决?(凡事总问 ...