·背景 html
在知道KNN以前,楼主有时候会粗糙地作一些分类模型的计算。在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393.html]的一些文章从中获得了一些启发,这些天突发奇想决定把N年前的分类模型按照KNN的思路重写,从新把大神的思路形象地再回溯一下,方便后人更加清晰的认识整个过程。不少时候,历史的进步来源于前辈们的传道、授业、解惑。既然大神给JAVA,不材这边就继续补充一个C++的,为陷在JAVA中的斗士们吹一曲老革命之歌。linux
·设计思路 c++
像大多数的ML体系一下,向量和几率学几乎是整个ML体系的基础,但从历史经验的推断又是ML的命门,人类与机器之间的战争从未体质。文档分类工具的设计初衷是但愿拿到的这边文章可以准确的归为某一类,大神是经过KNN把复旦的语料分个类。楼主这边就简单地把公司投诉内容也简单归个类。KNN的最先设计模型以下图所示:算法
如上面左所示,X在K的定义范围内(规则半径或规则图形内)与其周围邻居属性归类最多的一项,则归为某类。具体到与邻居的类似是如何计算的,则是采用最基本的向量空间算法,Cos夹角。而SVM则是利用两个向量至理想边界的最大距离来分类,因此对于向量的理解相当重要。不少人KNN很简单,可是越是简单的,要用好反而更难。centos
在得知了最基本的计算思路后,作文档分类就能迎刃而解。把用天然分词分类,把每个文档设置成一个向量,把每一个词汇出现几率增益做为向量的维度,这样每个向量就有了本身的标尺。有了标尺以后,就能够回到了上面有图的理论部分。剩下的工做就是遍历计算夹角,以下图所示,一目了然吧。网络
·编码中的可能碰到问题 工具
·测试的结果 oop
把投诉内容按网络质量、终端销售、服务质量进行分类。如以前所述楼主把cos值作了直接相加,相加最大值为最类似断定。在测试样本的随机结果中命中仍是OK的。固然,话说回来,任何ML算是的弊端仍是"历史经验和人的因素。性能