创新实训舆情分析模型-阶段三

2023-10-19 06:50

本文主要是介绍创新实训舆情分析模型-阶段三,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一阶段主要重心在LSTM上,日期是6月21到6月29,最后也是决定用LSTM了,确实适合这个情景。

LSTM

LSTM网上有很多资料了,比如这个写的就还好,可以参考。
https://www.jianshu.com/p/9dc9f41f0b29

第一次尝试

第一次尝试LSTM,写了一个非常简单的小模型,经过测试,遇到了跟深度森林一样的问题,就是数据太少,过拟合。这里是我第一次尝试的代码。

import numpy
import random
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import pandas as pd
import sklearn
import os
from keras.models import Sequential, load_model
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LogisticRegression
from sklearn.neural_network import MLPClassifier
from treeinterpreter import treeinterpreter as tidataframe = pd.read_csv('./dataraw.csv', usecols=[2], engine='python',encoding='utf-8')
dataset = dataframe.values
# 将整型变为float
dataset1 = dataset.astype('float32')scaler = MinMaxScaler(feature_range=(-2, 2))
dataset = scaler.fit_transform(dataset1)def create_dataset(dataset, look_back,sum):
#这里的look_back与timestep相同dataX, dataY = [], []for i in range(len(dataset)-2*look_back):a = dataset[i:(i+look_back)]dataX.append(a)dataY.append(dataset[i + look_back:i+2*look_back])for h in range(sum-len(dataX)):num = range(0, len(dataset))nums = random.sample(num, 2*look_back)nums.sort()dataX.append(dataset[nums[:look_back]])dataY.append(dataset[nums[look_back:]])return numpy.array(dataX),numpy.array(dataY)
#训练数据太少 look_back并不能过大
look_back = 7
datapreX,datapreY = create_dataset(dataset,look_back,5000)
num = int(len(datapreX)*0.8)
trainX,testX,trainY,testY  = sklearn.model_selection.train_test_split(datapreX,datapreY,test_size=0.25,shuffle=True)trainX = numpy.reshape(trainX, (-1,look_back))
testX = numpy.reshape(testX, (-1,look_back))
trainY = numpy.reshape(trainY, (-1,look_back))
testY = numpy.reshape(testY, (-1,look_back))rf = RandomForestRegressor(n_estimators=1000,oob_score=True)
rf.fit(trainX, trainY)
print(rf.score(trainX,trainY))
print(rf.score(testX,testY))
testPredict = rf.predict(numpy.reshape(dataset[-7:], (-1,look_back)))
testPredict = numpy.reshape(testPredict, (-1,1))testPredict = scaler.inverse_transform(testPredict)l = list(dataset1)+list(testPredict)dataframe1 = pd.read_csv('dataraw.csv', usecols=[0])
dfd = dataframe1.values
topic = []
date = dfd[-1][0]
date1 = []
pre = []
pla = []
tes = []
testPredict = list(testPredict)
for jk in range(0,len(testPredict)):tes.append(testPredict[jk][0])#date1.append(date[:-2]+str(int(date[-2:])+jk+1))date1.append( str( jk + 1))#date1.append(localtime)topic.append('trump')pre.append('1')pla.append('1')
data = {'ds':date1,'emotion_val':tes,'topic':topic,'predict':pre,'platform':pla}
df = pd.DataFrame(data)
df.to_csv('Result.csv',index=False)
plt.plot(l)
plt.show()

可以看到,模型非常的简单,这也导致了过拟合问题的产生。他的运行结果如下。
在这里插入图片描述
很明显,右边预测部分是不可用的。

第二次尝试

第二次尝试,我经过搜集资料得知,想要在小数据集里获得好的结果,不出现直线情况,可以加dropout层失活一部分节点,减小timestep,增加LSTM层数来解决。我的第二次代码如下。

