LDA(Latent Dirichlet Allocation,隐含狄利克雷分布)模型简单使用

本文介绍了如何使用Python的sklearn库中的LDA(隐含狄利克雷分配)模型对文本进行主题分类,包括数据预处理、模型应用以及结果解释的过程。
摘要由CSDN通过智能技术生成

LDA(Latent Dirichlet Allocation,隐含狄利克雷分布)模型

机器学习高级算法中LDA算法有线性判别分析(Linear Discriminant Analysis,LDA)和隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)模型两个。本文介绍的是隐含狄利克雷分布模型,此模型主要用于文本主题分类。

本文使用sklearn中的LatentDirichletAllocation实现主题分类。

# -*- coding:utf-8 -*-

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation

import numpy as np
import jieba


def cut_doc_words():
    # 数据文档列表
    doc_list = [
        '河南大学创立于1912年,始名河南留学欧美预备学校,首任校长为林伯襄先生,校园选建于河南贡院旧址之上。后历经中州大学、国立开封中山大学 ( 又称国立第五中山大学 )、省立河南大学等阶段 ,1942年升格为国立河南大学 。',
        '1952年院系调整,部分院系或独立建校或并入兄弟高校,校本部更名为河南师范学院。后又经开封师范学院、河南师范大学等阶段,1984年恢复河南大学校名。',
        '2008年10月,学校进入省部共建高校行列。2017年9月,学校入选首批国家“双一流”建设高校。2022年2月,学校再次入选国家“双一流”建设高校。',
        '111年来,河南大学恪守“明德新民,止于至善”的校训,形成“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神,培养70多万名各类人才,为教育振兴、科技创新、文化传承、社会进步和人类文明作出突出贡献。'
    ]

    # 进行分词,并存入list:
    doc_words_list = []
    for doc in doc_list:
        # jieba对文档分词
        doc_words = jieba.cut(doc)
        doc_words_list.append(' '.join(doc_words))

    return doc_words_list


def run_lda_model():
    # 对文本分词
    doc_words_list = cut_doc_words()
    print("词列表:", doc_words_list)

    # CountVectorizer会将文本中的词语转换为词频矩阵
    count_vec = CountVectorizer()

    # fit_transform函数计算各个词语出现的次数
    word_frequency = count_vec.fit_transform(doc_words_list)
    print("词汇表:", count_vec.vocabulary_)
    print("词频矩阵:\n", word_frequency)

    word_list = count_vec.get_feature_names_out()
    print('主题词袋:\n', word_list)

    # LDA主题模型
    lda = LatentDirichletAllocation(
        # 设置主题个数
        n_components=2
    )

    # LDA拟合文档的不同主题的概率分布,二维矩阵
    doc_theme_probability = lda.fit_transform(word_frequency)
    print("文档主题的概率分布:\n", doc_theme_probability)

    # 转化为np类型
    doc_theme_probability = np.array(doc_theme_probability)

    # 将2维概率分布矩阵转化为1维分类矩阵
    doc_theme_classify = np.argmax(doc_theme_probability, axis=1)
    print("每个文档所属类别:", doc_theme_classify)

    # 打印每个主题下词的权重值
    theme_probability_matrix = lda.components_
    print("主题概率矩阵:\n", theme_probability_matrix)

    for theme_probability_matrix_one in theme_probability_matrix:
        word_probability_list = [(word, probability) for word, probability in zip(word_list, theme_probability_matrix_one)]
        print("词概率:", word_probability_list)

        # 根据词的概率对单词排序
        word_probability_list_sort = sorted(word_probability_list, key=lambda x: x[1], reverse=True)
        print("词排序:", word_probability_list_sort)


if __name__ == '__main__':
    run_lda_model()
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值