




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租房協議怎么寫合同書的
- 入職前協議合同
- 簽約作者協議合同
- 合同不解除或終止協議
- 創作歌曲協議合同
- 購買圍網合同協議
- 轉賣合同協議范本
- 捷信正規的還款協議合同
- 外賣就餐協議合同書
- 企業培訓合同協議
- 2025年司法鑒定科學研究院事業編制招聘14人歷年高頻重點提升(共500題)附帶答案詳解
- DB37T 5118-2018 市政工程資料管理標準
- 2025年大連海事大學自主招生個人陳述自薦信范文
- 駕駛員春季行車安全
- 北京理工大學《操作系統課程設計》2021-2022學年第一學期期末試卷
- 健康體檢服務 投標方案(技術方案)
- 《鋼筋工程概述》課件
- 林木砍伐施工方案
- 《中華人民共和國藥品管理法實施條例》
- 中興公司應收賬款管理問題及優化建議8400字
- 2024-2030年中國融雪劑行業現狀規模與前景運行態勢分析報告
評論
0/150
提交評論