版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章
深度学习与数据分析
学习目标
熟悉不同类型的神经网络模型的特点与区别掌握神经网络模型搭建原理并能将其应用于金融市场分析中
本章导读
深度学习是机器学习的一个分支,其主要采用的模型是神经网络模型,因此,本章节将主要介绍有关人工神经网络和深度学习的基本概念、相关模型以及优化策略。人工神经网络(artificialneuralnetworks,ANN),简称神经网络(neuralnetwork,NN),是一种模拟人脑神经元网络处理信息的数学模型。从机器学习的角度来看,神经网络模型本质上是由具有非线性激活函数的神经元组成的模型。通过大量神经元之间的连接,神经网络成为一种高度非线性的模型,神经元之间的连接权重就是需要学习的参数。11.1神经元11.2BP神经网络11.3卷积神经网络11.4循环神经网络11.5深度学习模型优化策略11.6
专题11基于深度学习的上市公司财务风险预警研究目录CONTENTS神经元11.1
11.1神经元一个典型的神经元学习训练模型可抽象为如下过程
11.2BP神经网络1.前馈神经网络
前馈神经网络至少有三层,第一层为输入层,最后一层为输出层,其他中间层为隐藏层。
11.2BP神经网络
11.2BP神经网络通常可由梯度下降法求解上述优化问题。即首先初始化参数,然后根据式(11.4)和式(11.5)迭代更新,逐渐缩小误差:其中α为学习率,决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。
11.2BP神经网络2.BP算法
11.2BP神经网络
11.2BP神经网络图11-3BP神经网络预测效果例11.1
BP神经网络应用实例以沪深300股指为例,建立BP神经网络模型。预测步长设为15天,即用前15天的数据通过滑动窗口不断预测下一天的收盘价及涨跌情况。特征变量包括开盘价、收盘价、最高价、最低价、交易量和交易额。为消除异常值和量纲影响,对数据进行归一化处理。在Python中可利用tensorflow库调用KerasAPI构建BP神经网络。模型预测效果如图11-3所示,可以看到股票涨跌在训练集与测试集上的误差,模型在测试集上的MAE、MSE较训练集高,MAPE较训练集低,测试集的整体预测准确率为67%,模型预测效果较好。
11.2BP神经网络Python代码演示#读取数据df1=pd.read_excel(r'E//jrj1/Chapter10/hs300.xlsx',0)#df1=df1.iloc[3600:-10,1:]df1=df1.iloc[:,1:]df1.tail()##进行数据归一化fromsklearnimportpreprocessingmin_max_scaler=preprocessing.MinMaxScaler()df0=min_max_scaler.fit_transform(df1)df=pd.DataFrame(df0,columns=df1.columns)#构造训练集测试集y=pd.DataFrame(y.values,columns=['goal'])x=Xcut=10#取最后cut=10天为测试集X_train,X_test=x.iloc[:-cut],x.iloc[-cut:]y_train,y_test=y.iloc[:-cut],y.iloc[-cut:]X_train,X_test,y_train,y_test=X_train.values,X_test.values,y_train.values,y_test.valuesX=df.drop('close',axis=1)y=df['close']
11.2BP神经网络#建立BP模型训练:fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,Activationfromtensorflow.keras.optimizersimportAdammodel=Sequential()#层次模型model.add(Dense(16,input_dim=5))#输入层model.add(Activation('relu'))#添加激活函数model.add(Dense(4))#中间层model.add(Activation('sigmoid'))#添加激活函数model.add(Dense(1))#输出层pile(loss='mean_squared_error',optimizer='Adam')#编译模型model.fit(X_train,y_train,epochs=50,batch_size=256) #模型拟合:#在训练集上的拟合结果y_train_predict=model.predict(X_train)y_train_predict=y_train_predict[:,0]y_train=y_train#在测试集上的拟合结果y_test_predict=model.predict(X_test)y_test_predict=y_test_predict[:,0]fromsklearn.metricsimportmean_absolute_errorfromsklearn.metricsimportmean_squared_errorimportmathdefmape(y_true,y_pred): returnnp.mean(np.abs((y_pred-y_true)/y_true))*100print('训练集上的MAE/MSE/MAPE')print(mean_absolute_error(y_train_predict,y_train))print(mean_squared_error(y_train_predict,y_train))print(mape(y_train_predict,y_train))print('测试集上的MAE/MSE/MAPE')print(mean_absolute_error(y_test_predict,y_test))print(mean_squared_error(y_test_predict,y_test))print(mape(y_test_predict,y_test))#预测涨跌y_var_test=y_test[1:]-y_test[:len(y_test)-1]y_var_predict=y_test_predict[1:]-y_test_predict[:len(y_test_predict)-1]txt=np.zeros(len(y_var_test))foriinrange(len(y_var_test-1)): txt[i]=np.sign(y_var_test[i])==np.sign(y_var_predict[i])result=sum(txt)/len(txt)print('预测涨跌正确:',result)
11.3卷积神经网络卷积神经网络一般由卷积层、池化层和全连通层组成,如图11-4所示图11-4
CNN网络流程图
11.3卷积神经网络
卷积神经网络中卷积层(Convolutionallayer)由若干卷积核(即可学习的权重向量)组成,每个卷积单元的参数都经由反向传播算法优化得到。
卷积层的特点在于局部连接性与权值共享。如图11-5所示,卷积层中的每一个神经元都只和前一层中某个局部窗口内的神经元相连,构成一个局部连接网络,可以大幅减少训练的参数。图11-5全连通神经网络与卷积神经网络对比
11.3卷积神经网络2.池化层
池化层(PoolingLayer),也叫汇聚层、子采样层(SubsamplingLayer),其作用主要就是压缩数据和参数的量,或者说是保留最显著的特征,通过特征映射去除其中不重要的样本,进一步减少参数数量。
由于卷积层可以减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少,如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以在卷积层之后加上一个池化层,从而降低特征维数,避免过拟合。目前,池化的方法有很多,常用的池化方法有最大池化和平均池化两种。
11.3卷积神经网络3.全连通层
全连通层(fullyconnectedlayer,FC),即前面一层的每个神经元都与后面一层的相连接,在整个卷积神经网络中起到“分类器”的作用。卷积层与池化层的作用在于提取分布式特征,而全连通层则将学到的“分布式特征表示”映射到样本标记空间,对多次卷积后高度抽象化的特征进行整合。在CNN中,它可以直接把图像降维成一堆序列。全连通层主要通过总层数、单个全连通层的神经元数和激活函数三个参数影响模型。
11.3卷积神经网络例11.2CNN模型实例
卷积神经网络(CNN)模型被广泛应用于图片识别技术,本例将采用内置手写数字集作为示例数据,通过keras模块搭建CNN模型来进行手写数字体识别。内置数据集已划分出训练集与测试集,训练集中的输入信息x为手写数字的图片,输出信息y为图片的标签。如图11-6所示,训练集的第一张图片为数字“5”的手写体,其对应的y标签也是类别数字“5”。图11-6手写数据集示例
11.3卷积神经网络Python代码演示importnumpyasnp;importpandasaspd;importmatplotlib.pyplotaspltfromkeras.datasetsimportmnistfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Activation,Flattenfromkeras.optimizersimportadam_v2fromkeras.layers.normalization.batch_normalization_v1importBatchNormalizationfromkeras.utilsimportnp_utilsfromkeras.layersimportConv2D,MaxPooling2D,ZeroPadding2D,GlobalAveragePooling2Dfromkeras.layers.advanced_activationsimportLeakyReLUfromkeras.preprocessing.imageimportImageDataGenerator#图像基本变换(X_train,y_train),(X_test,y_test)=mnist.load_data()#划分训练集和测试集plt.imshow(X_train[0],cmap='gray')plt.title('Class'+str(y_train[0]))#尺寸转换X_train=X_train.reshape(X_train.shape[0],28,28,1)#尺寸变换X_test=X_test.reshape(X_test.shape[0],28,28,1)X_train=X_train.astype('float32')#类型转换X_test=X_test.astype('float32')X_train/=255;X_test/=255;X_train.shape;number_of_classes=10Y_train=np_utils.to_categorical(y_train,number_of_classes)#类别变换Y_test=np_utils.to_categorical(y_test,number_of_classes)
11.3卷积神经网络model.summary()#模型汇总pile(loss='categorical_crossentropy',optimizer=adam_v2.Adam(),metrics=['accuracy'])gen=ImageDataGenerator(rotation_range=8,width_shift_range=0.08,shear_range=0.3,height_shift_range=0.08,zoom_range=0.08)#图像变换test_gen=ImageDataGenerator()#图像处理train_generator=gen.flow(X_train,Y_train,batch_size=64)test_generator=test_gen.flow(X_test,Y_test,batch_size=64)#模型训练model.fit_generator(train_generator,steps_per_epoch=60000//64,epochs=5,validation_data=test_generator,validation_steps=10000//64)score=model.evaluate(X_test,Y_test)#模型评估print('Testaccuracy:',score[1])#准确率得分predictions=model.predict(X_test)#模型预测classes=np.argmax(predictions,axis=1)predictions=list(predictions)actuals=list(y_test)#输出预测值与实际值sub=pd.DataFrame({'Actual':actuals,'Predictions':predictions})sub.to_csv('./output_cnn.csv',index=False)
11.4循环神经网络1.RNN单隐藏层的简单循环网络在时刻t的更新公式为h(t)=f(Whh(t-1)+Wxx(t)+bh)(11.9)其中,Wh为状态-状态权重矩阵,Wx为状态-输入权重矩阵,bh为偏置向量,f(·)为激活函数。将最终时刻输出的隐藏层状态h(T)看作整个序列的最终表示,输入到分类器g(·)进行分类,即y(t)=g(h(T))(11.10)
11.4循环神经网络2.LSTM
11.4循环神经网络三个门it、ft、ot的取值均在0到1之间,表示以一定的比例允许信息通过。计算公式分别如下:it=σ(Wxi·xt+Whi·ht-1+bi)ft=σ(Wxf·xt+Whf·ht-1+bf)ot=σ(Wxo·xt+Who·ht-1+bo)其中σ(·)为Logistic函数,其输出区间为(0,1),W为对应的权重矩阵,bi为偏置矩阵。
11.4循环神经网络图9-15LSTM原理图
11.4循环神经网络3.GRU模型
11.4循环神经网络图9-16GRU原理图
深度学习模型优化策略11.511.5深度学习模型优化策略在应用深度学习模型时通常面临网络优化与网络正则化两大难题。一方面,神经网络模型的优化目标是能找到一个全局最优解或较好的局部最优解;另一方面模型优化达到最优解时可能带来过拟合问题。11.5深度学习模型优化策略网络优化:改善神经网络优化的目标是找到更好的局部最小值和提高优化效率。目前比较有效的优化思路有如下几种:使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性。通过参数初始化和数据预处理来提高优化效率。通过逐层归一化来提高优化效率。使用更好的超参数优化方法。11.5深度学习模型优化策略网络正则化,即通过限制神经网络模型复杂度,避免模型过拟合并提高模型泛化能力。在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如可通过约束参数的L1和L2范数来减小模型在训练数据集上的过拟合现象。在训练深度学习模型时,除L1和L2正则化外还会使用其他正则化方法:数据增强。主要应用于图像数据,通过算法对图像进行旋转、翻转、缩放、平移等转变,或引入噪声等方法来增加数据多样性。提前停止。其基本思想是设置一个和训练集独立的样本集合,即验证集(ValidationSet),并用验证集上的错误来代替期望错误,当验证集上的错误率不再下降或满足停止条件时,停止迭代。丢弃法(Dropout)。在训练时,随机丢弃一部分神经元及其对应的连接边,以避免过拟合。专题11基于深度学习的上市公司财务风险预警研究
11.6基于深度学习的上市公司财务风险预警研究我国“十四五”规划将“健全金融风险预防、预警、处置、问责制度体系”列为实施金融安全战略的重要举措之一,2021年中央经济工作会议同样指出要“正确认识和把握防范化解重大风险”,并“完善金融风险处置机制”。近年来黑天鹅事件时有发生,全球系统性风险隐患不断凸显,进一步加剧企业的财务风险。在此背景下,结合系统性风险指标与前沿的深度学习算法,优化我国企业财务危机的预测模型,提升企业财务风险预警效力,对优化投资决策、强化企业风险管理、健全风险监测预警机制、完善金融风险处置机制均有重要显示意义。
11.6基于深度学习的上市公司财务风险预警研究传统的财务风险预警方法通常基于统计分析和规则模型,这些方法往往依赖于研究者对财务指标之间关系的猜测和经验判断。然而,随着大数据技术的迅速发展和深度学习在各个领域的成功应用,越来越多的研究者和从业者开始关注和探索利用深度学习技术改进财务风险预警的方法和模型。深度学习是一种以人工神经网络为基础的机器学习方法,通过多层次的抽象和表示学习,能够从大规模、非结构化、高维度的数据中提取有用的特征和模式。这使得深度学习在图像识别、自然语言处理等领域取得了显著的成就。基于此,本专题将结合深度学习构建上市公司财务风险预警模型,对我国上市公司的财务风险水平进行监测与评估。
11.6基于深度学习的上市公司财务风险预警研究1.数据来源及预处理(1)数据来源及样本选取本专题选取2020年到2022年A股上市公司为初始样本,剔除金融行业公司后,“财务状况异常”而首次被ST的上市公司总计115家。为正确预警公司财务困境,要通过比较ST公司与正常公司相关指标的异同,并且利用模型将两类公司准确识别并且区分出来。本专题将以ST公司:非ST公司=1:2的比例选取正常公司作为配对样本进行研究,配对时采用资产规模相当(总资产上下相差不超过20%)、所属行业相同、会计年度一致的原则。最终样本包含了115家ST公司和与之配对的230家正常公司,即总体的样本公司数量为345家,三年样本数据共1035个数据行。本专题中使用的公司财务数据来源于Wind数据库。
11.6基于深度学习的上市公司财务风险预警研究(2)
变量构建本专题将采用公司是否被实施ST作为公司财务风险的衡量标准。根据证监会规定,若上市公司连续两个会计年度净利润为负或者最近一个年度的每股净资产低于股票面值,公司将被执行ST处理。基于此,模型中的输入数据和预测变量数据间隔设为两年,即使用T年的财务数据和财报文本数据,来预测T+2年公司是否会被实行ST。参考国内学者的研究成果,从反映上市公司盈利能力、成长能力、营运能力、偿债能力、现金流量五个方面选取了35个财务指标作为特征变量。2.神经网络模型设计(1)BPNN模型:基于反向传播算法来训练模型,并采用梯度下降法来调整网络中的参数,以最小化损失函数。(2)CNN模型:卷积层-池化层-卷积层-池化层-Flatten层-Dense层--Dropout层-全连接层-全连接层,第一层卷积层的神经元个数为256,卷积核大小为3,第二层卷积层的神经元个数为128,卷积核大小为3。池化层使用MaxPooling1D处理。最后一层Dense层的神经元个数为1。(3)RNN模型:RNN层-Dropout层-RNN层-Dropout层-Flatten层-Dense层,其中第一层RNN神经元个数设置为128个,第二层RNN神经元个数设置为100个,第一层Dropout层丢弃0.2。第二层Dropout层丢弃0.3,最后搭建Flatten层和全连接层。
11.6基于深度学习的上市公司财务风险预警研究2.神经网络模型设计(4)GRU模型:GRU层-Dropout层-Dense层--Dropout层-Dense层-Dropout层-Dense层,其中第一层GRU神经元个数设置为256个,第一层Dropout层丢弃0.2,第二层Dropout层丢弃0.2,最后添加Dense层。(5)LSTM模型:LSTM层-Dense层-Dropout层-LSTM层-Dense层-Dropout层-Dense层-Dense层,其中第一层神经元个数设置128个,添加全连接层,激活函数选择relu,第一层Dropout层丢弃0.2,第二层Dropout层丢弃0.2,最后使用一个具有1个神经元和使用sigmoid激活函数的全连接层,用于进行二分类任务。所有模型使用develop_pile编译模型,其中loss参数设置为binary_crossentropy表示二元交叉熵损失函数,optimizer参数设置为adam表示使用Adam优化器进行参数更新,metrics参数设置为accuracy表示评估指标为准确率。
11.6基于深度学习的上市公司财务风险预警研究3.模型比较与结果分析本专题研究基于Python3.0框架,使用Tensorflow搭建神经网络模型。
首先以7:3的比例将数据集划分为训练集与测试集,基于训练集训练模型,然后基于搭建设计好的深度学习模型,对测试集进行预测。
预测窗口长度设为7,即用前7天的股票交易数据预测未来一天的股票收盘价。
为考察不同模型对财务风险的预测效果,选择Accuracy、precision、recall、f1-score、roc值作为评价指标,对比不同模型在训练集与测试集上的预测效果。
11.6基于深度学习的上市公司财务风险预警研究如表11-1所示,在本专题中,CNN模型在测试集上准确率最高,达到了81%,对财务危机的预警较为准确;其次是GRU模型,准确率为79%,且AUC值较高,达到了86%,预警也较为准确。除LSTM模型外,基于神经网络的深度学习模型预测准确率均在75%以上,而逻辑回归模型准确率最低,预测准确率为73%,不如多层迭代训练的深度学习模型。
11.6基于深度学习的上市公司财务风险预警研究4.预测结果可视化前述分析中发现CNN、GRU这两个模型对财务预警的预测效果较好,鉴于篇幅限制,该部分将把其中部分模型在训练集与测试集上的模型准确度与模型损失可视化,直观比较不同模拟的拟合效果。
11.6基于深度学习的上市公司财务风险预警研究(1)CNN训练结果可视化分析根据图11-10,CNN模型在训练集上整体表现优秀,模型在训练集与测试集上的准确率情况重合较高,趋势一致,模型训练集值与测试集上的损失率情况也趋势一致重合。
11.6基于深度学习的上市公司财务风险预警研究(2)GRU训练结果可视化分析如图11-11所示,GRU模型在训练集上整体表现优秀,模型训练集值与测试集上的准确率情况重合较高,趋势一致,模型训练集值与测试集上的损失率情况也趋势一致重合。
11.6基于深度学习的上市公司财务风险预警研究(3)预测结果可视化分析由图11-12可知,CNN模型的AUC值接近0.866,预测效果最好,GRU模型次之,逻辑回归的效果最差。
11.6基于深度学习的上市公司财务风险预警研究(3)预测结果可视化分析由图11-12可知,CNN模型的AUC值接近0.866,预测效果最好,GRU模型次之,逻辑回归的效果最差。
11.6基于深度学习的上市公司财务风险预警研究(3)预测结果可视化分析由图11-12可知,CNN模型的AUC值接近0.866,预测效果最好,GRU模型次之,逻辑回归的效果最差。
11.6基于深度学习的上市公司财务风险预警研究5.研究结论本专题基于RNN、LSTM、GRU、CNN、BPNN五个神经网络模型与逻辑回归模型对上市公司财务危机进行预测研究,并考察不同模型对上市公司财务危机的预测效力。主要结论如下:考察的五个深度神经网络模型中,CNN模型对上市公司财务危机的预测效果最好,在测试集上拟合优度最大且预测误差最小;GRU模型次之,在测试集上能够较好地拟合上证指数的变化趋势;LSTM模型的表现最差。而机器学习中的经典分类模型逻辑回归效果不如深度学习模型。因此,可以选择合适的神经网络模型应用于风险预警相关研究。
11.6基于深度学习的上市公司财务风险预警研究习题1.LSTM与GRU模型如何解决RNN模型的梯度消失和爆炸问题?二者的区别与联系是什么?2.试利用2021年1月1日至2022年5月31日平安银行的日交易数据建立BP神经网络、RNN与LSTM模型,并比较三个模型对股价的预测效果。Theending第十二章
文本数据分析
学习目标
了解文本数据挖掘流程;掌握文本数据采集、文本切分和文本特征词选择的常用方法;掌握文本情感分析方法并能将该方法运用于金融市场分析。
本章导读
金融大数据为金融业态创新注入了新的活力,被银行、证券、保险等多个行业广泛应用于交易欺诈识别、精准营销、信贷风险评估、智能投顾、风险定价等具体业务中。未来金融业的核心竞争力将很大程度上依赖于从数据资产向市场竞争力转化的速度与能力,而这种速度和能力,取决于数据分析、挖掘和应用水平。上一章将详细介绍金融大数据的特征以及大数据处理流程,且重点研究几类常用的数据挖掘方法,本章重点介绍文本数据挖掘相关技术及其在金融风险计量中的应用。通过本章内容学习,学生应掌握文本数据分析的基本知识与技术,进一步提升运用大数据技术分析和解决金融实际问题的能力。通过金融文本挖掘技术的学习,了解中国政府保持金融稳定的决心和信心。12.1文本获取12.2文本预处理12.3文本表示12.4文本特征选择12.5模式挖掘12.6专题12金融网络舆情指数构建与应用目录CONTENTS文本获取12.112.1文本数据挖掘概述文本数据挖掘流程可概括为如下七个步骤:(1)文本获取;(2)文本预处理;(3)文本表示;(4)文本特征选择;(5)模式挖掘;(6)结果评价;(7)模式输出与应用。12.1文本获取网络爬虫的本质即模拟浏览器向网站服务器发送请求,然后从服务器返回的相应数据中筛选目标数据。Python是最为常用的爬虫程序语言之一,利用Python爬虫获取文本数据的基本工作流程包含四个步骤:发起HTTP请求;获取HTTP响应;解析内容;保存数据。12.1文本获取例12.1Python简单爬虫实例
运用Python爬取2023年政府工作报告全文。在爬取数据前应先观察数据所在的网站结构。进入2023年政府工作报告网页,在浏览器中按F12键打开开发者模式(有些电脑需同时按下Fn与F12键),查看网页的“元素”菜单,如图12-2所示。可以看到,想要爬取政府工作报告正文内容,只需将其从HTML文档中提取出来即可。最终采集的政府工作报告文本输出结果如图12-3所示。图12-22023年政府工作报告网页HTML文档图12-3采集的政府工作报告文本数据12.1文本获取例12.1Python简单爬虫实例Python代码演示importrequestsfrombs4importBeautifulSoup#导入BeautifulSoup4importosos.chdir(r'E:/jrj1/Chapter12/')#修改工作目录head={'Host':'','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/99.0.4844.74Safari/537.36Edg/99.0.1150.55'}url='/zhuanti/2023lhzfgzbg/index.htm'#1发起HTTP请求r=requests.get(url,headers=head);print(r)#2获取HTTP响应html=r.content.decode('utf-8')#设置编码方式为utf-8以正确显示中文;print(html)#3解析内容soup=BeautifulSoup(html,"html.parser")#HTML文件解析content=soup.find("div",class_="zhj-bbqw-cont").text#筛选目标print(content)#4储存文件file=open('政府工作报告.txt','w',encoding="utf-8")file.write(content)file.close()12.2文本预处理分词分词,也称词条化(Tokenization),即将文档切分为词汇的单位。英语、法语、西班牙语等拉丁文语系的语言最小单位均是独立的词语,例如“Iamastudent”,词与词可通过空格符切分。而中文文本中,词与词之间没有固定的间隔符,因此需要分词处理。当前主要的分词技术可划分为三个流派:基于词典的分词技术(也称机械分词方法、基于理解的分词技术、基于统计的分词技术。随着大规模语料库的建立以及统计机器学习方法的研究和发展,基于统计的中文分词方法逐渐成为主流。Python的中文分词工具有很多,较为流行的有jieba(结巴分词)、THULAC(清华大学自然语言处理与社会人文计算实验室)、pkuseg(北京大学语言计算与机器学习研究组)、SnowNLP等。12.2文本预处理2.停用词过滤在汉语中,有一类没有多少实际意义的词,例如“啊”“阿”“的”“以及”等词,被称为停用词。停用词对理解文本没有太大作用,因此,在进行自然语言处理时一般将停用词过滤掉。停用词过滤一方面可以对文本数据降维,另一方面也可提高文本的信息含量。过滤停用词可通过建立停用词表来实现,如果词汇位于停用词表中,则将其删除。常用的停用词表有哈工大停用词词库、四川大学机器学习智能实验室停用词库、百度停用词表等。12.2文本预处理例12.2对《中国金融稳定报告(2022)》(节选)文本进行预处理本例选取《中国金融稳定报告(2022)》(节选)文本进行预处理。首先利用jieba工具包进行分词,然后利用停用词表stopword.txt对停用词进行过滤。预处理后结果如图12-4所示。可以看到,返回的result对象中为过滤掉停用词后的词汇组合。图12-4《中国金融稳定报告(2022)》(节选)文本预处理结果12.2文本预处理例12.2对《中国金融稳定报告(2022)》(节选)文本进行预处理Python代码演示importjieba#使用jieba分词fileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()words=jieba.lcut(fileContent)#分词后返回一个列表stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#加载停用词表result=""forwinwords:ifwnotinstopwords:#停用词过滤
ifwnotin'\n\t\r\f':#去除特殊符号
result+=w+""print(result)12.3文本表示
图12-5向量空间模型12.3文本表示例12.3简单向量空间模型的Python实现比较两段文本d1“我喜欢投资,不喜欢消费。”与d2“我不喜欢投资,也不喜欢消费。”的相似性。并在基于这两段文本的向量空间模型基础上,比较新句子d3“他讨厌投资,但喜欢消费。”与已有文本的相似性。在Python中可利用gensim库构建向量空间模型,并利用gensim.similarities模块计算文本的余弦相似度。最后可得文本d1与d2的相似度为92.45%,即两段文本高度相似。新文本d3与d1文本的余弦相似度为83.33%,与d2文本的相似度为69.34%。由于向量空间模型无法处理新词,新文本d3与已有文本d1和d2之间的相似度大幅降低。12.3文本表示importjiebafromgensimimportcorpora,modelsfromgensim.similaritiesimportMatrixSimilarityd1="我喜欢投资,不喜欢消费。"#1.读取文档d2=我不喜欢投资,也不喜欢消费。"defstopword_filter(words):#2.分词result=[]forwinwords:ifwnotin',
。':result.append(w)returnresultw1=jieba.lcut(d1);w2=jieba.lcut(d2)w1=stopword_filter(w1)w2=stopword_filter(w2)texts=[w1,w2]#3.生成字典和向量语料dictionary=corpora.Dictionary(texts)#生成字典corpus=[dictionary.doc2bow(text)fortextintextstfidf=models.TfidfModel(corpus)#利用TF-IDF方法vector=tfidf[corpus[1]]#文本d2表达。#4.相似性比较featurenums=len(dictionary.token2id)index=MatrixSimilarity(corpus,num_features=featurenums)sim12=index[corpus[1]]#文本d2与文本d1和自身的余弦相似度。print('文本d2与文本d1余弦相似度为:')print(sim12[0])#5.比较新文本d3='他讨厌投资,但喜欢消费。’w3=stopword_filter(jieba.lcut(d3))new3=dictionary.doc2bow(w3)sim=index[new3]print('文本d3与文本d1和文本d2的余弦相似度分别为:')print(sim) 12.3文本表示2.主题模型主题模型(TopicModel)是一种概率生成模型,旨在挖掘文本中隐含的主题或概念。主题可以定义为文档集中具有相同词境的词的集合通过捕获文本中的主题分布,主题模型可以部分地解决一词多义和一义多词的问题。同时,主题提供了一种高维文本数据维数的约减方式,将传统向量空间模型中的高维稀疏向量转化为低维稠密向量,以缓解维数灾难问题。代表性的主题模型有概率潜在语义分析(Probabilisticlatentsemanticanalysis,PLSA)和潜在狄利克雷分布(LatentDirichletallocation,LDA)。12.3文本表示2.主题模型(1)PLSA12.3文本表示2.主题模型(1)PLSA12.3文本表示例12.4LDA简单模型的Python实现
在本例中,仍利用《中国金融稳定报告(2022)》(节选)数据作为文档集,抽取文档集的主题。最后输出结果如图12-6所示,输出结果中包含10个主题,每个主题囊括了该类别下最相关的5个词语及该词汇在主题中出现的概率。图12-6LDA主题模型提取结果12.3文本表示Python代码演示fromgensim.modelsimportLdaModel,TfidfModel;fromgensim.corporaimportDictionaryimportpandasaspd;importjieba;importrefileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()word=fileContent.split();word=pd.Series(word)jieba_output=(word.astype(str)).apply(jieba.lcut)stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#建立停用词表df1=jieba_output.apply(lambdax:[iforiinxifinotinstopwords])#停用词过滤
df1=df1.apply(lambdax:[re.sub('[\d]','',i)foriinx])texts=[wforwindf1];dictionary=Dictionary(texts)corpus=[dictionary.doc2bow(text)fortextintexts];tfidf=TfidfModel(corpus)lda=LdaModel(corpus=corpus,id2word=dictionary,num_topics=10,random_state=1)x1=lda.show_topics(num_words=5)print("LDA主题类,词出现概率*词")forxinx1:print(x)lda=LdaModel(corpus=tfidf[corpus],id2word=dictionary,num_topics=10,random_state=1)x2=lda.show_topics(num_words=5)print("LDA主题类(tfidf优化),词出现概率*词")forxinx2:print(x)12.3文本表示3.基于神经网络的词嵌入模型12.3文本表示例12.5利用Word2vec对股票的文本评论进行词向量编码本例中利用文件comment_sample.csv进行词向量训练,comment_sample.csv是东方财富网上证股指股吧中2022年的20000条评论,数据结构如表12-2所示。12.3文本表示例12.5利用Word2vec对股票的文本评论进行词向量编码
利用gensim.modelsm模块中的Word2Vec模块,采用CBOW模型进行词向量训练,在训练完模型后输出词语“涨”的词向量,以及与“涨”最相关的10个词语。输出结果如图12-7所示。可以看到,最终词向量中一共包含6078个词,特征向量维度为100。与“涨”最相关的十个词分别是“指数”“个股”“红”“股票”“跌成”。图12-7利用Word2vec对股票的文本评论进行词向量编码12.3文本表示Python代码演示fromgensim.modelsimportWord2Vecimportpandasaspd;
importjieba;importredf=pd.read_csv(r'E:/jrj1/Chapter12/comment_sample.csv',encoding='utf-8')jieba_output=(df['标题'].astype(str)).apply(jieba.lcut)stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#建立停用词表df1=jieba_output.apply(lambdax:[iforiinxifinotinstopwords])#停用词过滤
df1=df1.apply(lambdax:[re.sub('[\d]','',i)foriinx])common_texts=[wforwindf1]model=Word2Vec(sentences=common_texts,vector_size=100,window=5,min_count=2,workers=4)print(model)#summarizevocabularywords=list(model.wv.key_to_index)#print(words[:10])model.save("word2vec.model")model=Word2Vec.load("word2vec.model")vector=model.wv['涨']#getnumpyvectorofawordprint('“涨”的词向量为:')print(vector)sims=model.wv.most_similar('涨',topn=5)print('和“涨”最相关的5个词:')forwinsims:print(w)12.4文本特征选择TF-IDF法如果某个文本特征词在某文档中出现的频率高,并且在其他文档中很少出现,则认为该词具有很好的类别其区分能力,适合用来分类。在TF-IDF中,TF代表文本特征词w在文档Di中出现的频率;IDF表示如果包含文本特征词w的文档越少,则说明w具有很好的类别区分能力。表达式如下所示:12.4文本特征选择2.互信息法3.信息增益法在文本挖掘中,信息增益代表文本中包含某一文本特征词时文本类型的平均信息量,体现了某一个特征词的存在与否对类别预测的影响能力。因此,一个特征词w能够为系统带来的信息越多,则表示特征词w越重要。在文本分析中,信息增益的计算式可定义为熵与条件熵的差值:12.4文本特征选择
12.4文本特征选择12.4文本特征选择例12.6文本特征选择下面介绍基于jieba.analyse.extract_tags()方法的文本特征选择,从《中国金融稳定报告(2022)》(节选)中抽出TF-IDF权重最大的20个关键词。抽取结果如图12-8所示。图12-8文本特征选择结果示例12.4文本特征选择Python代码演示importjiebaimportjieba.analysefileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()keywords=jieba.analyse.extract_tags(fileContent,topK=20,withWeight=True,allowPOS=('n','nr','ns'))foriteminkeywords:print(item[0],item[1])12.5模式挖掘1.情感分析例如,“虽然目前大盘处于上升周期,但这支股票仍在下跌,投资者极其不看好它,认为不能扭亏为盈”,这样一条评论对应的消费者情绪是积极的还是消极的?(1)对评论进行分词:“虽然/目前/大盘/处于/上升/周期/,但/这支/股票/仍/在/下跌/,投资者/极其/不/看好/它/,认为/不能/扭亏为盈”。(2)找出句子中的情感词,并对其赋值。积极的情感词如“好”“好看”“上涨”等,消极的情感词如“差”“烂”“下跌”等,出现一个积极词分值加1,出现一个消极词分值就减1。(3)往情绪词前查找程度副词,并为程度副词设置调整权重。例如,当存在“太”、“无比”等反映强情感的程度副词时,该词权重设定为2;存在“仅仅”、“有点”等反映弱情感的程度副词时,该词权重设为0.5。(4)寻找情感词前是否存在否定词,如存在,则情感倾向发生改变,将该条评论的情感权重设定为-1。(5)计算一条评论所有分词的情感值,记录下来。例句最后综合情感得分为-3分,即该评论中负面情绪占主导地位。12.5模式挖掘例12.7用Python实现对一段评论文本的情感分析
利用情感词典对评论文本进行情感分析。Python代码演示importpandasaspd;importjieba;importosos.chdir(r'E:/jrj1/Chapter12/')#修改工作目录#加载词典score=pd.read_table("emotion1.txt",header=None,delimiter=",",encoding='utf-8',names=['word','score'])adv_words=pd.read_csv("fdandcd.txt",header=None,delimiter="\t",encoding='utf-8',names=['term','score'])stopwords=[line.strip()forlineinopen('stopwords.txt','r',encoding='UTF-8').readlines()]#建立停用词表#找出语料a中的情感词和程度副词,计算句子的情感得分defcount_score(a):b=pd.DataFrame(a,columns=['word'])b_score=pd.merge(b,score,how='left',left_on='word',right_on='word')c_score=pd.merge(b_score,adv_words,how='left',left_on='word',right_on='term')delc_score['term']ind=c_score['score_y'].notnull()#布尔向量c_score.loc[ind,'score_x']=012.5模式挖掘Python代码演示(续)ind2=[iforiinrange(len(c_score))ifind[i]]#定位程度副词#程度副词调整foriinind2:ifi!=(len(c_score)-1):c_score.loc[i+1,'score_x']=c_score.loc[i+1,'score_x']*c_score.loc[i,'score_y']returnc_score['score_x'].sum()#文本预处理得到语料comment=‘虽然目前大盘处于上升周期,但这支股票仍在下跌,投资者极其不看好它,认为不能扭亏为盈'words=jieba.lcut(comment)result=[]forwinwords:ifwnotinstopwords:result.append(w)#调用count_score()函数计算情感得分emo=count_score(result)print('当前情感得分值为:'+str(emo))12.5模式挖掘2.可视化词云例12.8用Python生成“词云”图在本例中,利用《中国金融稳定报告(2022)》(节选)文本数据,构建词云提取报告中的关键词,运行结果如图12-9所示。可以看到“同业业务”“银行”“业务”“金融机构”等词均为报告中的高频词汇,凸显出防范化解金融风险的重要性。图12-9“词云”运行结果12.5模式挖掘Python代码演示
fromwordcloudimportWordCloudimportcollections#词频统计库importjiebaimportmatplotlib.pyplotaspltimportosos.chdir(r'E:/jrj1/Chapter12
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都2024年二手房买卖权利义务合同
- 2024年度文物古建筑照明设计施工合同
- 河北省沧州市三校联考2024-2025学年高三上学期11月期中考试 化学 含解析
- 2024年度在线教育平台定制开发合同
- 导演聘用合同模板(04年版)
- 2024年车位销售代理合作协议3篇
- 成都到乌鲁木齐2024年物流服务费用结算协议
- 槽探工程2024年度进度合同
- 二零二四年份文化创意设计合同
- 占用村民土地调解协议书(2篇)
- 高中语文教师资格考试学科知识与教学能力试卷及解答参考(2025年)
- 幼儿园大班健康《保护我们的牙齿》课件
- 2025届高考政治二轮复习参考题型专练一曲线图类含解析
- 中国全光网络建设行业需求现状调研与发展前景趋势分析研究报告(2024-2030版)
- 定制旅游行业市场深度分析报告
- Unit 6 Is he your grandpa?第一课时(教学设计+素材)-2023-2024学年译林版(三起)(2024)英语三年级上册
- 高中生物《蛋白质是生命活动的主要承担者》教学设计
- 2024年高考语文新课标I卷作文导写及范文展示
- WAT电性参数介绍-2022年学习资料
- 项目托管合作合同协议书
- 中小学新教材教案小学二年级语文上(课文:18刘胡兰)第一课时教学设计-学情分析+教学过程+教学反思
评论
0/150
提交评论