精华内容
下载资源
问答
  • python 文本聚类分析案例说明摘要1、结巴分词2、去除停用词3、生成tfidf矩阵4、K-means聚类5、获取主题词 / 主题词团 说明 实验要求:对若干条文本进行聚类分析,最终得到几个主题词团。 实验思路:将数据进行预处理...
  • birch 算法文本聚类应用举例 篇一 birch 算法文本聚类应用举例 文中的概念和定义部分摘自于百度百科和一些论文中把我觉得写 的不错的解释放上来供参考 一文本聚类定义 文本聚类主要是依据著名的聚类假设同类的文档相...
  • KNN文本聚类代码

    2019-01-14 20:32:52
    利用十大经典机器学习算法之一的KNN(K近邻)算法,实现文本自动聚类
  • 在线文本聚类论文

    2018-04-23 09:16:09
    最新的在线文本聚类的论文,做文本聚类的可以看看,很有价值
  • 中文文本聚类

    2018-09-05 14:01:11
    使用python实现中文文本聚类,利用kmeans算法,包含jiba分词方法等
  • 文本进行聚类文本预处理-->构造特征向量-->聚类,压缩包内含有实验用语料亲测可用, 谢谢支持。
  • 本数据集是用于文本聚类的中文文本数据,数据集不大属于小型数据集,主要是为了验证本人在博客上写的代码,拿到立马就可使用实现可参考本人的博客
  • KNN-文本聚类

    2017-10-23 15:33:21
    KNN文本聚类,下下来就能用,用于文本的无监督学习,注意内存
  • 基于粒子群优化的模糊文本聚类研究,柴瑞敏,王月,针对模糊文本聚类算法对输入顺序以及初始点的敏感的问题,提出了一种粒子群群优化的改进模糊聚类算法。该算法采用粒子群优化算法
  • 文本聚类 文本聚类的一种实现,使用 k-means 进行聚类,并使用作为距离度量。 等等,什么? 基本上,如果您有一堆文本文档,并且您想按相似性将它们分成 n 个组,那么您很幸运。 例子 为了测试这一点,我们可以查看...
  • [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像 http://blog.csdn.net/eastmount/article/details/50545937 包括输入文档txt,共1000行数据,每行都是分词完的文本。 本文主要讲述以下几点: 1.通过...
  • 提出了基于相似度矩阵的谱算法(SMSA) ,但该算法高昂的计算代价使其不适合大规模文本集.进一步研究了谱聚<br />类算法的特性 ,对超边的相似度矩阵进行谱分析 ,提出了基于超边相似度矩阵的元聚类算法( HSM2MCLA)...
  • 针对大多数基于向量空间模型的中文文本聚类算法存在高维稀疏、忽略词语之间的语义联系、缺少聚簇描述等问题,提出基于语义列表的中文文本聚类算法CTCAUSL(Chinese text clustering algorithm using semantic list)。...
  • 基于向量空间模型的文本聚类算法 姚清耘,刘功申,李 翔 (上海交通大学信息安全工程学院,上海 200240 摘 要:文本聚类是聚类的一个重要研究分支,是聚类方法在文本处理领域的应用该文探讨了基于向量空间模型的文本聚类...
  • 基于文本内容的自动文本聚类,崔再续,郭训力,随着国际互联网和企业内部互联网的飞速发展,各种电子文本数据的数量急剧增加,如何快速有效地获取、管理和使用这些文本数据,已
  • Kmeans文本聚类java实现

    热门讨论 2015-02-17 10:20:03
    java实现的文本聚类使用了kmeans算法
  • 一种基于MinHash的改进新闻文本聚类算法.pdf
  • 文本聚类算法的分析与比较.pdf
  • 基于知识图谱词义消歧的文本聚类方法.pdf
  • 蚁群-遗传融合的文本聚类算法.pdf
  • import re import os import string import jieba import logging import sys import codecs import traceback ...# tfidf_Result.txt记录关键词及对应文本重要性 # cluster_Result.txt记录聚类结果文件名+对应类别

    import re

    import os

    import string

    import jieba

    import logging

    import sys

    import codecs

    import traceback

    import pandas as pd

    import numpy as np

    from sklearn import feature_extraction

    from sklearn.feature_extraction.text import TfidfTransformer

    from sklearn.feature_extraction.text import CountVectorizer

    from sklearn.cluster import KMeans

    from collections import Counter

    from sklearn import metrics

    # ======== 数据编码格式转化 ========def get_text():

    base_path = "D:\yuliao\"

    filelist = os.listdir(base_path) #功能相当于在base_path目录下执行dir命令,返回为list类型 data_dict = {}

    f2 = open("D:\data.txt", "w",encoding="utf-8")

    for files in filelist:

    f = open(base_path + files, "r",encoding="utf-8")

    text = f.read().replace(" ", "")

    #data_temp = text # 转换为unicode编码形式 data = "".join(re.findall(u"[一-鿿]+", text)) # 必须为unicode类型,取出所有中文字符 f2.write(data + " ")

    f2.close()

    class TextCluster(object):

    # 初始化函数,重写父类函数 def __init__(self):

    pass

    def seg_words(self, sentence):

    seg_list = jieba.cut(sentence) # 默认是精确模式 return " ".join(seg_list) # 分词,然后将结果列表形式转换为字符串

    # 加载用户词典 def load_userdictfile(self, dict_file):

    jieba.load_userdict(dict_file)

    def load_processfile(self, process_file):

    corpus_list = []

    try:

    fp = open(process_file, "r",encoding="utf-8")

    for line in fp:

    conline = line.strip()

    corpus_list.append(conline)

    return True, corpus_list

    except:

    logging.error(traceback.format_exc())

    return False, "get process file fail"

    def output_file(self, out_file, item):

    try:

    fw = open(out_file, "a")

    fw.write("%s" % (item),encoding="utf-8")

    fw.close()

    except:

    logging.error(traceback.format_exc())

    return False, "out file fail"

    # 释放内存资源 def __del__(self):

    pass

    def process(self, process_file, tf_ResFileName, tfidf_ResFileName, num_clusters, cluster_ResFileName):

    try:

    sen_seg_list = []

    flag, lines = self.load_processfile(process_file)

    if flag == False:

    logging.error("load error")

    return False, "load error"

    for line in lines:

    sen_seg_list.append(self.seg_words(line))

    # 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频 tf_vectorizer = CountVectorizer()

    # fit_transform是将文本转为词频矩阵 tf_matrix = tf_vectorizer.fit_transform(sen_seg_list)

    tf_weight = tf_matrix.toarray()

    # print tf_weight

    # 该类会统计每个词语的tf-idf权值 tfidf_transformer = TfidfTransformer()

    # fit_transform是计算tf-idf tfidf_matrix = tfidf_transformer.fit_transform(tf_matrix)

    # 获取词袋模型中的所有词语 word_list = tf_vectorizer.get_feature_names()

    # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重 tfidf_weight = tfidf_matrix.toarray()

    # 打印特征向量文本内容 # print "Features length: " + str(len(word_list)) tf_Res = codecs.open(tf_ResFileName, "w", "utf-8")

    word_list_len = len(word_list)

    for num in range(word_list_len):

    if num == word_list_len - 1:

    tf_Res.write(word_list[num])

    else:

    tf_Res.write(word_list[num] + " ")

    tf_Res.write(" ")

    # 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重 for i in range(len(tf_weight)):

    # print u"-------这里输出第", i, u"类文本的词语tf-idf权重------" for j in range(word_list_len):

    if j == word_list_len - 1:

    tf_Res.write(str(tf_weight[i][j]))

    else:

    tf_Res.write(str(tf_weight[i][j]) + " ")

    tf_Res.write(" ")

    tf_Res.close()

    # 输出tfidf矩阵 tfidf_Res = codecs.open(tfidf_ResFileName, "w", "utf-8")

    for num in range(word_list_len):

    if num == word_list_len - 1:

    tfidf_Res.write(word_list[num])

    else:

    tfidf_Res.write(word_list[num] + " ")

    tfidf_Res.write(" ")

    # 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重 for i in range(len(tfidf_weight)):

    for j in range(len(word_list)):

    if j == word_list_len - 1:

    tfidf_Res.write(str(tfidf_weight[i][j]))

    else:

    tfidf_Res.write(str(tfidf_weight[i][j]) + " ")

    tfidf_Res.write(" ")

    tfidf_Res.close()

    # ======== 聚类分析 ========= km = KMeans(n_clusters=num_clusters)

    km.fit(tfidf_matrix)

    print ("===== 总体轮廓系数 =====")

    print (metrics.silhouette_score(tfidf_matrix, km.labels_, metric="euclidean")) #轮廓系数[-1,1] kas=metrics.silhouette_samples(tfidf_matrix, km.labels_, metric="euclidean") #生成每个文件轮廓系数 print ("===== 每类样本个数 =====")

    print (Counter(km.labels_)) # 每类分到多少样本 # 中心点 # print(km.cluster_centers_) # 每个样本所属的簇 clusterRes = codecs.open(cluster_ResFileName, "w", "utf-8")

    # 将数据写入文件 count = 1

    a=os.listdir("D:\yuliao\")

    kas1=kas.tolist()

    while count <= len(km.labels_):

    clusterRes.write(str(count) +" "+a[count-1]+" "+str(km.labels_[count - 1])+" "+str(kas1[count-1]))

    clusterRes.write(" ")

    count = count + 1

    clusterRes.close()

    except:

    logging.error(traceback.format_exc())

    return False, "process fail"

    # 输出聚类结果if __name__ == "__main__":

    rootdir = "D:\"

    get_text()

    tc = TextCluster()

    tc.process(rootdir+"data.txt", rootdir+"tf_Result.txt", rootdir+"tfidf_Result.txt",3, rootdir+"cluster_Result.txt")

    # data.txt记录所有数据集,一行是一个文本 # tf_Result.txt记录关键词及对应文本出现频数 # tfidf_Result.txt记录关键词及对应文本重要性 # cluster_Result.txt记录聚类结果文件名+对应类别

    展开全文
  • 一种基于n-gram短语的文本聚类方法研究
  • 基于并行信息瓶颈的多语种文本聚类算法
  • 文本聚类算法

    2020-08-11 10:47:53
    1 聚类思想 聚类是一种无监督学习。也就是说,聚类是在预先不知道欲划分类的情况下,根据信息相似度原则进行信息聚类的一种方法。聚类的思想是使得属于同类别的...2 文本聚类一般步骤 2.1 文本表示(Text Representatio

    1 聚类思想

    聚类是一种无监督学习。也就是说,聚类是在预先不知道欲划分类的情况下,根据信息相似度原则进行信息聚类的一种方法。聚类的思想是使得属于同类别的对象之间的差别尽可能的小,而不同类别上的对象的差别尽可能的大。与分类规则不同,进行聚类前并不知道将要划分成几个组和什么样的组,也不知道根据哪些空 间区分规则来定义组。常见的聚类算法包括:K-均值聚类算法、K-中心点聚类算法、CLARANS、BIRCH、CLIQUE、DBSCAN等。

    2 文本聚类一般步骤

    2.1 文本表示(Text Representation)

    把文档表示成聚类算法可以处理的形式。

    2.2 聚类算法选择或设计(Clustering Algorithms)

    算法的选择,往往伴随着相似度计算方法的选择。在文本挖掘中,最常用的相似度计算方法是余弦相似度。聚类算法有很多种,但是没有一个通用的算法可以解决所有的聚类问题。因此,需要认真研究要解决的问题的特点,以选择合适的算法。

    2.3 聚类评估(Clustering Evaluation)

    因为没有训练文档集合,所以评测聚类效果是比较困难的。 常用的方法是: 选择人工已经分好类或者做好标记的文档集合作为测试集合,聚类结束后,将聚类结果与已有的人工分类结果进行比较。常用评测指标也是查全率、查准率及F1值。

    3 常用文本聚类算法

    3.1 K-means

    作为基于距离的典型聚类算法,“K-means”一词最早于1967年被加州大学的詹姆斯麦奎恩(James MacQueen)首次使用,而其算法思想则可以追溯到术语提出的十年之前——1957年,斯图尔特劳埃德(Stuart Lloyd)在研究一种脉冲码调制技术时首先研发了 K-means 的标准算法,遗憾的是,其学术成果直到1982年才被贝尔实验室公开出版。在此之间的1965年,福吉(E.W.Forgy)在《Biometrics》发表了本质上相同的方法,因此, K-means 算法有时也被人们称为 Lloyd-Forgy 方法。

    已知数据集 D = x 1 , x 2 , . . . x n D={x1,x2,...xn} D=x1,x2,...xn,其中每一个样本都可以由一个 d 维实向量表示, K-means 聚类的目的便是要将数据集中的这 n 个样本划分到 k 个集合之中(k 小于等于 n),使得各个集合的组内平方和(Within-Cluster Sum of Squares)最小。该问题也可以由下式表示:
    在这里插入图片描述

    其中,S 为样本的聚类, μ i μi μi则为 S i Si Si中所有点的均值向量。

    在文本聚类中,文本数据集中的每一个样本(我们将其简单称为“文档”)都可以由一个文档特征向量表示,被划分为同一个集合的文档在 K-means 中也被称之为属于同一个簇(cluster),而用于规定簇的中心点则本称为质心(centroid),当一个向量到某个质心的距离小于其至其他所有质心的距离时,这个向量对应的文档将本划分入质心所对应的簇中。为了在文本数据分析中达到文本聚类的目标,K-means 聚类的算法过程通常分为以下步骤:

    1)文本数据集中随机选取K个文档,作为初始的质心;

    2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心对应的簇;

    3)通过求中心向量的方式重新计算已经得到的各个簇的质心;

    4)迭代2~3步直至新的质心与原质心相等或小于指定阈值(或是迭代次数达到外生给定的最大次数),算法结束。

    K-means 算法的主要优势在于快速简单、对大数据集有较高的效率,在分析大量文本数据时相比与其他聚类算法更加实用,而其缺点在于容易受 K 值、初始类质心样本选择或初始类划分的影响,在进行文本聚类时,确定最优的 K 值往往需要花费大量的时间资源。

    3.2 BIRCH

    BIRCH 算法,全称为利用层次方法的平衡迭代规约和聚类(Balanced Iterative Reducing and Clustering Using Hierarchies),这一在1996年由 Tian Zhang 提出来的聚类算法。虽然名字冗长拗口,但 BIRCH 算法却是广受学界认可的一种节约内存资源的高质量聚类方法。

    相比于其他多遍扫描的聚类算法, BIRCH 算法利用了树结构来帮助我们快速的聚类,我们一般将 BIRCH 算法中的这种树结构称之为聚类特征树(Clustering Feature Tree,CF Tree)。聚类特征(Clustering Feature,CF)是聚类特征树的重要概念,它可以被理解为在聚类特征树某一节点上对样本划分的一种状态,其定义可由下式表示:
    在这里插入图片描述

    可以看到,我们将聚类特征表示为一个三元组结构,其中 N 为这个聚类特征中拥有的样本点的数量, LS 为这个聚类特征中拥有的样本点各特征维度的和向量, SS 则代表这个聚类特征中拥有的样本点各特征维度的平方和向量。聚类特征CF有一个很好的性质,就是满足线性关系,也就是说两个聚类特征可以进行相加,且有

    C F 1 + C F 2 = ( N 1 + N 2 , L S 1 + L S 2 , S S 1 + S S 2 ) CF1+CF2 = (N_1+N_2, LS_1+LS_2, SS_1 +SS_2) CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)

    在这里插入图片描述

    作为 BIRCH 算法中的核心部分,聚类特征树,也称 CF 树,是由多个不同层次下 CF 组成的节点构成的树结构,除了聚类特征 CF 以外, CF 树还涉及另外三个重要概念:是每个内部节点的最大 CF 数 B B B、每个叶子节点的最大 CF 数 L L L ,叶节点中每个 CF 的最大样本半径阈值 T T T ,通过控制这三个参数,在数据集准备充分的情况下,我们就能够构建出一棵聚类特征树。

    聚类特征树的构建过程如下:

    1)从根节点开始,自上而下选择最近的子节点;

    2)到达叶子节点后,检查最近的元组 C F i CF_i CFi 能否在大样本半径阈值 T T T 范围内吸收此数据点,如果可以,则更新CF值;若不能,则考虑是否可以添加一个新的元组,若无法添加则分裂最远的一对元组,作为种子,按最近距离重新分配其它元组;

    3)更新每个非叶节点的CF信息,如果分裂节点,在父节点中插入新的元组,检查分裂,直到root。

    在此基础上, BIRCH 算法的流程分为以下4个阶段:

    1)在内存中构建 CF 树;

    2)对第1阶段中的 CF 树进行瘦身(可选步骤);

    3)以 CF 叶子节点对应的子簇为基础,实现数据点的聚类;

    4)对第3阶段的聚类结果进行精修(可选步骤)。

    @todo 补充算法流程

    在文本聚类中, BIRCH 算法的主要优势体现在它对系统内存的节约,在算法执行过程中,聚类特征树仅仅保存了 CF 节点和对应的指针;树状的结构使得 BIRCH 算法更适用于在分析那种实际种类繁多的文本聚类场景之中;由于可以识别噪音点, BIRCH 算法常用于对大量数据集进行初步分类的预处理。但同时, BIRCH 算法由于在执行过程中对每个节点的 CF 个数加以了限制,故可能导致聚类的结果因此与真实的类别分布不同,另外文本数据高维特征的特点也会使 BIRCH 算法的聚类效果大打折扣,在使用 BIRCH 算法进行文本聚类之前,我们应首先进行一定的降维处理。

    3.3 GMM(高斯混合模型聚类)

    学界对高斯混合模型(Gaussian mixture model,GMM)的研究动力最早来自于动物学,1893年,动物学家瓦尔特弗兰克拉斐尔·韦尔登(Walter Frank Raphael Weldon)在观察观察前人对雌性滨蟹前额身长比的研究报告时突发奇想,推测这些分布直方图的不对称性可能来自于两个不同的进化分歧,关于混合模型的研究也由此启程。

    随着后人在数学计算与统计学方面的努力,今天高斯混合模型已经成为了数据挖掘中广泛应用的聚类模型之一,特别是在图像处理方面广受欢迎。作为一个典型的概率模型类统计学习方法,高斯混合模型的基本思路便是将聚类问题看作为对每个样本的概率密度分布进行估计的问题,且根据中心极限定理,所有的样本都被假设服从于某一参数条件下的高斯分布。

    高斯分布的概率密度分布函数:

    ϕ ( y ∣ θ ) = 1 2 π σ e x p ( − ( y − μ ) 2 2 σ 2 ) \phi \left ( y\mid \theta \right )= \frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left ( y-\mu \right )^{2}}{2\sigma^{2}} \right ) ϕ(yθ)=2π σ1exp(2σ2(yμ)2)

    简单来说,高斯混合模型的聚类过程分为以下步骤:

    1)假设数据集样本整体都服从某个由 K K K 个高斯分布加权构成的整体混合分布,该分布被定义为: P ( y ∣ θ ) = ∑ k = 1 K α k ϕ ( y ∣ θ k ) P(y\mid \theta )=\sum{k=1}^{K}\alpha{k}\phi (y\mid \theta_{k}) P(yθ)=k=1Kαkϕ(yθk)

    2)运用极大似然估计的方法对高斯分布概率密度函数中的参数 μ k \mu{k} μk σ k \sigma{k} σk 以及权重 α k \alpha_{k} αk 进行估计;

    3)得到明确的概率密度函数后,对数据集中的样本分别在每一个高斯分布上投影;

    4)选取对应概率最大的分布,作为该样本点所属的类。

    在求解极大似然估计时,实际执行中为了解决计算机函数求导的困难,一般会采用 EM 算法:第一步,对各个高斯模型的参数进行初始化;第二步,基于当前参数估计每个高斯模型的权重;第三步,基于估计的权重,重新确定高斯模型的参数。重复这二三两个步骤,直到两次参数估计的结果差异足够小,即近似达到极值( EM 算法存在陷入局部最优的风险,因此该估计值不一定就是最优值)。

    我们可以发现, EM 算法的思想与 K-means 聚类中的不断迭代过程似乎由异曲同工之妙,与 K-means 相比,高斯混合模型与之的共同点还在于二者都需要指定固定的类别数 K ,并且都运用到了初始化的过程,其中K-means 初始化中心, 高斯混合模型则初始化密度函数参数;而二者的区别则在于优化的目标不同, K-means 强调最短距离,而高斯混合模型则基于极大似然估计,同时二者在最终的类别划分上也不相同,依据分别为距离与概率。

    @todo 补充文本数据分析中 GMM 的优势

    劣势:类别数 K 不能设定过多,不适用于类别数繁多的文本数据分析场景。

    3.4 GAAC(凝聚层次聚类)

    GAAC(Group-average Agglomerative Clustering),也称凝聚层次聚类法,是一种基于层次聚类法(Hierarchical Clustering)思想的无监督学习方法。GAAC 的核心思路是簇与簇之间的合并,在聚类的过程中,所有的样本点在开始时各成一簇,之后不断重复合并两个距离最近的簇,直至簇的个数达到指定的数量。

    GAAC 法聚类的关键点在于明确两个簇之间的相似度度量,常用的度量方法有以下三种:

    1)单链(MIN):将不同两个簇的两个最近的点之间的距离作为两个簇的相似度。

    2)全链(MAX):将不同两个簇的两个最远的点之间的距离作为两个簇的相似度。

    3)组平均:取来自两个不同簇的所有点组合,计算点与点之间的距离,以其平均值作为两个簇的相似度。

    同时,在 GAAC 法中,为了防止出现过度簇与簇合并的现象,在算法执行时会规定一个退出条件,如当前簇数为初始簇数的 10% 等等,以保证凝聚层次聚类法得到理想的聚类结果。

    在文本数据分析中,我们很少会对 GAAC 法进行直接的应用,这是因为 GAAC 在计算簇相似度时往往需要一次性计算大量的样本点间距离,这使得在处理文本数据这一类高维度数据时将耗费大量的资源与时间。因此,当我们面对数据规模较大的文本数据分析时,对 GAAC 法进行使用前一般会结合有效的抽样技术,并将它作为其他聚类方法的铺垫或补充。

    展开全文
  • 基于边界距离的多向量文本聚类方法.pdf
  • 基于概念语义场的文本聚类算法研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,507
精华内容 15,002
关键字:

文本聚类