k-means聚类对评价内容进行归类

4 篇文章 0 订阅
2 篇文章 0 订阅

应用场景

有很多评价内容,对评价内容进行聚类,得到每个类别的关键词
可以用python的scikit-learn或者mahout,得到聚类结果,都只能作为参考,最终结果仍然用人工定义
聚类将已有的样本分类,构建tfidf词频矩阵,利用朴素贝叶斯分类器可以预测新的评价内容归属于哪一类,参考文章python 中文文本分类

python方案

1.准备足够多的的评论样本,最好1万+
2.对每个评价内容用jieba分词,这一步最重要,自建特定行业词库分词效果最好
3.scikit-learn的方法得到所有样本的tf-idf矩阵
4.拟定一个聚类簇K的范围,比如10-20循环执行,k-means聚类,Calinski-Harabasz Index评估的聚类分数,取得分最高的那一个作为聚类K,输出K类每个类下词频最高的前30个单词,人工对每个分类命名
5.优化的话:降维
参考主要代码:

import jieba.posseg as pseg
# 中文分词
def jieba_cut(comment, stop_words):
    textContent = (str(comment)).replace("\r\n", "").strip()  # 删除多余空行与空格
    word_list = []  # 建立空列表用于存储分词结果
    seg_list = pseg.cut(textContent)  # 精确模式分词[默认模式]
    for word in seg_list:
        if word.flag in ['ns', 'n', 'vn', 'v', 'nr'] and word.word not in stop_words:  # 选择属性
            word_list.append(word.word)  # 分词追加到列表
    return word_list

from sklearn.feature_extraction.text import TfidfVectorizer  # 基于TF-IDF的词频转向量库
from sklearn.cluster import KMeans
from sklearn import metrics
vectorizer = TfidfVectorizer(stop_words=stop_words,  use_idf=True)  # 创建词向量模型
X = vectorizer.fit_transform(comments)  # 将评论关键字列表转换为词向量空间模型
model_kmeans = KMeans(n_clusters=n)  # 创建K-Means聚类模型对象
model_kmeans.fit(X)  # 训练模型
metrics.calinski_harabaz_score(X, model_kmeans)   #聚类得分评估,越大越好

java的mahout方案

参考文章Mahout使用K-Means进行中文文本聚类
mahout的好处就是可以利用hadoop分布式计算

文本分类经典算法

先得到tfidf稀疏矩阵,然后使用朴素贝叶斯进行分类预测
参考文章:机器学习之路:python 文本特征提取 CountVectorizer, TfidfVectorizer
注意点:
1.中文用jieba分词,词库尽量完善一点
2.停用词需要加载中文的停用词, 参考github, 将哈工大停用词表,哈工大停用词表,四川大学机器智能实验室停用词库这三个词库合并为一个停用词表
3.TfidfVectorizer第一步先不要指定vocabulary, 先得到一个默认字典以后进行人工过滤提高特征词汇
4.TfidfVectorizer默认只匹配2个及其以上的的词语,需要通过修改token_pattern来保留单字,在中文中很多单字其实是有意义的,单字我是手动添加到vocabulary中
TfidfVectorizer(stop_words=my_stop_words,token_pattern=r"(?u)\b\w+\b", max_df=0.5, vocabulary=vocabulary)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值