博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类
阅读量:4879 次
发布时间:2019-06-11

本文共 1867 字,大约阅读时间需要 6 分钟。

# coding=utf-8    
"""  
#K-means  
"""    
    
import time            
import re            
import os    
import sys  
import codecs  
import shutil  
import numpy as np  
from sklearn import feature_extraction    
from sklearn.feature_extraction.text import TfidfTransformer    
from sklearn.feature_extraction.text import CountVectorizer    
  
if __name__ == "__main__":  
      
    #########################################################################  
    #                           第一步 计算TFIDF  
      
    #文档预料 空格连接  
    corpus = []  
      
    #读取预料 一行预料为一个文档  
    for line in open('D:/pyfenlei/p2-1-fenci.txt', 'r').readlines():  
        print (line)
        corpus.append(line.strip())  
    #print corpus  
    #time.sleep(1)  
      
    #将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i类文本下的词频  
    vectorizer = CountVectorizer()  
  
    #该类会统计每个词语的tf-idf权值  
    transformer = TfidfTransformer()  
  
    #第一个fit_transform是计算tf-idf 第二个fit_transform是将文本转为词频矩阵  
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  
  
    #获取词袋模型中的所有词语    
    word = vectorizer.get_feature_names()  
  
    #将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重  
    weight = tfidf.toarray()  
  
    #打印特征向量文本内容  
    print ('Features length: ' + str(len(word)))  
    resName = "D:/pyfenlei/p2-1-tfidf.txt"  
    result = codecs.open(resName, 'w', 'utf-8')  
    for j in range(len(word)):  
        result.write(word[j] + ' ')  
    result.write('\r\n\r\n')  
  
    #打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重    
    for i in range(len(weight)):  
        print ("-------这里输出第",i,u"类文本的词语tf-idf权重------")
        for j in range(len(word)):  
            #print weight[i][j],  
            result.write(str(weight[i][j]) + ' ')  
        result.write('\r\n\r\n')  
  
    result.close()  
  
  
    ########################################################################  
    #                               第二步 聚类Kmeans  
  
    print ('Start Kmeans:')  
    from sklearn.cluster import KMeans  
    clf = KMeans(n_clusters=10)  
    s = clf.fit(weight)  
    print (s)  
  
    #20个中心点  
    print(clf.cluster_centers_)  
      
    #每个样本所属的簇  
    print(clf.labels_)  
    i = 1  
    while i <= len(clf.labels_):  
        print (i, clf.labels_[i-1])  
        i = i + 1  
  
    #用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数  
    print(clf.inertia_) 

转载于:https://www.cnblogs.com/bdccloudy/p/7665216.html

你可能感兴趣的文章
如何使用jQuery $.post() 方法实现前后台数据传递
查看>>
Using Flash Builder with Flash Professional
查看>>
jsp/post中文乱码问题
查看>>
C# 插入或删除word分页符
查看>>
数据库数据的查询----连接查询
查看>>
找不到可安装的ISAM ,asp.net读取数据丢失,解决的一列里有字符与数字的
查看>>
Java学习笔记三(对象的基本思想一)
查看>>
Java程序(文件操作)
查看>>
KMP算法 最小循环节 最大重复次数
查看>>
Proving Equivalences (强连通,缩点)
查看>>
Period (KMP算法 最小循环节 最大重复次数)
查看>>
sgu 103. Traffic Lights
查看>>
poj 3621 Sightseeing Cows
查看>>
hdu 3666 THE MATRIX PROBLEM
查看>>
TopCoder SRM 176 Deranged
查看>>
Javascript中数组与字典(即map)的使用
查看>>
C++不完整的类型
查看>>
memcached(十三)注意事项
查看>>
ITerms2在mac系统下的安装和配色,并和go2shell关联
查看>>
nginx常见面试题1
查看>>