基于LDA模型的主题分析

94 篇文章 6 订阅

先看下数据:
在这里插入图片描述
在这里插入图片描述

1、建立词典、语料库

from gensim import corpora,models #主题挖掘,提取关键信息

#建立词典,去重
pos_dict=corpora.Dictionary([ [i] for i in word_data_pos.word]) #shape=(n,1)
neg_dict=corpora.Dictionary([ [i] for i in word_data_neg.word])

#建立语料库
pos_corpus=[ pos_dict.doc2bow(j) for j in [ [i] for i in word_data_pos.word] ] #shape=(n,(2,1))
neg_corpus=[ neg_dict.doc2bow(j) for j in [ [i] for i in word_data_neg.word] ]

在这里插入图片描述

2、主题数寻优

#构造主题数寻优函数

def cos(vector1,vector2):
    '''
    函数功能:余玄相似度函数
    值越小越相似
    '''
    dot_product=0.0
    normA=0.0
    normB=0.0
    for a,b in zip(vector1,vector2):
        dot_product +=a*b
        normA +=a**2
        normB +=b**2
    if normA==0.0 or normB==0.0:
        return None
    else:
        return ( dot_product/((normA*normB)**0.5) )

在这里插入图片描述

#主题数寻优
#这个函数可以重复调用,解决其他项目的问题

def LDA_k(x_corpus,x_dict):
    '''
    函数功能:
    '''
    #初始化平均余玄相似度
    mean_similarity=[]
    mean_similarity.append(1)
    
    #循环生成主题并计算主题间相似度
    for i in np.arange(2,11):
        lda=models.LdaModel(x_corpus,num_topics=i,id2word=x_dict) #LDA模型训练
        
        for j in np.arange(i):
            term=lda.show_topics(num_words=50)
        
        #提取各主题词
        top_word=[] #shape=(i,50)
        for k in np.arange(i):
            top_word.append( [''.join(re.findall('"(.*)"',i)) for i in term[k][1].split('+')]) #列出所有词
        
        #构造词频向量
        word=sum(top_word,[]) #列车所有词
        unique_word=set(word) #去重
        
        #构造主题词列表,行表示主题号,列表示各主题词
        mat=[] #shape=(i,len(unique_word))
        for j in np.arange(i):
            top_w=top_word[j]
            mat.append( tuple([ top_w.count(k) for k in unique_word ])) #统计list中元素的频次,返回元组
        
        #两两组合。方法一
        p=list(itertools.permutations(list(np.arange(i)),2)) #返回可迭代对象的所有数学全排列方式。
        y=len(p) # y=i*(i-1)
        top_similarity=[0]
        for w in np.arange(y):
            vector1=mat[p[w][0]]
            vector2=mat[p[w][1]]
            top_similarity.append(cos(vector1,vector2))

#        #两两组合,方法二
#        for x in range(i-1):
#            for y in range(x,i):
            
        #计算平均余玄相似度
        mean_similarity.append(sum(top_similarity)/ y)
    return mean_similarity
#计算主题平均余玄相似度

pos_k=LDA_k(pos_corpus,pos_dict)
neg_k=LDA_k(neg_corpus,neg_dict)

在这里插入图片描述

pd.Series(pos_k,index=range(1,11)).plot()
plt.title('正面评论LDA主题数寻优')
plt.show()

在这里插入图片描述

pd.Series(neg_k,index=range(1,11)).plot()
plt.title('负面评论LDA主题数寻优')
plt.show()

在这里插入图片描述

pos_lda=models.LdaModel(pos_corpus,num_topics=2,id2word=pos_dict)
neg_lda=models.LdaModel(neg_corpus,num_topics=2,id2word=neg_dict)

pos_lda.print_topics(num_topics=10)
neg_lda.print_topics(num_topics=10)

在这里插入图片描述

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
沪深300指数预测分析是根据LDA(Latent Dirichlet Allocation)模型来实现的。LDA模型是一种主题模型,用于从无标签的文本数据中提取主题信息。在沪深300指数预测分析中,我们可以将股票市场的相关文本数据作为输入,利用LDA模型进行主题挖掘和预测。 以下是基于LDA模型的沪深300指数预测分析的示例代码: ```python # 导入所需的库 from sklearn.decomposition import LatentDirichletAllocation import numpy as np # 加载股票市场相关文本数据,转换成词袋模型表示 # 这里用一个假设的文本数据作为示例 documents = ["股票市场的涨跌与经济数据有很大关系", "市场情绪对沪深300指数的影响很大", "政策变化对股票市场的影响需要预测", "投资者情绪是影响股票价格的重要因素"] # 构建词袋模型 from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(documents) # 定义LDA模型 n_topics = 2 lda_model = LatentDirichletAllocation(n_components=n_topics) # 在训练集上拟合LDA模型 lda_model.fit(X) # 使用训练好的LDA模型进行预测 # 这里用一个新的文本数据作为示例 new_document = "最近股票市场的走势怎么样" # 将新文本数据转换成词袋模型表示 new_X = vectorizer.transform([new_document]) # 进行主题预测 predicted_topic = lda_model.transform(new_X) # 输出预测主题的概率分布 print(predicted_topic) ``` 在以上代码中,我们首先导入了所需的库,然后加载了股票市场相关文本数据,并通过sklearn的CountVectorizer构建了词袋模型。接下来,我们定义了LDA模型,并在训练集上拟合LDA模型。最后,使用训练好的LDA模型对新的文本数据进行预测,并输出预测主题的概率分布。 这只是基于LDA模型的沪深300指数预测分析的一个简单示例,实际的分析中可能需要更多的数据预处理和模型调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值