利用CURE算法来进行文本聚类

看了下“蛙蛙推荐:蛙蛙教你文本聚类”,链接地址为http://www.cnblogs.com/onlytiancai/archive/2008/05/10/1191557.html

对于文本顺序发生了变化的情况,k-means算法无法解决,后来网上找个到CURE算法的介绍,“层次聚类方法的CURE算法研究”是个pdf文档,

如是按照文章所说结合wawa的东西,实现了下CURE算法,代码写得一般,结果还行,大家有空就看看吧。

数据也用的是wawa的

测试:首先我们准备以下数据
===================
奥运 拳击 入场券 基本 分罄 邹市明 夺冠 对手 浮出 水面
股民 要 清楚 自己 的 目的
印花税 之 股民 四季
杭州 股民 放 鞭炮 庆祝 印花税 下调
残疾 女 青年 入围 奥运 游泳 比赛 创 奥运 历史 两 项 第一
介绍 一 个 ASP.net MVC 系列 教程
在 asp.net 中 实现 观察者 模式 ,或 有 更 好 的 方法 (续)
输 大钱 的 股民 给 我们 启迪
Asp.Net 页面 执行 流程 分析
运动员 行李 将 “后 上 先 下” 奥运 相关 人员 行李 实名制
asp.net 控件 开发 显示 控件 内容
奥运 票务 网上 成功 订票 后 应 及时 到 银行 代售 网点 付款
某 心理 健康 站 开张 后 首 个 咨询 者 是 位 新 股民
ASP.NET 自定义 控件 复杂 属性 声明 持久性 浅析
==================

放在bin下的input.txt中

  顺序可以你可以随意打乱

  关键代码说明,其他的可以去参考wawa的

//2、计算类间距离
                double max = double.MaxValue;
                int i_min = -1;
                int j_min = -1;
                for (int i = 0; i < _clusters.Count; i++)
                {

                    for (int j = i + 1; j < _clusters.Count; j++)
                    {
                        double dist = getDistance(_clusters[i], _clusters[j]);
                        _distanceCache[i, j] = dist;
                        if (_distanceCache[i, j] < max)
                        {
                            max = _distanceCache[i, j];
                            i_min = i;
                            j_min = j;
                        }
                    }
                }

                //
                //3、合并距离最小的两个类
                Merge(i_min, j_min);


                if (_k == _clusters.Count)
                    break;

具体理解算法要看pdf文档

地址 https://files.cnblogs.com/panzhilei/层次聚类方法的CURE算法研究.pdf

用到IFIDF,对概念不熟可以搜索“数学之美”,

数学之美 系列九 -- 如何确定网页和查询的相关性 地址为 http://googlechinablog.com/2006/06/blog-post_27.html

建议从系列一开始看起。

 

代码用Vs2008开发

地址 https://files.cnblogs.com/panzhilei/CureDemo.rar

 

 

posted @ 2010-02-26 16:13  panzhilei  阅读(5658)  评论(1编辑  收藏  举报