python文本聚类分析_python机器学习kmeans算法——对文本进行聚类分析

#!/usr/bin/env python#-*- coding: utf-8 -*-#@File : kmeans.py#@Author: 田智凯#@Date : 2020/3/19#@Desc :机器学习kmeans算法,对科技成果项目进行聚类分析

from __future__ importprint_functionimporttimefrom sklearn.feature_extraction.text importTfidfVectorizerimportmatplotlib.pyplot as pltfrom sklearn.cluster importKMeans, MiniBatchKMeansimportpymssql#读取sqlserver数据库

defget_dbdata():

conn_read= pymssql.connect("127.0.0.1", "sa", "###", "test", charset="GBK")

dataset=[]

sql= "select guanjianci from julei_test"cursor=conn_read.cursor()

cursor.execute(sql)

data_count=0for line incursor:

data_count+=1dataset.append(line[0])

cursor.close()

conn_read.close()print(dataset)returndatasetdef transform(dataset, n_features=1000):

vectorizer= TfidfVectorizer(max_df=0.5, max_features=n_features, min_df=2, use_idf=True)

X=vectorizer.fit_transform(dataset)returnX, vectorizerdef train(X, vectorizer, true_k=10, minibatch=False, showLable=False):#使用采样数据还是原始数据训练k-means,

ifminibatch:

km= MiniBatchKMeans(n_clusters=true_k, init='k-means++', n_init=1,

init_size=1000, batch_size=1000, verbose=False)else:

km= KMeans(n_clusters=true_k, init='k-means++', max_iter=300, n_init=1,

verbose=False)

km.fit(X)ifshowLable:print("Top terms per cluster:")

order_centroids= km.cluster_centers_.argsort()[:, ::-1]

terms=vectorizer.get_feature_names()print(vectorizer.get_stop_words())for i inrange(true_k):print("Cluster %d:" % i, end='')for ind in order_centroids[i, :10]:print('%s' % terms[ind], end='')print()

result=list(km.predict(X))print('Cluster distribution:')print(dict([(i, result.count(i)) for i inresult]))return -km.score(X)#指定簇的个数k

defk_determin():'''测试选择最优参数'''dataset=get_dbdata()print("%d documents" %len(dataset))

X, vectorizer= transform(dataset, n_features=500)

true_ks=[]

scores=[]#中心点的个数从3到200(根据自己的数据量改写)

for i in range(3, 200, 1):

score= train(X, vectorizer, true_k=i) /len(dataset)print(i, score)

true_ks.append(i)

scores.append(score)

plt.figure(figsize=(8, 4))

plt.plot(true_ks, scores, label="error", color="red", linewidth=1)

plt.xlabel("n_features")

plt.ylabel("error")

plt.legend()

plt.show()defmain():'''在最优参数下输出聚类结果'''dataset=get_dbdata()

X, vectorizer= transform(dataset, n_features=500)

score= train(X, vectorizer, true_k=25, showLable=True) /len(dataset)print(score)if __name__ == '__main__':

start=time.time()#k_determin()#先确定k值

main()

end=time.time()print('程序运行时间',end-start)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 文本kmeans聚类算法是一种常用的文本聚类方法,它可以将文本数据集中的文本按照相似度进行分组,从而实现对文本数据的有效管理和分析Python语言提供了丰富的文本处理和机器学习库,可以方便地实现文本kmeans聚类算法。通过Python的sklearn库中的KMeans类,可以快速实现文本kmeans聚类算法,并对文本数据进行聚类分析。 ### 回答2: K-Means 是一种基于距离的无监督学习算法,它可以将样本点分成 K 类,每一类的样本点到其所在类的中心点的距离最小。 文本KMeans聚类算法Python是一种应用K-Means算法来对文本进行聚类的方法,可以在大规模的文本数据集中发现一些潜在的群组模式。在文本聚类中,每个文档可以转换成向量形式,然后通过计算向量之间的距离来确定它们之间的相似度。 在Python中,我们可以使用sklearn库来使用K-Means算法文本进行聚类。下面是文本KMeans聚类算法Python的步骤: 1.准备数据:准备要聚类文本数据,将文本数据转化为向量形式。 2.选择K值:根据文本数据的实际情况,选择适合的K值,即要将文本数据分成多少类。 3.初始化K个中心点:选择K个随机的样本点作为初始中心。 4.计算距离:计算每个样本点与K个中心点的距离。 5.分组:将每个样本点分配到距离最近的中心点所在的类别。 6.重新计算中心点:对于每个类别,重新计算其所有样本点的均值,并将均值作为新的中心点。 7.再次计算距离:计算每个样本点与K个中心点的距离。 8.重新分组:将每个样本点分配到距离最近的中心点所在的类别。 9.重复迭代:重复执行第6-8步骤,直到收敛。 10.输出结果:输出聚类结果。 在实现过程中,需要注意以下一些问题: 1.初始化中心点的选择:要避免中心点在同一区域出现的概率,并尽可能避免中心点过度接近。 2.K值的选择:选择正确的K值可以帮助得到更好的聚类效果。 3.停止迭代条件:需要设置一个停止迭代的条件,以避免无限循环。 总之,文本KMeans聚类算法Python是一种很有效的文本聚类算法,可以通过对文本进行分组,帮助我们发现文本数据中的潜在模式和趋势。 ### 回答3: 文本kmeans聚类算法Python是一种常用的文本挖掘方法,可用于对大量文本数据进行聚类分析。该算法通过计算文本之间的相似度,将相似的文本分为同一类别,从而对大量文本进行有效的分类和分析。 首先,需要进行文本数据的预处理。包括去除停用词、提取关键词、文本分词、特殊符号处理等。这样可以将文本信息转化为可用于计算相似度的数据集。 接下来,可以使用Python中的sklearn库导入KMeans聚类算法。通过设置不同的参数,可以对文本数据进行分组。 然后,将分好类的文本数据可视化展示。可以使用Python中的matplotlib库将分类结果以图表的方式展示出来,便于用户直观地了解文本的分类情况。 最后,需要对聚类结果进行评估。可以通过计算聚类的质量度量指标,如轮廓系数等,对聚类效果进行评估。 总之,文本kmeans聚类算法Python是一种强大的文本分析工具,可以大大提高文本处理的效率和准确性。通过使用该算法,可以有效地发现文本之间的联系和规律,并为后续的文本分析提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值