import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
import pandas as pd
import os
from keras.models import Sequential, load_model
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_errordataframe = pd.read_csv('./dataraw.csv', usecols=[2], engine='python', skipfooter=3)
dataset = dataframe.values
# 将整型变为float
dataset = dataset.astype('float32')
#归一化 在下一步会讲解
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)train_size = int(len(dataset) * 0.65)
trainlist = dataset[:train_size]
testlist = dataset[train_size:]def create_dataset(dataset, timesteps=36,predict_size=6):#构造数据集datax=[]#构造xdatay=[]#构造yfor each in range(len(dataset)-timesteps - predict_steps):x = dataset[each:each+timesteps,0]y = dataset[each+timesteps:each+timesteps+predict_steps,0]datax.append(x)datay.append(y)return np.array(datax),np.array(datay)
timesteps = 9
predict_steps = 10
trainX,trainY  = create_dataset(trainlist,timesteps,predict_steps)
testX,testY = create_dataset(testlist,timesteps,predict_steps)trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1] ,1 ))# create and fit the LSTM network
model = Sequential()
model.add(LSTM(128,input_shape=(timesteps,1),return_sequences= True))
model.add(Dropout(0.5))
model.add(LSTM(128,return_sequences=True))
model.add(LSTM(64,return_sequences=False))
model.add(Dense(predict_steps))
model.compile(loss="mean_squared_error",optimizer="adam")
model.fit(trainX,trainY, epochs= 400, batch_size=10)
model.save(os.path.join("DATA","Test" + ".h5"))
# make predictionspredict_xlist = []
predict_y = []#添加预测y列表
predict_xlist.extend(dataset[dataset.shape[0]-timesteps:dataset.shape[0],0].tolist())
while len(predict_y) < 30:predictx = np.array(predict_xlist[-timesteps:])#从最新的predict_xlist取出timesteps个数据,预测新的predict_steps个数据(因为每次预测的y会添加到predict_xlist列表中,为了预测将来的值,所以每次构造的x要取这个列表中最后的timesteps个数据词啊性)predictx = np.reshape(predictx,(1,timesteps,1))#变换格式,适应LSTM模型lstm_predict = model.predict(predictx)predict_xlist.extend(lstm_predict[0])#将新预测出来的predict_steps个数据,加入predict_xlist列表,用于下次预测# invertlstm_predict = scaler.inverse_transform(lstm_predict)predict_y.extend(lstm_predict[0])
l = predict_y
y_ture = np.array(dataset[-30:])
train_score = np.sqrt(mean_squared_error(y_ture,predict_y))
print("train score RMSE: %.2f"% train_score)
dataframe1 = pd.read_csv('dataraw.csv', usecols=[0])
dfd = dataframe1.values
topic = []
date = dfd[-1][0]
date1 = []
pre = []
pla = []
tes = []
testPredict = predict_y
for jk in range(0,len(testPredict)):tes.append(testPredict[jk])date1.append( str( jk + 1))topic.append('trump')pre.append('1')pla.append('1')
data = {'ds':date1,'emotion_val':tes,'topic':topic,'predict':pre,'platform':pla}
df = pd.DataFrame(data)
df.to_csv('Result.csv',index=False)
plt.plot(l)
plt.plot(y_ture)
plt.show()

可以看到,LSTM层数变多了,多了几个dropout层,减小了timestep,这几个方法的结合,让本该过拟合的模型焕发生机。能够较真实的预测未来的情况 。运行结果如下。
在这里插入图片描述
在这里插入图片描述
上面的图是结果的可视化展示蓝色是预测结果,黄色是真实数据,下面是数据分析,person系数和均方误差。从数据分析可以得到,预测数据和真实数据已经很相近了。最终,我们决定使用这一版模型作为我们的预测模型。
最后,我们为了把系统整合在一起,就把我的程序做成了一个函数,这样,就可以方便的整合到后端系统中去,实现自动化。让关键词的分析预测越发的简单高效。
通过这次实训,我实现了用深度森林和LSTM对十位数的超小规模数据进行训练获得未来预测结果。超小规模数据带来的最大挑战就是过拟合。数据信息严重不足,模型无法总结出一般性普适化规律,所以只能从数据,模型两个角度入手解决问题。在数据方面,我们可以通过各种手段获取新数据,也可以在元数据基础上使用bootstrap等方法创造新的数据集,通过扩大数据集的方式让模型学到更普适信信。从模型角度,对于LSTM,我们要增加层深,加dropout层,减小timestap,从而让模型更不易于过拟合,学到更深入一般性规律。

