kmeans实现文本聚类

需求

拿到的需求是输入n个文本,对文本进行聚类,由于这些输入不能通过历史数据进行训练,所以这个主要就是用无监督学习来解决。

kmeans

谈到聚类就会想到kmeans,它的核心思想是给定的K值和K个初始质心将样本中每个点都分到距离最近的类簇中,当所有点分配完后根据每个类簇的所有点重新计算质心,一般是通过平均值计算,然后再将每个点分到距离最近的新类簇中,不断循环此操作,直到质心不再变化或达到一定的迭代次数。

分词

会使用一些工具进行分词,比如IKAnalyzer,同时也支持将停词去掉。

词库

刚开始分类效果不是很好,于是改进词库。对于特定行业的分词,为提高分词的准确性及专业性,可以收集更准确的词库用于分词。可以由搜狗http://pinyin.sogou.com/dict/搜索各种类别的词汇,自己下载下来再整理,它的格式为scel,可以使用深蓝词汇转换工具转成txt方便使用。

特征集

特征集的确定是文本向量化的第一步,只有特征集确定好了才能进一步确定向量的值,那么怎么确定特征集呢?一般的做法可以是将所有样本的词都提取出来作为特征集。比如我们有两个文本 “小学生上学”和“股票大跌”,那特征集就是{“小学生”,”上学”,”股票”,”大跌”}。

特征权重

向量化第二部就是确定特征集的权重,特征集可以看成是向量的维数,而对于每个样本来说就需要确定每个维度的值了,这个值就可以看成是特征的权重,常常用TF-IDF作为值。TF-IDF又是什么?简单来说TF就是某文档中某个term出现的次数,而IDF即逆文档频率,可由下面公式计算:

IDF=log(Tt)

其中,T为统计样本中总文档数,t为包含某term的文档数。
TF和IDF的相乘则为特征权重。

特征降维

其实就是通过某种方法选择出比较相关的一些特征,将一些无关的特征去掉,达到特征降维效果。比如可以通过卡方检验,这里选择了用其他方式,提取热词。即认为每个文档的热词能代表该文档,由热词组成特征。

主要代码

public int[] learn(List<String> textList) {
    List<String> vectorList = VectorUtil.getVectorDimension(textList);
    double[][] datas = VectorUtil.getVector(textList.size(), vectorList, idf);
    KMeans kmeans = new KMeans(datas, K, ITERATE);
    return kmeans.getClusterLabel();
}

Github

https://github.com/sea-boat/TextAnalyzer

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

=========================

时间: 2024-12-02 11:48:13

kmeans实现文本聚类的相关文章

[python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像

0 前言 本文主要讲述以下几点:        1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词):        2.调用scikit-learn中的K-means进行文本聚类:        3.使用PAC进行降维处理,每行文本表示成两维数据:        4.最后调用Matplotlib显示聚类效果图. 文章更详细的内容参考:http://blog.csdn.net/eastmount/article/details/50473675由于涉及

[python] 基于k-means和tfidf的文本聚类代码简单实现

俗话说"外行看热闹,内行看门道",作为一个机器学习的门外汉,刚研究python机器学习scikit-learn两周时间,虽然下面这段程序可能对于那些专研算法或机器学习的人来说非常简单,但对于一些入门的同学和我自己还是非常有帮助的.如果文章中有错误或不足之处,还请你微微一笑,原谅之:当然也非常欢迎你提出建议或指正~ 基本步骤包括:         1.使用python+selenium分析dom结构爬取百度|互动百科文本摘要信息:         2.使用jieba结巴分词对文本进行中文

文本聚类总结

摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这里会用到TF/IDF权重,用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离,用k-means进行数据聚类等数学和统计知识.关于这些概念可以去google,或者参考文本后的参考链接. 思路:计算两篇文档的相似度,最简单的做法就是用提取文档的TF/IDF权重,然后用余弦定理计算两个多维向量的距离.能计算两个文本间的距离后,用

文本聚类(1)——概念

什么是文本聚类 文本聚类是搜索引擎和语义web的基本技术,本文简单的文本聚类算法,对于想学搜索技 术的初学者有一定入门作用的.这里会用到TF/IDF权重,用余弦夹角计算文本相似度, 用方差计算两个数据间欧式距离,用k-means进行数据聚类等数学和统计知识. 文本聚类(Text clustering)文档聚类主要是依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小.作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的

[python] 使用Jieba工具中文分词及文本聚类概念

        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.         相关文章:         [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒         [python爬虫] Seleni

评价函数-关于遗传算法的高维文本聚类问题

问题描述 关于遗传算法的高维文本聚类问题 目前的情况是:针对文本聚类的问题已做了预处理(当然特征提取的也不是特别完美..),目前用遗传算法对实际文本进行聚类,已经初步得到一个很好的聚类结果,中间有一点小创新,但是由于创新性不高,老师不让发论文... 在研究文本聚类的时候发现一问题.大家都知道,在特征表示时,因为数据的稀疏性会导致维数大,耗时等问题,就出现很多针对稀疏性的降维方法..(最近也看了很多像SPP等降维方法)但是我就是因为没有降维才得到了很好的聚类结果,而遗传算法的操作算子恰对原数据的稀

算法实现-文本聚类算法推荐------关于微博文本数据的

问题描述 文本聚类算法推荐------关于微博文本数据的 各位大牛兄弟,我想做个网络爬虫从新浪微博上爬取文本,然后再把文本归类,就是相似的文本聚集为一类,有没有舍算法啊?谢谢指教了,小弟才入门

LJCluster文本聚类技术中间件

问题描述 文本聚类是基于相似性算法的自动聚类技术,自动对大量无类别的文档进行归类,把内容相近的文档归为一类,并自动为该类生成特征主题词.适用于自动生成热点舆论专题.重大新闻事件追踪.情报的可视化分析等诸多应用.灵玖Lingjoin(www.lingjoin.com)基于核心特征发现技术,突破了传统聚类方法空间消耗大,处理时间长的瓶颈:不仅聚类速度快,而且准确率高,内存消耗小,特别适合于超大规模的语料聚类和短文本的语料聚类.灵玖文档聚类组件的主要特色在于:1.速度快:可以处理海量规模的网络文本数据

文本聚类-文档聚类问题,基于wikipedia

问题描述 文档聚类问题,基于wikipedia 最近在看文档聚类的相关的论文,讲到基于wikipedia的文档聚类,有点疑问,这里面将文本映射到wikipedia是如何映射的?是要将整个wikipedia的文章都下载下来弄成一个文本库吗?求高手指点.