kmeans实现文本聚类

标签: 机器学习 kmeans 文本 聚类 特征
1811人阅读 评论(2) 收藏 举报
分类:

需求

拿到的需求是输入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

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

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

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

查看评论

K-means算法及文本聚类实践

K-Means是常用的聚类算法,与其他聚类算法相比,其时间复杂度低,聚类的效果也还不错,这里简单介绍一下k-means算法,下图是一个手写体数据集聚类的结果。  基本思想  k-m...
  • havedream_one
  • havedream_one
  • 2015-04-20 10:08:55
  • 4086

文本聚类——Kmeans

上两篇文章分别用朴素贝叶斯算法和KNN算法对newgroup文本进行了分类测试,本文使用Kmeans算法对文本进行聚类。 1、文本预处理 文本预处理在前面两本文章中已经介绍,此处(略)。 ...
  • jiangsanfeng1111
  • jiangsanfeng1111
  • 2016-03-28 15:55:27
  • 2929

文本聚类算法之k-means聚类

1、算法的原理: 2、算法的描述 3、算法的缺点: (1)容易受到初始值的影响 (2)聚类的个数不知道,需要用户输入 (3)容易受到噪声点的影响 如...
  • u011955252
  • u011955252
  • 2016-03-04 18:00:30
  • 1644

基于K-Means的文本聚类算法

源代码下载:TDIDF_Demo.rar         声明:本文代码思路完全来自蛙蛙池塘的博客,只为技术交流用途,无其他目的       昨天有幸拜读了蛙蛙池塘的《蛙蛙推荐:蛙蛙教你文本聚类》这篇...
  • yansmile1
  • yansmile1
  • 2015-07-23 16:30:05
  • 832

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

基本步骤包括: 1.使用python+selenium分析dom结构爬取百度|互动百科文本摘要信息; 2.使用jieba结巴分词对文本进行中文分词,同时插入字典关于关键...
  • Eastmount
  • Eastmount
  • 2016-01-08 02:52:26
  • 39656

中文文本聚类(切词以及Kmeans聚类)

简介 一 切词 二 去除停用词 三 构建词袋空间VSMvector space model 四 将单词出现的次数转化为权值TF-IDF 五 用K-means算法进行聚类 六 总结简介查看百度搜索中文文...
  • songzhilian22
  • songzhilian22
  • 2015-11-04 13:28:35
  • 15562

kmeans 文本聚类方法简介

k-均值算法是一个很常见的算法,它的基本思想是:通过迭代寻找k个聚类的一个划分方案,使得用这K个聚类的均值来代表相应各个样本时所得的总体误差最小。算法步骤:1.生成索引文件   将分类的文本以句子id...
  • qq_32023541
  • qq_32023541
  • 2018-02-09 18:36:34
  • 17

聚类测试数据

  • 2016年08月15日 21:14
  • 355KB
  • 下载

文本分类与聚类(text categorization and clustering)

1. 概述 广义的分类(classification或者categorization)有两种含义:一种含义是有指导的学习(supervised learning)过程,另一种是无指导的学习(un...
  • riverflowrand
  • riverflowrand
  • 2016-03-27 15:11:42
  • 3727

【文本聚类】用k-means对文本进行聚类

# -*- coding: utf-8 -*- """ Created on Thu Nov 16 10:08:52 2017@author: li-pc """import jieba from ...
  • lxg0807
  • lxg0807
  • 2017-11-18 16:00:40
  • 686
    作者
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 115万+
    积分: 1万+
    排名: 965
    博客专栏
    最新评论