这篇关于创新实训舆情分析模型-阶段三的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238076

相关文章

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

8阶段项目:五子棋(附带源码)

8阶段项目:五子棋 8.1-技术实现 1.静态变量 静态变量只能定义在类中,不能定义在方法中。静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问。主要解决在静态方法中不能访问非静态的变量。 2.静态方法 静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用这些代码的时候,就把这个箱子放在指定的位置即可。   /*** 静态变量和静态方法*/public cl

风格控制水平创新高!南理工InstantX小红书发布CSGO:简单高效的端到端风格迁移框架

论文链接:https://arxiv.org/pdf/2408.16766 项目链接:https://csgo-gen.github.io/ 亮点直击 构建了一个专门用于风格迁移的数据集设计了一个简单但有效的端到端训练的风格迁移框架CSGO框架,以验证这个大规模数据集在风格迁移中的有益效果。引入了内容对齐评分(Content Alignment Score,简称CAS)来评估风格迁移

研一实训总结

说长不长说短不短的一个月,从最开始的激动到期间,要中期要兼顾找实习准备笔试面试的焦虑,再到最后一周的加班加点和总结,收获和感触还是蛮多的。 首先,这一个月让我更加全面的认知了完成一个从无到有项目的过程,激发了我对自己工程师职业生涯的向往和对自己有了更广的除了编码以外的要求。 我一直是一个结果导向和追求效率的人,所以在团队合作过程中我们也经历了最开始的不知所措,到争执,再到主动配合和贡献,这个过

2024年AI芯片峰会——AI芯片架构创新专场

概述 2024年9月7日于北京举行。 官方链接: 大会官网 正文 对存内计算的思考——戴瑾 面向边缘端大语言模型的RPP架构芯片与落地实践——李原 LLM推理端的特征 边缘计算的特征 来源《联想集团边缘计算白皮书》出炉 Llama2计算过程举例 RPP架构 RPP软件栈 RPP的PPA AI 芯片架构创新开启打算里第二增长曲

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

【笔记-流程记录】从零开始做一个人形怪兽(建模阶段)

大型 1.第一步还是找素模,打开材质球,吸管点一下,就会出现素模的贴图,一共有四个 比如,点进去第一个,再点漫反射,再点psd就会得到相应的贴图 2.然后我们依然是面片然后插入参考图 如果透视窗口啥都没有,按g也不显示线框。那按下z(居中视图),然后再试一下按G显示栅格。 3.导入素模,重置变换 注释:重置变换是一个非常有用的功能,主要用于将对象的变换属性(位置、旋

[Android] [SnapdragonCamera] 单摄(横屏)阶段总结

在研高通平台的单摄项目中遇到了很多适配问题,做一下初步的总结,为今后遇到相似的问题,提供参考方案。          1. 横屏设置相机预览显示不正常               1.1问题现象                       1.2分析与解决              骁龙相机默认的预览方向是“portrait”。在横屏设备上显示的时候就会出现上面效果。实际

【ShuQiHere】从残差思想到 ResNet:深度学习的突破性创新

【ShuQiHere】引言 在深度学习的迅速发展中,卷积神经网络(CNN)凭借其在计算机视觉领域的出色表现,已经成为一种主流的神经网络架构。然而,随着网络层数的增加,研究人员逐渐发现了一个关键问题:梯度消失 😖 和 梯度爆炸 💥,这使得训练非常深的网络变得极其困难。为了解决这一问题,残差思想 💡 被提出,并在 2015 年由 Kaiming He 等人正式引入 ResNet 中。这一创新不

联众优车持续加大汽车金融服务投入与创新,赋能汽车消费新生态

近年来,中国汽车消费市场呈现出蓬勃发展的态势,而汽车金融服务作为降低购车门槛、优化购车体验的重要手段,正日益受到市场的青睐。《2023中国汽车消费趋势调查报告》显示,相较于前一年,今年选择汽车金融服务的市场消费者占比显著提升,其中潜在购车者占比高达67.8%,再购用户及现有用户占比也分别达到59.9%和49.4%。在这一背景下,作为汽车综合服务市场的领军企业,联众优车持续加大在汽车金融服务领域的投