手动实现简单的 文本聚类算法 词袋模型+consin相似度+UPGMA聚类

 全手写文本聚类算法 词袋模型-->consin相似度-->UPGMA聚类

punctunation = [",", ":", ".", "'", "?", "/", "-", "+", "&", "(", ")"]
sent = ["I love sky, I love sea.", "i love sky, I love sea.", "I want to go to beijing", "I want to go to shang hai", "i want to go to beijing", "you are happy","how are you",\
        "today is sunday","I am liming"]
clean_tokenized = []
# for item in sent:
#     clean_tokenized.append(item.split(" "))
#
# sent = clean_tokenized
# clean_tokenized = []


for s in sent:
    s = s.lower()
    for punc in punctunation:
        s = s.replace(punc, "")
    clean_tokenized.append(s)
print("clean_tokenized:",clean_tokenized)
texts = []
for item in clean_tokenized:
    texts.append(item.split(" "))
all_list = []
for text in texts:
    all_list += text
corpus = set(all_list)
corpus_dict = dict(zip(corpus, range(len(corpus))))
print("corpus:",corpus)
print("corpus_dict:",corpus_dict)
print("text:",texts)



def vector_rep(text,corpus_dict):
    vec = []
    for key in corpus_dict.keys():
        if key in text:
            vec.append((corpus_dict[key], text.count(key)))
        else:
            vec.append((corpus_dict[key], 0))
    vec = sorted(vec, key=lambda x: x[0])
    vec_only = []
    for ve in vec:
        vec_only += [ve[1]]
    return vec_only

for i in texts:
    print(i)
vec1 = vector_rep(texts[0], corpus_dict)
vec2 = vector_rep(texts[1], corpus_dict)
print(vec1)
from math import sqrt
def similarity(vec1,vec2):
    inner_value = 0
    square_length_vec1 = 0
    square_length_vec2 = 0
    for tup1, tup2 in zip(vec1, vec2):
        inner_value += tup1 * tup2
        square_length_vec2 += tup1 ** 2
        square_length_vec1 += tup2 ** 2
    return(inner_value / sqrt(square_length_vec1*square_length_vec2))

def position(vec_list):
    x = 0
    y = 0
    min_dis = -1000
    similarityv = -1000
    for i in range(0, len(vec_list)):
        for j in range(i+1, len(vec_list)):
            similarityv = similarity(vec_list[i], vec_list[j])
            if similarityv > min_dis:
                min_dis = similarityv
                x = i
                y = j
    return x, y

def listadd(listx,listy):
    return [(listx[i]+listy[i])/2 for i in range(0, len(listx))]

print(listadd(vec1,vec2))

def cluster(list, n):
    vec_list = []
    log = []
    for li in list:
        vec_list.append(vector_rep(li, corpus_dict))
    print(vec_list)
    while len(vec_list) > n:
        x,y = position(vec_list)
        log.append((x, y))
        addlist = listadd(vec_list[x], vec_list[y])
        vec_list.append(addlist)
        del vec_list[x]
        del vec_list[y-1]
    return log




log_list = cluster(texts, 4)
print("log_list:", log_list)
for lo in log_list:
    tem = sent[lo[0]] + sent[lo[1]]
    if lo[0]<lo[1]:
        del sent[lo[0]]
        del sent[lo[1]-1]
    else:
        del sent[lo[1]]
        del sent[lo[0]-1]

    sent.append(tem)
print(sent)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: [Python] kmeans文本聚类算法pac降维matplotlib显示聚类图像。 首先,我们需要使用Python中的KMeans算法实现文本聚类。KMeans算法是一种常见的无监督学习算法,用于将数据样本划分为K个不同的聚类。在文本聚类中,KMeans算法可以将文本数据集划分为相似主题或类别的聚类。 接下来,我们可以使用Principal Component Analysis (PAC)算法对文本数据进行降维。PAC算法是一种常用的降维方法,可以减少特征数目并保留数据集的主要信息。降维后的数据集可以更好地展示聚类结果。 最后,我们可以使用Python中的Matplotlib库显示聚类图像。Matplotlib是一个强大的可视化库,可以用于生成各种图表和绘图。在聚类分析中,可以使用Matplotlib生成散点图等图像来展示不同聚类及其关系。 总结起来,使用Python中的KMeans算法可以实现文本聚类,通过PAC算法可以对文本数据进行降维,然后使用Matplotlib库可以生成聚类图像以展示聚类结果。 注意:以上回答是基于题目中提供的信息,在回答中假设你拥有必要的Python编程知识。 ### 回答2: K-means是一种常用的聚类算法,用于将一组数据划分为不同的簇。在Python中,我们可以使用sklearn库中的KMeans模块实现算法。 首先,我们需要对文本进行预处理。可以使用自然语言处理的技术,如分词、去除停用词、词干提取等,将文本转换为数字向量表示。 然后,我们使用KMeans模块对文本进行聚类。首先需要选择聚类的簇的数量,然后调用fit方法进行拟合。可以设置其他参数,如初始聚类中心的选择方式、最大迭代次数等。 聚类完成后,我们可以使用KMeans模块的labels_属性获取每个样本所属的簇的标签。我们可以将文本和对应的标签保存到一个数据结构中,方便后续的可视化。 接下来,我们使用Principal Component Analysis(PCA)降维技术对文本数据进行降维。PCA可以将高维数据映射到低维空间,并保留最重要的特征。在Python中,我们可以使用sklearn库中的PCA模块实现降维。 最后,使用matplotlib库进行可视化,展示聚类的结果。可以将降维后的数据点以不同的颜色或形状表示,每种颜色或形状对应一个聚类簇。可以添加标题、坐标轴标签等,使得图像更加直观。 综上所述,通过使用Python中的KMeans文本聚类算法、PCA降维和matplotlib可视化工具,我们可以将文本数据进行聚类,并通过图像呈现出聚类结果,从而更好地理解数据的结构和特征。 ### 回答3: k-means文本聚类算法是一种无监督学习算法,用于将具有相似语义特征的文本聚类在一起。它可以帮助我们理解和组织大量的文本数据。 首先,我们需要对文本数据进行预处理,包括去除停用词、分词、词干化等。接着,我们可以使用TF-IDF(词频-逆文档频率)对文本进行向量化,将文本转换为数值形式,以便后续的算法处理。 然后,我们可以使用k-means算法对向量化后的文本数据进行聚类。k-means算法的核心思想是将数据分成k个簇,使得每个簇内的样本与该簇内其他样本的距离较小,与其他簇的距离较大。聚类过程中,我们选择初始化k个中心点,然后迭代地将每个样本分配到最近的中心点,并更新中心点的位置,直到达到停止条件。 在聚类完成后,我们可以使用Principal Component Analysis(PCA)算法进行降维处理,将高维的聚类结果可视化为二维或三维图像。PCA通过线性变换将原始数据映射到一个新的坐标系中,新坐标系的选择是使得新坐标系的第一主成分具有最大的方差,第二主成分具有次大的方差,以此类推。 最后,我们可以使用Matplotlib库来展示降维后的聚类图像。Matplotlib是一个强大的Python绘图库,可以绘制各种类型的图表,如散点图、柱状图、折线图等。我们可以将降维后的聚类结果在二维或三维坐标系下进行可视化展示,以便更直观地观察聚类效果。 总之,使用python的k-means文本聚类算法配合pac降维和Matplotlib显示聚类图像,可以帮助我们对文本数据进行聚类分析,并提供直观的可视化结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值