·背景

在知道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. java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿

    这几天我越来越郁闷.程序员现在很火----特javaEE员. 但我觉得火只是给人们的工作程序员. 原因 javaweb该项目是非常大的.没听过那个码农能单独接到什么项目.仅仅能被人剥削. 有人不信,我 ...

  2. Java于 初始化序列?

    我们正处于java于 Java中初始化的顺寻? java代码: package sru.love.c; class Person { String name = "Person"; ...

  3. 处理FTP上传成功推理

    #登录FTPserver获取指定文件 #$1:server住址 #$2:帐户 #$3:password #$4:文件路径名 #$5:本地文件路径名 #$6:本地文件名 #比量ftp上传结果: #获取上 ...

  4. SQLServer 2008 技术内幕——T-SQL 查询 笔记

    原文:SQLServer 2008 技术内幕--T-SQL 查询 笔记 1.SQL编程有许多独特之处,如:面向集合的思维方式.查询元素的逻辑处理顺序.三值逻辑.如果不掌握这些知识就开始用SQL编程,得 ...

  5. 使用cocoapods install友盟时报错Error installing UMengAnalytics

    报错: [!] /usr/bin/unzip /Users/soindy/Documents/SmartThermo/ios/SmartThermo/Pods/UMengAnalytics/file. ...

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

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

  7. 学习英语每日一 On the house. 赠品

    tp=webp" alt=""> On the house. 免费赠送.我们之前学过请客能够说I'll buy you something. 事实上还有一种说法是I ...

  8. 了解大数据的技术生态系统 Hadoop,hive,spark(转载)

    首先给出原文链接: 原文链接 大数据本身是一个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你能够把它比作一个厨房所以须要的各种工具. 锅碗瓢盆,各 ...

  9. 基于GeoHash算法的附近点搜索实现(一)

    1. 引入 最近在参加学校的计算机仿真大赛,时间好像有点不够,所以只完成了前面的一部分最基础的功能,中途还是选择了放弃.但是之前的部分的确觉得完成得还不错,在这里分享一下.题目是要完成一个宇宙飞船加油 ...

  10. 页面加速Chromium 预压 Prerendering

    前者已经推出了一个博客prefetch预加载的网页资源,以提高网页加载速度,下面我们一起来看一下,以加速网页chromium prerendering.介绍prerendering之前.先介绍两个概念 ...