kmeans中的k的含义_K-means文本聚类系列

(注意: 大家下载我的程序源码以后,可能需要从网络上下载一个新的ictclas3.0包,然后覆盖原工程文件中的ictclas3.0组件,可能是因为ictclas3.0的license许可,一份ictclas3.0包只可以在一台电脑中使用,目前已经有网友遇到了类似的问题。)

作者:finallyliuyu 转载使用等请注明出处

1。如何建立词袋子模型

2。DF特征词选择法

3。VSM模型

4。从Weka获取聚类中心,完成文本聚类

5。全部代码,以及资源下载

6。如何使用此开源框架即如何使用Preprocess类

前言:

园子里有很多人对聚类算法感兴趣,在GOOGLE检索里比较靠前的有

蛙蛙推荐:蛙蛙教你文本聚类 此版本代码用C#语言编写

以及洞庭散人根据上面这篇蛙蛙博文用C++语言实现的k-means算法。 基于kmeans 的文本聚类

那么读者会纳闷,既然有了上面的资料,我是否还有什么必要在这里嚼别人嚼过的馍,来显摆一个C++菜鸟的拙劣代码。。。

那么我就先来说说我这版k-means 与以上两个版本的不同吧。

以上两个版本,着重点在于 Kmeans聚类算法本身的实现,也就是蛙蛙和洞庭散人分别用了C#和C++语言实现了Kmeans算法,而称不上是真正意义上的文本聚类:1。他们没有嵌入分词组件,只是自己粗糙地写了个以空格作为分隔符的分词函数。2。他们没有真正意义上的语料库。他们的待聚类文本是自己写的几句话。

而我这版kmeans,并不是侧重于实现Kmeans算法本身的实现,而且借助于数据挖掘领域著名的开源组件weka来实现聚类算法。我的侧重点在于实现通用的文本预处理模块。所谓文本预处理包括分词-》去除停用词=》建立词袋子模型=》特征词选择=》建立文档向量模型(VSM)模型。最后将测试文本的VSM模型写成weka所要求的数据格式arff数据格式。我所强调的是提供一个开源的框架,只要完成我框架中所满足的要求配置就可以用此框架完成文本预处理工作,将训测试文档集合转化成arff数据格式然后调用weka,使用weka完成文本聚类工作。最后将weka计算得到的聚类中心取出来,对于测试样本集合中的每篇文章计算其与聚类中心的距离,完成聚类。

其次我还将提供真实的文本,提供了分属“娱乐”,“法制”,“教育”三个类别供六十六篇新闻作为测试语料库(注:此六十六篇新闻均为个人实现的网页正文提取软件采集,如果大家需要语料,那么可以下载我的毕设程序自行下载,详情请见《新闻类网页正文提取系列博文》)。给大家做演示。同时我会将源码,新闻上传到博客中供大家下载,研究和学习使用。

首先声明一点:在我的这套框架内,测试文本必须存放在数据库中(MSSQL server2000)。目前这套框架还有很多不完善的地方,就当抛砖引玉吧,希望园子里的高人和能人予以指点。

先给大家上两个截图,看看聚类效果吧。

测试语料库情况(部分截图):

62bcdc94bc3411fc535ce3e038df0bb9.png

聚类后的结果:

5f392241a0ce1ec30d70e30574172a35.png

为了能让读者更清晰地观察测试样本集聚类前后情形,特提供语料数据库储存情况,聚类结果下载见:http://files.cnblogs.com/finallyliuyu/Cluster.rar

本系列博文将按如下规划展开 首先 分别介绍各各模块程序代码的含义, 其次介绍封装各个模块功能的类, 再次介绍该框架的使用说明,以及如何使用weka聚类,并且提供语料库和源代码下载。

各模块程序代码代码含义的介绍已经完成以下两个部分 见:

声明,这是本人用C++编写的第一个项目程序,希望大家只看思路,对于代码风格,形式批判接收,当然也欢迎大家多提意见,帮我提高编程能力。比如,我对如何函,变量,取个好名字一直很纠结。曾经接触过C,C++,C#,Java,Python,可是却犹如邯郸学步的那个人,看了众多的命名风格,学派,什么匈牙利命名法,什么简写法,什么第一个单词小写等等,把我弄的焦头烂额。。。希望大家多指点些函数命名的小窍门。

同时在这里感谢园友嗷嗷 以及Galactica 在写C++程序过程中给予我的无私的,及时的帮助,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k-means是一种常用的文本聚类算法,其基本思想是将文本数据集分成k个不同的簇,每个簇都具有相似的特征。具体实现时,首先需要随机选择k个数据点作为初始质心,然后将每个数据点分配到距离其最近的质心所在的簇,接着重新计算每个簇的质心位置,重复上述过程直到收敛。 下面是k-means文本聚类算法的Python代码实现: ``` import numpy as np from sklearn.cluster import KMeans from sklearn.feature_extraction.text import TfidfVectorizer def kmeans_cluster(docs, num_clusters): # 提取文本特征 vectorizer = TfidfVectorizer(stop_words='english') X = vectorizer.fit_transform(docs) # 聚类 kmeans = KMeans(n_clusters=num_clusters, random_state=0) kmeans.fit(X) # 输出聚类结果 clusters = [[] for i in range(num_clusters)] for i, label in enumerate(kmeans.labels_): clusters[label].append(i) for i, cluster in enumerate(clusters): print('Cluster %d:' % i) for doc_index in cluster: print('\t%s' % docs[doc_index]) # 示例 docs = ['This is a sample sentence.', 'Another example sentence.', 'I love programming.', 'Python is a great programming language.', 'Java is also a popular programming language.'] kmeans_cluster(docs, 2) ``` 运行结果如下: ``` Cluster 0: I love programming. Python is a great programming language. Java is also a popular programming language. Cluster 1: This is a sample sentence. Another example sentence. ``` 以上代码通过TfidfVectorizer提取文本特征,并使用KMeans聚类算法进行文本聚类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值