




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CONTENTS目录9.1 案例背景9.2 案例目标9.3 案例目标实现设计9.4 案例操作过程9.4.1 建立垃圾短信识别工程文件夹9.4.2 导入数据与数据探索9.4.3 抽取欠抽样样本9.4.4 短信数据预处理9.4.5 文本向量表示9.4.6 模型训练与评价9.1 案例背景据360公司互联网安全中心的报告,2020年360手机卫士就为全国用户拦截了各类垃圾短信约177.3亿条,同比2019年(95.3亿条)上升了86.1%,平均每日拦截垃圾短信约4845.3万条。垃圾短信的类型分布中广告推销短信最多,占比为95.6%;诈骗短信占比4.3%;违法短信占比0.1%。垃圾短信存在的根本原因在于其背后的利益,从而形成了铲不断的黑色产业链。虽然,公安部、信息产业部、中国银行业监督管理委员会联合发出《在全国范围内统一严打手机违法短信息的通知》等,但目前规范短信业务的制度法来说,仍属空白,用户被短信骚扰和欺骗后,申诉的成本比较高,很难追回损失等,即法律的保护还不够严格,还不够全面。垃圾短信呈现出新趋势,短信类型日益多变——通过不断迭代变体字以躲避拦截,投放方式不断改变,内容多变等,形成对其分辨、追责的困难。垃圾短信治理是一场“持久战”。9.2 案例目标大量的垃圾短信,若依靠人工识别和规避,工作量将十分庞大。基于短信内容和大数据分析方法的垃圾短信自动识别将大大减轻人工对短信识别的工作量,提高识别效率,以最快的方式提醒人们规避垃圾短信带来的危害。基于短信文本内容的垃圾短信识别是案例的最终目标。9.3 案例目标实现设计9.4 案例操作过程9.4.1 建立垃圾短信识别工程文件夹打开pycharm,建立垃圾短信识别工程SMSRecognition9.4 案例操作过程9.4.1 建立垃圾短信识别工程文件夹新建数据预处理python文件DataProcessing数据csv文件下载地址:/s/1EJ-EynDSxLubD8KVHZ7EGw文件提取密码:rkmj9.4 案例操作过程9.4.2 导入数据与数据探索安装好pandas库后,导入pandas库,并简单命名为pd,使用库中read_csv函数对工程中短信数据文件SMS70W.csv进行读取:importpandasaspddata=pd.read_csv(‘SMS70W.csv’)使用shape、head观察数据特征9.4 案例操作过程9.4.3 抽取欠抽样样本70万条短信数据量较大,在处理时可能会造成不便,我们将随机抽取数据样本2万条。为方便操作对短信标签列取名为label,短信具体内容列取名为SMS,并通过value_counts函数查看垃圾短信分布情况:data.columns=['label','SMS']data['label'].value_counts()9.4 案例操作过程9.4.3 抽取欠抽样样本70万条短信数据量较大,在处理时可能会造成不便,我们将随机抽取数据样本2万条。为方便操作对短信标签列取名为label,短信具体内容列取名为SMS,并通过value_counts函数查看垃圾短信分布情况:data.columns=['label','SMS']data['label'].value_counts()9.4 案例操作过程9.4.3 抽取欠抽样样本为了充分提取两类短信的特征,我们采取垃圾短信和正常短信1:1的欠抽样,即从垃圾短信和正常短信中分别抽取1万条短信形成含2万条短信的欠抽样样本,以实现样本中各类样本的数量均衡控制。通过sample函数从正常短信中抽出1万条短信,从垃圾短信中抽出1万条短信的操作命令完全类似:a=data[data['label']==1].sample(10000);b=data[data['label']==0].sample(10000)9.4 案例操作过程9.4.3 抽取欠抽样样本a、b分别为正常短信和垃圾短信抽样样本,通过pandas库中的concat函数将其纵向拼接:data_sample=pd.concat([a,b],axis=0)data_sample9.4 案例操作过程9.4.4 短信数据预处理短信去重使用drop_duplicates函数对欠抽样样本中重复短信去重,去重后data_sample中2万条短信变成19951条。data_dup=data_sample['SMS'].drop_duplicates()9.4 案例操作过程9.4.4 短信数据预处理去除x序列importredata_dropX=data_dup.apply(lambday:re.sub('x','',y))以上命令意为对data_dup中每个序列中的“x”替换为空,其中y为形式参数。处理后data_dropX数据返回值已经没有x。9.4 案例操作过程9.4.4 短信数据预处理简单结巴分词importjiebadata_cut=data_dropX.apply(lambday:jieba.lcut(y))9.4 案例操作过程9.4.4 短信数据预处理使用用户词典分词使用jieba中默认的词典对短信进行分词操作,但有一些特殊的词语我们在这个案例中不希望将其拆分,如“心理咨询师”不希望被拆分成“心理咨询”和“师”。此时,我们需要建立用户字典UserDic.txt,在工程文件夹中新建相应txt文档,并将所有用户词语存入其中,一行存储一个用户词语。
包括“心理咨询师”、“女人节”、“手机号”、“通话”、“短信”。使用了用户字典的结巴分词操作:jieba.load_userdict('UserDic.txt')data_cut=data_dropX.apply(lambday:jieba.lcut(y))9.4 案例操作过程9.4.4短信数据预处理去除停用词对data_cut中数据观察后,发现对于如“Z”、“q”、“.”、“级”等这些对于短信分类是无用的、累赘的,甚至可能对短信分类产生负面作用。在工程文件夹中建立常规停用词典stopword.txt,并将所有常规停用词(包括标点符号)存入其中,一行存储一个停用词。将常规停用词文档导入的操作:StopWords=pd.read_csv('stopword.txt',encoding='GB18030',sep='heiheihei',header=None)9.4 案例操作过程9.4.4 短信数据预处理去除停用词新增停用词“≮”、“≯”、“≠”等的操作:StopWords=['≮','≯','≠','≮','','---','m','q','N','R','Z']+list(StopWords.iloc[:,0])使用建立的停用词典StopWords去除data_cut中的停用词:data_after_stop=data_cut.apply(lambday:[iforiinyifinotinStopWords])以上语句意为,对data_cut中每一条经上述分词后的短信数据进行停用词去除操作,只要词语不在StopWords中,则返回原词语。反之,则不返回原词语。这样就实现了停用词的去除9.4 案例操作过程9.4.4短信数据预处理去除停用词把列表转成字符串,并把各分词用空格连接起来。ch_data=data_after_stop.apply(lambdax:''.join(x))9.4 案例操作过程9.4.4 短信数据预处理绘制词云图提取短信的标签存入labels以区别正常短信和垃圾短信:labels=data_sample.loc[data_after_stop.index,'label']建立WordFrequency为字典型对象,用于记录词频:WordFrequency={}先画正常短信的词云图,使用双重for循环词句统计标签值为0的正常短信词频数:foriindata_after_stop[labels==0]:forjini:ifjnotinWordFrequency.keys():WordFrequency[j]=1else:WordFrequency[j]+=19.4 案例操作过程9.4.4 短信数据预处理绘制词云图导入wordcloud库的WordCloud模块和matplotlib.pyplot库,进行正常短信词云图绘制。fromwordcloudimportWordCloudimportmatplotlib.pyplotasplt导出准备好的在工程文件夹中的词云轮廓图cloud.png:cloud=plt.imread('cloud.png’)将图片转换为numpy数组,以数组的形式加载图片,再使用WordCloud函数设置词云轮廓图、背景色和显示字体:importnumpyasnpfromPILimportImagecloud=np.array(Image.open("cloud.png"))wc=WordCloud(mask=cloud,background_color='white',font_path=r'C:\Windows\Fonts\simhei.ttf')9.4 案例操作过程9.4.4 短信数据预处理绘制词云图用设置好的词云框架装下带词频的词:wc.fit_words(word_fre)展示词云图:plt.imshow(wc)9.4 案例操作过程9.4.4 短信数据预处理绘制词云图类似的方法可得到垃圾短信词云图。在建立词频字典时,将标签取值改为1,其他与画正常短信词云图完全类似。我们用了不同的词云轮廓图cloud0.png。9.4 案例操作过程9.4.5 文本向量表示每条短信以多个词汇的形式存在,计算机还不能对其进行直接处理。若要将短信放入某分类模型并将其进行分类操作,则应先将文本进行数值型向量表示。需要用到机器学习库sklearn里的特征提取模块feature_extraction中的针对文本特征提取子模块text,使用其中的转化词频向量函数CountVectorizer和转化TF-IDF权重向量函数TfidfTransformer:fromsklearn.feature_extraction.textimportCountVectorizer,TfidfTransformer同时,将数据切分函数train_test_split导入,用以切分欠抽样数据为(模型)训练集和测试集:fromsklearn.model_selectionimporttrain_test_split将处理过的欠抽样数据ch_data和相应的标签数据labels通过train_test_split函数的参数设置test_size=0.2切分为数据占比分别为80%和20%的训练集和测试集:data_tr,data_te,labels_tr,labels_te=train_test_split(ch_data,labels,test_size=0.2)9.4 案例操作过程9.4.5 文本向量表示先将data_tr进行TF-IDF权值转换。首先,用CountVectorizer提取每种词汇在该训练文本中出现的频率,将文本中的词语转换为词频矩阵,通过fit_transform函数计算各个词语出现的次数:countVectorizer=CountVectorizer()data_tr=countVectorizer.fit_transform(data_tr)9.4 案例操作过程9.4.5 文本向量表示用TfidfTransformer将data_tr转换成TF-IDF权值矩阵。转换过程中使用了toarray函数将data_tr转成数组以获取其数据,这样fit_transform函数才能正确识别并运行。TI_tr=TfidfTransformer().fit_transform(data_tr.toarray())TI_tr目前是一个TF-IDF权值稀疏矩阵对象,用toarray函数将其转成数组获取其数据,以备后续放入分类模型:TI_tr=TI_tr.toarray()9.4 案例操作过程9.4.5 文本向量表示类似训练集的操作,使用countVectorizer.fit_transform(da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6年级上册数学位置与方向知识点
- 5年数学公式口袋书
- 低密度脂肪蛋白0.6
- c++ 继承 构造析构顺序
- 重点营业线施工方案
- 2025年上海工程技术大学单招职业适应性测试题库1套
- 2025年包头职业技术学院单招职业倾向性测试题库及参考答案
- 2025年甘肃警察职业学院单招职业倾向性测试题库新版
- 2025年苏州托普信息职业技术学院单招职业技能测试题库完美版
- 新版IT网络系统上线测试及应急预案手册
- 《数字电子技术基础》 题库 各章测试题习题答案
- 2023入团积极分子考试题库(附答案)
- 中国慢性病报告2023
- 产品合格证出厂合格证A4打印模板
- 《创业融资》课件
- 辽宁省高中学业水平合格性考试生物试卷(附带答案)
- 《俞净意公遇灶神记》白话译文
- 定积分的概念说课课件
- 中国教育行业调查报告-《中国教育行业白皮书》
- 人教版四年级数学下册 (加法运算定律)运算定律教育教学课件
- 人工造林项目投标方案
评论
0/150
提交评论