kmeans DBSCAN LDA聚类 TSNE对聚类效果进行可视化展示

kmeans DBSCAN LDA聚类 TSNE对聚类效果进行可视化展示

对代码进行记录,方便以后使用

kmeans聚类代码

from sklearn.cluster import KMeans
km_cluster = KMeans(n_clusters=3, max_iter=300, n_init=40,init='k-means++', n_jobs=-1)
result = km_cluster.fit_predict(data)#对句子进行聚类时,data是一个二维的nparray,每个内层的nparray代表每个句子的语义向量,示例  data = np.array([[1.12486,-2.1483,0.1482],[-0.1473,-1.2564,3.1452]])

参数备注:
1)n_clusters:聚类类别数,人为指定
2)max_iter:迭代次数
3)n_jobs:进程数量,值为-1时代表线程全开
4)result:每一个句子的聚类结果标签,数据类型为np.array,假如对句子1,句子2,句子3进行聚类,句子1和句子2是一类,句子3单独是一类,则result的值为[0,0,1]

DBSCAN聚类代码

import numpy as np  # 数据结构
import sklearn.cluster as skc  # 密度聚类
from sklearn import metrics  # 评估模型
result = skc.DBSCAN(eps=1.5, min_samples=3).fit(data)#对句子进行聚类时,data是一个二维的nparray,每个内层的nparray代表每个句子的语义向量,示例  data = np.array([[1.12486,-2.1483,0.1482],[-0.1473,-1.2564,3.1452]])
labels = result.labels_.tolist()

备注:
1)DBSCAN与kmeans不同的是,Kemans可以预先指定聚类类别,而DBSCAN不可以

2)labels代表每个句子聚类的类别标签,数据类型为np.array,假如对句子1,句子2,句子3进行聚类,句子1和句子2是一类,句子3单独是一类,则result的值为[0,0,1]

LDA聚类代码

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import jieba
import numpy as np
#使用LDA对文档中的多个句子进行聚类

#读文件分词
with open(filepath,'r') as rf:
    lines = rf.readlines()
split_words = []
for line in lines:
    words = jieba.lcut(line)
    split_words.append(' '.join(words))#split_words用于训练LDA模型,其数据格式为列表,详细情况见备注1)
    
#构造词频向量
vectorizer = CountVectorizer()
vec_ft = vectorizer.fit_transform(split_words)#见备注2)

#创建LDA对象
lda = LatentDirichletAllocation(n_components=3, learning_offset=50, random_state=0,n_jobs=-1,max_iter=1000)
#训练LDA模型,得到聚类结果
lda_result = lda.fit_transform(vec_ft)

备注
1)split_words。如果是对多个句子进行聚类,则列表中的每一个元素为:每个句子分词以后,以空格作为连接符将所有词汇拼接起来,形成一个字符串,以“我喜欢吃苹果”和“今天晴天”两个句子为例,split_words中的数据为[‘我 喜欢 吃 苹果’,‘今天 晴天’],若是对文档进行聚类,则将示例中的句子转换成文档

2)vec_ft。其数据类型为scipy.sparse.csr.csr_matrix 使用vec_ft.toarray()可得到二维的np.array,其中每一个内层的array代表每一个句子的向量

3)lda_result。聚类结果,同样是一个二维的np.array,每一个内层的array代表每一个句子分别属于哪一类的概率,将概率大的类别作为该句子所属类别,例如对三个句子进行聚类,且聚类类别为2,lda_result的结果是[[0.1,0.7],[0.4,0.6],[0.2,0.8]],则三个句子的聚类类别标签分别为2,1,1

TSNE对聚类效果进行可视化展示代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
vec = np.array([0.1457,0.2496,0.3548],[0.1259,0.1473,0.2846],[5.1478,5.2896,6.2484])#见备注1)
target = np.array([0,0,1])#见备注2)

tsne = TSNE(n_components = 2,init = 'pca',random_state = 0,n_jobs = -1)
output = tsne.fit_transform(vec)
plt.rcParam['figure.figsize'] = 20,20#画布大小
plt.scatter(output[:,0],output[:,1],c=target)
plt.title('cluster result')
plt.save(filepath,bbox_inches = 'tight')
plt.show()

备注:
1)vec。数据类型为二维的np.array,其中每一个内层的array代表每一个句子的向量,也就是输入到kmeans,DBSCAN,LDA等聚类模型中的向量

2)target。数据类型为一维的np.array,其中每一个元素为vec中每一个向量所对应的聚类类别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值