2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序

本文主要是介绍2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2017年第六届数学建模国际赛小美赛

B题 电子邮件中的笔迹分析

原题再现:

  笔迹分析是一种非常特殊的调查形式,用于将人们与书面证据联系起来。在法庭或刑事调查中,通常要求笔迹鉴定人确认笔迹样本是否来自特定的人。由于许多语言证据出现在电子邮件中,从广义上讲,笔迹分析还包括如何根据电子邮件的语言特征识别作者的问题。
  作者归属是语言学家开始使用语言风格的可识别特征(从词频到首选句法结构)来识别有争议文本的作者的过程。电子邮件内容短小,作者语言风格明显。请构造一个有效的模型,通过捕获电子邮件的语言特征来识别作者。您可以使用安然电子邮件数据集来培训和测试您的模型。
  安然电子邮件数据集链接:http://bailando.sims.berkeley.edu/enron_email.html

整体求解过程概述(摘要)

  本文开发了一个工具,可以用来识别这类电子邮件的作者。作者的风格可以通过测量文本中的各种茎秆特征来简化为一种模式。电子邮件还包含可测量的宏结构特征。这些特征可与支持向量机(SVM)学习算法一起使用,以分类或将电子邮件的作者身份归属给作者,提供适当的消息样本以供比较。
  首先,第3章讨论了实验过程的计划和范围,该实验过程用于确定分析电子邮件的作者特征和识别电子邮件的作者身份是否可行。概述了需要评估的特征列表,并说明了为什么要使用支持向量机(SVM)算法进行这项工作。特征集包括但不限于:基于文档的特征、基于单词的特征、虚词比率、字长频率分布、搭配频率、基于字符的特征和字母2-gram。
  接下来,第4章详细介绍了为对电子邮件作者进行系统分类而进行的实验,并报告了实验结果。这是通过首先进行一系列实验来完成的,这些实验旨在揭示纯文本块(不是电子邮件)的成功SVM作者属性的基线值,从而设置特征集、文本大小和消息数量的约束。这些基线实验为该项目的核心——识别电子邮件文本中包含的有用特性的任务——设置了框架。本章报告的实验列表见表12(第25页)。第38页报告了这些结果,证实了迄今使用的方法可作为进一步研究电子邮件数据的基础。
  最后,第5章讨论了电子邮件的属性和分析。第5.1节讨论了对电子邮件数据进行的初步实验。电子邮件数据用于本章中讨论的实验,因此可以首次测试电子邮件特定功能的影响。第5.2节概述了如何改进结果。第5.3节确定了电子邮件中讨论主题的影响。本研究的目的是使用加权的宏平均F1度量,在大约85%的水平上实现电子邮件数据的正确分类。本章报告的结果表明,在增加了电子邮件的结构特征之后,这一目标就实现了。本章报告的实验列表见表22(第39页)。
  最后一章对本文的主要结论进行了总结。这也为今后的工作提出了一些可能的扩展。

模型假设:

  •我们已经考虑的因素发挥着至关重要的作用。
  •我们收集的数据是准确的。
  •人们的写作习惯没有改变。

问题分析:

  问题背景:
  许多公司和机构已经开始依赖因特网来处理业务,随着个人使用因特网,特别是自万维网建立以来,电子邮件流量显著增加。Lyman和Varian(2000年)估计,2000年将发送5 000亿至6 000亿封电子邮件,进一步估计到2003年,每年发送的电子邮件将超过2万亿封。在GVU’s1第8次WWW用户调查中(Pitkow等人,1997年),84%的受访者表示电子邮件是不必要的。
  随着电子邮件流量的增加,出于不正当的原因,电子邮件的使用量也随之增加。误用的例子包括:发送垃圾邮件或未经请求的商业电子邮件(UCE),这是垃圾邮件的广泛传播;发送威胁;发送恶作剧;以及计算机病毒和蠕虫的传播。此外,贩运毒品或儿童色情制品等犯罪活动很容易通过发送简单的电子邮件来协助和教唆。

  本文讨论的问题包括:
  •设置使用支持向量机进行分类实验的框架
  •选择候选文体特征以解决电子邮件作者分类问题
  •确定测试电子邮件作者身份分类是否成功的实验序列

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

