给出已经分好的英文数据集,数据集中没有重复的单词,进行文本聚类

聚类就是先把英文单词转化为向量,根据要聚成多少类,随机选择点,用欧氏距离或者余弦距离进行计算,把随机选择的中心点附近的点跟他归为一类,所以要先计算tdidf的值,

关于pycharm中kmeans包中的函数介绍

  1. n_clusters: 簇的个数,即你想聚成几类
  2. init: 初始簇中心的获取方法
  3. n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。
  4. max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)
  5. tol: 容忍度,即kmeans运行准则收敛的条件
  6. precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的
  7. verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)
  8. random_state: 随机生成簇中心的状态条件。
  9. copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。
  10. n_jobs: 并行设置
  11. algorithm: kmeans的实现算法,有:’auto’, ‘full’, ‘elkan’, 其中 ‘full’表示用EM方式实现
  12. 虽然有很多参数,但是都已经给出了默认值。所以我们一般不需要去传入这些参数,参数的。可以根据实际需要来调用。
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(r'D:\实验室项目练习\Tweet').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 = r"D:\实验室项目练习\kmeans\tdidf.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,"类文本的词语tf-idf权重------"  )

        for j in range(len(word)):
            #print( weight[i][j],)
            result.write(str(weight[i][j]) + ' ')
        result.write('\r\n\r\n')



    ########################################################################

    #                               第二步 聚类Kmeans

    print('Start Kmeans:')

    from sklearn.cluster import KMeans
    """调用KMeans算法 进行聚类 ,分类"""
    #clf = KMeans()
    """对数据进行拟合,训练模型"""
    #clf.fit

    clf = KMeans(n_clusters=300,max_iter=600)

    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])

        print(clf.labels_[i - 1])

        i = i + 1

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

    print(clf.inertia_)


这篇文章关于函数介绍的比较详细,贴在这里方便以后查找,之前记得找过一篇介绍函数的但是找不到了。。。。就把这个放这里吧/