资源简介

该资源主要参考我的博客: [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像 http://blog.csdn.net/eastmount/article/details/50545937 包括输入文档txt,共1000行数据,每行都是分词完的文本。 本文主要讲述以下几点: 1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词); 2.调用scikit-learn中的K-means进行文本聚类; 3.使用PAC进行降维处理,每行文本表示成两维数据; 4.最后调用Matplotlib显示聚类效果图。 免费资源,希望对你有所帮助~ By Eastmount

资源截图

代码片段和文件信息

# coding=utf-8  
“““ 
Created on 2016-01-16 @author: Eastmount
输入:打开 All_BHSpider_Result.txt 对应1000个文本
     001~400 5A景区 401~600 动物 601~800 人物 801~1000 国家
输出:BHTfidf_Result.txt tfidf值
参数:weight权重 这是一个重要参数
“““  
  
import time          
import re          
import os  
import sys
import codecs
import shutil
import numpy as np
import matplotlib
import scipy
import matplotlib.pyplot as plt
from sklearn import feature_extraction  
from sklearn.feature_extraction.text import TfidfTransformer  
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import HashingVectorizer 

if __name__ == “__main__“:
    
    #########################################################################
    #                           第一步 计算TFIDF
    
    #文档预料 空格连接
    corpus = []
    
    #读取预料 一行预料为一个文档
    for line in open(‘01_All_BHSpider_Content_Result.txt‘ ‘r‘).readlines():
        #print line
        corpus.append(line.strip())
    #print corpus

    #参考: http://blog.csdn.net/abcjennifer/article/details/23615947
    #vectorizer = HashingVectorizer(n_features = 4000)

    
    #将文本中的词语转换为词频矩阵 矩阵元素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 = “BHTfidf_Result.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 u“-------这里输出第“ 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=4)   #景区 动物 人物 国家
    s = clf.fit(weight)
    print s

    ‘‘‘
    print ‘Start MiniBatchKmeans:‘
    from sklearn.cluster import MiniBatchKMeans
    clf = MiniBatchKMeans(n_clusters=20)
    s = clf.fit(weight)
    print s
    ‘‘‘

    #中心点
    print(clf.cluster_centers_)
    
    #每个样本所属的簇
    label = []               #存储1000个类标 4个类
    print(clf.labels_)
    i = 1
    while i <= len(clf.labels_):
        print i clf.labels_[i-1]
        label.append(clf.labels_[i-1])
        i = i + 1

    #用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数  958.137281791
    print(clf.ine

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1046459  2016-01-17 09:14  python kmeans\01_All_BHSpider_Content_Result.txt

     文件       4722  2016-01-20 05:02  python kmeans\01_sklearn_tfidf_cluster_content.py

     目录          0  2016-01-20 05:02  python kmeans

----------- ---------  ---------- -----  ----

              1051181                    3


评论

共有 条评论