with open('x_C.pickle','rb') as f:x_C = pickle.load(f)f.close()
with open('y.pickle','rb') as f:y = pickle.load(f)f.close()
with open('x_W.pickle','rb') as f:x_W = pickle.load(f)f.close()
with open('x_F.pickle','rb') as f:x_F = pickle.load(f)f.close()
with open('x_L.pickle','rb') as f:x_L = pickle.load(f)f.close()
with open('x_C_W.pickle','rb') as f:x_C_W = pickle.load(f)f.close()
with open('x_C_F.pickle','rb') as f:x_C_F = pickle.load(f)f.close()
with open('x_W_F.pickle','rb') as f:x_W_F = pickle.load(f)f.close()
with open('x_F_L.pickle','rb') as f:x_F_L = pickle.load(f)f.close()
with open('x_F_C_W.pickle','rb') as f:x_F_C_W = pickle.load(f)f.close()
with open('x_F_C_L.pickle','rb') as f:x_F_C_L = pickle.load(f)f.close()
with open('x_F_L_W.pickle','rb') as f:x_F_L_W = pickle.load(f)f.close()
with open('x_F_C_L_W.pickle','rb') as f:x_F_C_L_W = pickle.load(f)f.close()
#test diffrent feaure effect (x_C)
x_train, x_test, y_train, y_test = train_test_split(x_C, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_C accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_W)
x_train, x_test, y_train, y_test = train_test_split(x_W, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_W accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F)
x_train, x_test, y_train, y_test = train_test_split(x_F, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_L)
x_train, x_test, y_train, y_test = train_test_split(x_L, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_L accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_C_W)
x_train, x_test, y_train, y_test = train_test_split(x_C_W, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_C_W accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_C_F)
x_train, x_test, y_train, y_test = train_test_split(x_C_F, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_C_F accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_W_F)
x_train, x_test, y_train, y_test = train_test_split(x_W_F, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_W_F accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F_L)
x_train, x_test, y_train, y_test = train_test_split(x_F_L, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F_L accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F_C_W)
x_train, x_test, y_train, y_test = train_test_split(x_F_C_W, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F_C_W accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F_C_L)
x_train, x_test, y_train, y_test = train_test_split(x_F_C_L, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F_C_L accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F_L_W)
x_train, x_test, y_train, y_test = train_test_split(x_F_L_W, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F_L_W accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent feaure effect (x_F_C_L_W)
x_train, x_test, y_train, y_test = train_test_split(x_F_C_L_W, y, test_size=0.2, 
random_state=42)
svclf = SVC(kernel = 'linear')#default with 'rbf'
svclf.fit(x_train,y_train)
pred = svclf.predict(x_test);
print("x_F_C_L_W accuracy: ",sum(pred == y_test)/len(y_test))
#test diffrent kernel effect
new_kernel =['Linear','Polynomial','Radial basis function','Sigmoid tanh']
x_train, x_test, y_train, y_test = train_test_split(x_F_C_L_W, y, test_size=0.2, 
random_state=42)
for kernel in new_kernel:svclf = SVC(kernel=kernel)svclf.fit(x_train, y_train)pred = svclf.predict(x_test);print(kernel," accuracy: ", sum(pred == y_test)/len(y_test))
#test diffrent gama effect
gama_lst =[0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0]
x_train, x_test, y_train, y_test = train_test_split(x_F_C_L_W, y, test_size=0.2, 
random_state=42)
for gama in gama_lst:svclf = SVC(kernel = 'linear',gamma=gama)svclf.fit(x_train, y_train)pred = svclf.predict(x_test);print('gama=',gama," accuracy: ", sum(pred == y_test)/len(y_test))
#test diffrent degree effect
x_train, x_test, y_train, y_test = train_test_split(x_F_C_L_W, y, test_size=0.2, 
random_state=42)
for degree in range(1,11):svclf = SVC(kernel = 'linear',degree=degree)svclf.fit(x_train, y_train)pred = svclf.predict(x_test);print('gama=',degree," accuracy: ", sum(pred == y_test)/len(y_test))
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

这篇关于2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep