zoukankan      html  css  js  c++  java
  • 【机器学习】K-means文本聚类,简单入门版,python

    K-means是一种常用的聚类算法,入门版展示如下,代码传送门:

    # -*- coding: utf-8 -*-
    
    import jieba 
    from sklearn.feature_extraction.text import  TfidfVectorizer
    from sklearn.cluster import KMeans
    from sklearn.externals import joblib
    
    def jieba_tokenize(text):
        return jieba.lcut(text) 
    
    
    tfidf_vectorizer = TfidfVectorizer(tokenizer=jieba_tokenize,lowercase=False)
    
    '''
    tokenizer: 指定分词函数
    lowercase: 在分词之前将所有的文本转换成小写,因为涉及到中文文本处理,
    所以最好是False
    '''
    
    text_list = ["今天天气真好啊啊啊啊", 
    "小明上了清华大学", 
    "我今天拿到了Google的Offer", 
    "清华大学在自然语言处理方面真厉害"]
    
    #需要进行聚类的文本集
    
    tfidf_matrix = tfidf_vectorizer.fit_transform(text_list)
    
    num_clusters = 3
    km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40, 
                        init='k-means++')
    
    '''
    n_clusters: 指定K的值
    max_iter: 对于单次初始值计算的最大迭代次数
    n_init: 重新选择初始值的次数
    init: 制定初始值选择的算法
    n_jobs: 进程个数,为-1的时候是指默认跑满CPU
    注意,这个对于单个初始值的计算始终只会使用单进程计算,
    并行计算只是针对与不同初始值的计算。比如n_init=10,n_jobs=40, 
    服务器上面有20个CPU可以开40个进程,最终只会开10个进程
    '''
    
    #返回各自文本的所被分配到的类索引
    result = km_cluster.fit_predict(tfidf_matrix)
    
    print ("Predicting result: ", result)
    
    '''
    每一次fit都是对数据进行拟合操作,
    所以我们可以直接选择将拟合结果持久化,
    然后预测的时候直接加载,进而节省时间。
    '''
    

    结果图:

    结果解释:

    因为输入的是4个元素:

    text_list = ["今天天气真好啊啊啊啊", 
    "小明上了清华大学", 
    "我今天拿到了Google的Offer", 
    "清华大学在自然语言处理方面真厉害"]

    所以处理后也是出来4个结果与输入分别对应,那么聚类结果是第2句和第4句是一类,其余两句自成一派。

    备注:本文代码系非原创的,因需要做文本聚类,几乎将博客里的关于这部分的代码都尝试了一遍,这份代码是没有报错的,感恩大神。

  • 相关阅读:
    iOS9 HTTP 不能正常使用的解决办法
    IOS UIWebView的一些用法总结
    顺序查找
    循环队列
    队列的链式存储实现
    栈的链式存储实现
    顺序表的实现
    MessageBox函数
    二分法查找
    冒泡排序
  • 原文地址:https://www.cnblogs.com/helenlee01/p/12617475.html
Copyright © 2011-2022 走看看