kmeans实现文本聚类

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

需求

拿到的需求是输入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 进行预定。感谢各位朋友。

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

目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
KMeans+DBSCAN密度聚类+层次聚类的使用(附案例实战)
KMeans+DBSCAN密度聚类+层次聚类的使用(附案例实战)
261 0
|
7月前
|
机器学习/深度学习 算法 数据挖掘
08 机器学习 - Kmeans聚类算法原理
08 机器学习 - Kmeans聚类算法原理
81 0
|
1月前
|
机器学习/深度学习
数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC(下)
数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC
|
9天前
|
算法 数据可视化 Python
【KMeans】Python实现KMeans算法及其可视化
【KMeans】Python实现KMeans算法及其可视化
|
1月前
|
算法 数据可视化 数据挖掘
使用Python实现DBSCAN聚类算法
使用Python实现DBSCAN聚类算法
475 2
|
1月前
|
算法 数据可视化 安全
R语言Kmeans聚类、PAM、DBSCAN、AGNES、FDP、PSO粒子群聚类分析iris数据结果可视化比较
R语言Kmeans聚类、PAM、DBSCAN、AGNES、FDP、PSO粒子群聚类分析iris数据结果可视化比较
|
1月前
|
机器学习/深度学习 算法 数据可视化
R语言K-Means(K-均值)聚类、朴素贝叶斯(Naive Bayes)模型分类可视化
R语言K-Means(K-均值)聚类、朴素贝叶斯(Naive Bayes)模型分类可视化
|
1月前
|
数据可视化 算法 数据挖掘
R语言鸢尾花iris数据集的层次聚类分析
R语言鸢尾花iris数据集的层次聚类分析
|
10月前
|
机器学习/深度学习 存储 算法
聚类算法:Kmeans和Kmeans++算法精讲
聚类算法:Kmeans和Kmeans++算法精讲
514 0
|
1月前
|
算法 数据挖掘 数据库
K-Means、层次聚类算法讲解及对iris数据集聚类实战(附源码)
K-Means、层次聚类算法讲解及对iris数据集聚类实战(附源码)
180 0