python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类

# 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_) 
posted @   chinacloudy  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示