码迷,mamicode.com
首页 > 编程语言 > 详细

[python]机器学习 k-mean 聚类分析

时间:2020-03-22 22:26:38      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:for   range   pre   取出   red   抽取   end   矩阵   遍历   

1.聚类代码:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @File  : 聚类2.py
 4 # @Author: 赵路仓
 5 # @Date  : 2020/3/19
 6 # @Desc  :
 7 # @Contact : 398333404@qq.com 
 8 
 9 import csv
10 import re
11 import jieba.analyse
12 from sklearn.cluster import KMeans
13 from sklearn.feature_extraction.text import TfidfTransformer
14 from sklearn.feature_extraction.text import CountVectorizer
15 
16 labels = []
17 corpus = []  # 空语料库
18 # 这是三个要处理的文本 csv格式 需要修改
19 f = csv.reader(open("E:/Jingjinji3.csv", r+, encoding=utf-8))
20 f1 = csv.reader(open("E:/Tianjin3.csv", r+, encoding=utf-8))
21 f2 = csv.reader(open("E:/Hebei3.csv", r+, encoding=utf-8))
22 count = 0
23 
24 # 三个文件依次读取
25 for i in f:
26     count += 1
27     if count == 1:
28         continue
29     # 成果名称所在的列,从0开始 下面相同,需要修改
30     labels.append(i[1])
31     # 关键字所在的列 从0开始 下面相同,需要修改
32     corpus.append(i[24])
33 
34 for i in f1:
35     count += 1
36     if count == 1:
37         continue
38     labels.append(i[2])
39     corpus.append(i[20])
40 
41 for i in f2:
42     count += 1
43     if count == 1:
44         continue
45     labels.append(i[1])
46     corpus.append(i[19])
47 
48 vectorizer = CountVectorizer()  # 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频 
49 transformer = TfidfTransformer()  # 该类会统计每个词语的tf-idf权值
50 tfidf = transformer.fit_transform(
51     vectorizer.fit_transform(corpus))  # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵
52 weight = tfidf.toarray()  # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
53 word = vectorizer.get_feature_names()  # 获取词袋模型中的所有词
54 
55 for i in range(len(labels)):  # 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
56     print(u"-------这里输出第", i, u"类文本的词语tf-idf权重------")
57     list = weight[i].tolist()
58     print(word[list.index(max(list))], max(weight[i]))
59 
60 # 可以修改,n_clusters 要聚类的类数,n_init 初始化质心的迭代次数 init 选择为随机选取质心 n_jobs并发运行 5
61 mykms = KMeans(n_clusters=100, max_iter=300, n_init=100,
62                init=k-means++, n_jobs=5)
63 y = mykms.fit_predict(weight)
64 
65 # 要写入的文件,可以修改
66 f = csv.writer(open("E:/result.csv", w, encoding=utf-8, newline=‘‘))
67 f.writerow(["类别", "名称", "领域"])
68 f = csv.writer(open("E:/result.csv", a+, encoding=utf-8, newline=‘‘))
69 
70 # 标签用0-100的数组区分
71 for i in range(0, 20):
72     label_i = []
73     for j in range(0, len(y)):
74         if y[j] == i:
75             label_i.append(labels[j])
76     text = " ".join(label_i)
77     Key = jieba.analyse.extract_tags(text, topK=5)
78     print(Key)
79     print(label_ + str(i) + :, len(label_i), str(label_i))
80 
81     for a in label_i:
82         f.writerow([str(i), a,  .join(Key)])

函数以及用法见代码。

[python]机器学习 k-mean 聚类分析

标签:for   range   pre   取出   red   抽取   end   矩阵   遍历   

原文地址:https://www.cnblogs.com/zlc364624/p/12548865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!