zoukankan      html  css  js  c++  java
  • python用kemeans对关键词进行分类

    #计算关键词的tfidf
    from sklearn.cluster import KMeans
    import pymysql
    
    def mysql():
        db = pymysql.connect(host='localhost', user='root', passwd='199126', db='kettle', port=3306, charset='utf8')
        cursor = db.cursor()
        sql1 = "SELECT guanjianci,id,jianjie FROM keji3_copy1 "
    
        cursor.execute(sql1)
        alldata = cursor.fetchall()
        corpus = []
        for s in alldata:
            guanjian = s[0]
            id = s[1]
            jianjie=s[2]
    
            corpus.append(jianjie)
        return corpus
    
    def update(i,a):
        db = pymysql.connect(host='localhost', user='root', passwd='199126', db='kettle', port=3306, charset='utf8')
        cursor = db.cursor()
        try:
            sql1 = "UPDATE keji3 SET fenlei ='%s' where id = %s" % (i, a)
    
            cursor.execute(sql1)
            # 提交到数据库执行
            db.commit()
        except:
            print("2")
    
            # 打印结果
        print(i,a)
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    '''
    Author: razrlele
    Email: razrlele@gmail.com
    '''
    import jieba
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.cluster import KMeans
    
    
    def jieba_tokenize(text):
        return jieba.lcut(text)
    
    
    tfidf_vectorizer = TfidfVectorizer(tokenizer=jieba_tokenize, lowercase=False)
    '''
    tokenizer: 指定分词函数
    lowercase: 在分词之前将所有的文本转换成小写,因为涉及到中文文本处理,
    所以最好是False
    '''
    text_list = mysql()
    # 需要进行聚类的文本集
    tfidf_matrix = tfidf_vectorizer.fit_transform(text_list)
    
    num_clusters = 20
    km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40, init='k-means++', n_jobs=-1)
    '''
    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)
    
    a=0
    for i in result:
        a=a+1
        update(i,a)

    对于kemeans的使用,我的理解是

    1)随机选择k个样本作为初始簇类的均值向量;

    2)将每个样本数据集划分离它距离最近的簇;

    3)根据每个样本所属的簇,更新簇类的均值向量;

    4)重复(2)(3)步,当达到设置的迭代次数或簇类的均值向量不再改变时,模型构建完成,输出聚类算法结果。

    K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:

    1、 随机选取k个聚类质心点(cluster centroids)为

    2、 重复下面过程直到收敛 {

     对于每一个样例i,计算其应该属于的类

                   

     对于每一个类j,重新计算该类的质心

                   

    }

    K是我们事先给定的聚类数,代表样例i与k个类中距离最近的那个类,的值是1到k中的一个。

    质心代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离。

    然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。

    来源

  • 相关阅读:
    增强for循环赋值并且向list集合里添加元素,每个元素都一样
    《《《Spring 视频学习笔记
    xml中的<where><if>模糊查询
    《《《layui入门笔记
    《《《Vue element学习笔记
    《《《Spring Boot视频学习笔记
    intellij idea设置打开多个文件显示在多行tab上
    postMan安装完成,打开提示找不到,或者报错 可能原因
    Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
    idea代码注释
  • 原文地址:https://www.cnblogs.com/zlj843767688/p/12555795.html
Copyright © 2011-2022 走看看