《Python經(jīng)濟(jì)大數(shù)據(jù)分析》課件-第9章 Python應(yīng)用垃圾短信識(shí)別_第1頁(yè)
《Python經(jīng)濟(jì)大數(shù)據(jù)分析》課件-第9章 Python應(yīng)用垃圾短信識(shí)別_第2頁(yè)
《Python經(jīng)濟(jì)大數(shù)據(jù)分析》課件-第9章 Python應(yīng)用垃圾短信識(shí)別_第3頁(yè)
《Python經(jīng)濟(jì)大數(shù)據(jù)分析》課件-第9章 Python應(yīng)用垃圾短信識(shí)別_第4頁(yè)
《Python經(jīng)濟(jì)大數(shù)據(jù)分析》課件-第9章 Python應(yīng)用垃圾短信識(shí)別_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

CONTENTS目錄9.1 案例背景9.2 案例目標(biāo)9.3 案例目標(biāo)實(shí)現(xiàn)設(shè)計(jì)9.4 案例操作過程9.4.1 建立垃圾短信識(shí)別工程文件夾9.4.2 導(dǎo)入數(shù)據(jù)與數(shù)據(jù)探索9.4.3 抽取欠抽樣樣本9.4.4 短信數(shù)據(jù)預(yù)處理9.4.5 文本向量表示9.4.6 模型訓(xùn)練與評(píng)價(jià)9.1 案例背景據(jù)360公司互聯(lián)網(wǎng)安全中心的報(bào)告,2020年360手機(jī)衛(wèi)士就為全國(guó)用戶攔截了各類垃圾短信約177.3億條,同比2019年(95.3億條)上升了86.1%,平均每日攔截垃圾短信約4845.3萬條。垃圾短信的類型分布中廣告推銷短信最多,占比為95.6%;詐騙短信占比4.3%;違法短信占比0.1%。垃圾短信存在的根本原因在于其背后的利益,從而形成了鏟不斷的黑色產(chǎn)業(yè)鏈。雖然,公安部、信息產(chǎn)業(yè)部、中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)聯(lián)合發(fā)出《在全國(guó)范圍內(nèi)統(tǒng)一嚴(yán)打手機(jī)違法短信息的通知》等,但目前規(guī)范短信業(yè)務(wù)的制度法來說,仍屬空白,用戶被短信騷擾和欺騙后,申訴的成本比較高,很難追回?fù)p失等,即法律的保護(hù)還不夠嚴(yán)格,還不夠全面。垃圾短信呈現(xiàn)出新趨勢(shì),短信類型日益多變——通過不斷迭代變體字以躲避攔截,投放方式不斷改變,內(nèi)容多變等,形成對(duì)其分辨、追責(zé)的困難。垃圾短信治理是一場(chǎng)“持久戰(zhàn)”。9.2 案例目標(biāo)大量的垃圾短信,若依靠人工識(shí)別和規(guī)避,工作量將十分龐大?;诙绦艃?nèi)容和大數(shù)據(jù)分析方法的垃圾短信自動(dòng)識(shí)別將大大減輕人工對(duì)短信識(shí)別的工作量,提高識(shí)別效率,以最快的方式提醒人們規(guī)避垃圾短信帶來的危害?;诙绦盼谋緝?nèi)容的垃圾短信識(shí)別是案例的最終目標(biāo)。9.3 案例目標(biāo)實(shí)現(xiàn)設(shè)計(jì)9.4 案例操作過程9.4.1 建立垃圾短信識(shí)別工程文件夾打開pycharm,建立垃圾短信識(shí)別工程SMSRecognition9.4 案例操作過程9.4.1 建立垃圾短信識(shí)別工程文件夾新建數(shù)據(jù)預(yù)處理python文件DataProcessing數(shù)據(jù)csv文件下載地址:/s/1EJ-EynDSxLubD8KVHZ7EGw文件提取密碼:rkmj9.4 案例操作過程9.4.2 導(dǎo)入數(shù)據(jù)與數(shù)據(jù)探索安裝好pandas庫(kù)后,導(dǎo)入pandas庫(kù),并簡(jiǎn)單命名為pd,使用庫(kù)中read_csv函數(shù)對(duì)工程中短信數(shù)據(jù)文件SMS70W.csv進(jìn)行讀?。篿mportpandasaspddata=pd.read_csv(‘SMS70W.csv’)使用shape、head觀察數(shù)據(jù)特征9.4 案例操作過程9.4.3 抽取欠抽樣樣本70萬條短信數(shù)據(jù)量較大,在處理時(shí)可能會(huì)造成不便,我們將隨機(jī)抽取數(shù)據(jù)樣本2萬條。為方便操作對(duì)短信標(biāo)簽列取名為label,短信具體內(nèi)容列取名為SMS,并通過value_counts函數(shù)查看垃圾短信分布情況:data.columns=['label','SMS']data['label'].value_counts()9.4 案例操作過程9.4.3 抽取欠抽樣樣本70萬條短信數(shù)據(jù)量較大,在處理時(shí)可能會(huì)造成不便,我們將隨機(jī)抽取數(shù)據(jù)樣本2萬條。為方便操作對(duì)短信標(biāo)簽列取名為label,短信具體內(nèi)容列取名為SMS,并通過value_counts函數(shù)查看垃圾短信分布情況:data.columns=['label','SMS']data['label'].value_counts()9.4 案例操作過程9.4.3 抽取欠抽樣樣本為了充分提取兩類短信的特征,我們采取垃圾短信和正常短信1:1的欠抽樣,即從垃圾短信和正常短信中分別抽取1萬條短信形成含2萬條短信的欠抽樣樣本,以實(shí)現(xiàn)樣本中各類樣本的數(shù)量均衡控制。通過sample函數(shù)從正常短信中抽出1萬條短信,從垃圾短信中抽出1萬條短信的操作命令完全類似:a=data[data['label']==1].sample(10000);b=data[data['label']==0].sample(10000)9.4 案例操作過程9.4.3 抽取欠抽樣樣本a、b分別為正常短信和垃圾短信抽樣樣本,通過pandas庫(kù)中的concat函數(shù)將其縱向拼接:data_sample=pd.concat([a,b],axis=0)data_sample9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理短信去重使用drop_duplicates函數(shù)對(duì)欠抽樣樣本中重復(fù)短信去重,去重后data_sample中2萬條短信變成19951條。data_dup=data_sample['SMS'].drop_duplicates()9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理去除x序列importredata_dropX=data_dup.apply(lambday:re.sub('x','',y))以上命令意為對(duì)data_dup中每個(gè)序列中的“x”替換為空,其中y為形式參數(shù)。處理后data_dropX數(shù)據(jù)返回值已經(jīng)沒有x。9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理簡(jiǎn)單結(jié)巴分詞importjiebadata_cut=data_dropX.apply(lambday:jieba.lcut(y))9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理使用用戶詞典分詞使用jieba中默認(rèn)的詞典對(duì)短信進(jìn)行分詞操作,但有一些特殊的詞語(yǔ)我們?cè)谶@個(gè)案例中不希望將其拆分,如“心理咨詢師”不希望被拆分成“心理咨詢”和“師”。此時(shí),我們需要建立用戶字典UserDic.txt,在工程文件夾中新建相應(yīng)txt文檔,并將所有用戶詞語(yǔ)存入其中,一行存儲(chǔ)一個(gè)用戶詞語(yǔ)。

包括“心理咨詢師”、“女人節(jié)”、“手機(jī)號(hào)”、“通話”、“短信”。使用了用戶字典的結(jié)巴分詞操作:jieba.load_userdict('UserDic.txt')data_cut=data_dropX.apply(lambday:jieba.lcut(y))9.4 案例操作過程9.4.4短信數(shù)據(jù)預(yù)處理去除停用詞對(duì)data_cut中數(shù)據(jù)觀察后,發(fā)現(xiàn)對(duì)于如“Z”、“q”、“.”、“級(jí)”等這些對(duì)于短信分類是無用的、累贅的,甚至可能對(duì)短信分類產(chǎn)生負(fù)面作用。在工程文件夾中建立常規(guī)停用詞典stopword.txt,并將所有常規(guī)停用詞(包括標(biāo)點(diǎn)符號(hào))存入其中,一行存儲(chǔ)一個(gè)停用詞。將常規(guī)停用詞文檔導(dǎo)入的操作:StopWords=pd.read_csv('stopword.txt',encoding='GB18030',sep='heiheihei',header=None)9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理去除停用詞新增停用詞“≮”、“≯”、“≠”等的操作:StopWords=['≮','≯','≠','≮','','---','m','q','N','R','Z']+list(StopWords.iloc[:,0])使用建立的停用詞典StopWords去除data_cut中的停用詞:data_after_stop=data_cut.apply(lambday:[iforiinyifinotinStopWords])以上語(yǔ)句意為,對(duì)data_cut中每一條經(jīng)上述分詞后的短信數(shù)據(jù)進(jìn)行停用詞去除操作,只要詞語(yǔ)不在StopWords中,則返回原詞語(yǔ)。反之,則不返回原詞語(yǔ)。這樣就實(shí)現(xiàn)了停用詞的去除9.4 案例操作過程9.4.4短信數(shù)據(jù)預(yù)處理去除停用詞把列表轉(zhuǎn)成字符串,并把各分詞用空格連接起來。ch_data=data_after_stop.apply(lambdax:''.join(x))9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理繪制詞云圖提取短信的標(biāo)簽存入labels以區(qū)別正常短信和垃圾短信:labels=data_sample.loc[data_after_stop.index,'label']建立WordFrequency為字典型對(duì)象,用于記錄詞頻:WordFrequency={}先畫正常短信的詞云圖,使用雙重for循環(huán)詞句統(tǒng)計(jì)標(biāo)簽值為0的正常短信詞頻數(shù):foriindata_after_stop[labels==0]:forjini:ifjnotinWordFrequency.keys():WordFrequency[j]=1else:WordFrequency[j]+=19.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理繪制詞云圖導(dǎo)入wordcloud庫(kù)的WordCloud模塊和matplotlib.pyplot庫(kù),進(jìn)行正常短信詞云圖繪制。fromwordcloudimportWordCloudimportmatplotlib.pyplotasplt導(dǎo)出準(zhǔn)備好的在工程文件夾中的詞云輪廓圖cloud.png:cloud=plt.imread('cloud.png’)將圖片轉(zhuǎn)換為numpy數(shù)組,以數(shù)組的形式加載圖片,再使用WordCloud函數(shù)設(shè)置詞云輪廓圖、背景色和顯示字體: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 短信數(shù)據(jù)預(yù)處理繪制詞云圖用設(shè)置好的詞云框架裝下帶詞頻的詞:wc.fit_words(word_fre)展示詞云圖:plt.imshow(wc)9.4 案例操作過程9.4.4 短信數(shù)據(jù)預(yù)處理繪制詞云圖類似的方法可得到垃圾短信詞云圖。在建立詞頻字典時(shí),將標(biāo)簽取值改為1,其他與畫正常短信詞云圖完全類似。我們用了不同的詞云輪廓圖cloud0.png。9.4 案例操作過程9.4.5 文本向量表示每條短信以多個(gè)詞匯的形式存在,計(jì)算機(jī)還不能對(duì)其進(jìn)行直接處理。若要將短信放入某分類模型并將其進(jìn)行分類操作,則應(yīng)先將文本進(jìn)行數(shù)值型向量表示。需要用到機(jī)器學(xué)習(xí)庫(kù)sklearn里的特征提取模塊feature_extraction中的針對(duì)文本特征提取子模塊text,使用其中的轉(zhuǎn)化詞頻向量函數(shù)CountVectorizer和轉(zhuǎn)化TF-IDF權(quán)重向量函數(shù)TfidfTransformer:fromsklearn.feature_extraction.textimportCountVectorizer,TfidfTransformer同時(shí),將數(shù)據(jù)切分函數(shù)train_test_split導(dǎo)入,用以切分欠抽樣數(shù)據(jù)為(模型)訓(xùn)練集和測(cè)試集:fromsklearn.model_selectionimporttrain_test_split將處理過的欠抽樣數(shù)據(jù)ch_data和相應(yīng)的標(biāo)簽數(shù)據(jù)labels通過train_test_split函數(shù)的參數(shù)設(shè)置test_size=0.2切分為數(shù)據(jù)占比分別為80%和20%的訓(xùn)練集和測(cè)試集: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進(jìn)行TF-IDF權(quán)值轉(zhuǎn)換。首先,用CountVectorizer提取每種詞匯在該訓(xùn)練文本中出現(xiàn)的頻率,將文本中的詞語(yǔ)轉(zhuǎn)換為詞頻矩陣,通過fit_transform函數(shù)計(jì)算各個(gè)詞語(yǔ)出現(xiàn)的次數(shù):countVectorizer=CountVectorizer()data_tr=countVectorizer.fit_transform(data_tr)9.4 案例操作過程9.4.5 文本向量表示用TfidfTransformer將data_tr轉(zhuǎn)換成TF-IDF權(quán)值矩陣。轉(zhuǎn)換過程中使用了toarray函數(shù)將data_tr轉(zhuǎn)成數(shù)組以獲取其數(shù)據(jù),這樣fit_transform函數(shù)才能正確識(shí)別并運(yùn)行。TI_tr=TfidfTransformer().fit_transform(data_tr.toarray())TI_tr目前是一個(gè)TF-IDF權(quán)值稀疏矩陣對(duì)象,用toarray函數(shù)將其轉(zhuǎn)成數(shù)組獲取其數(shù)據(jù),以備后續(xù)放入分類模型:TI_tr=TI_tr.toarray()9.4 案例操作過程9.4.5 文本向量表示類似訓(xùn)練集的操作,使用countVectorizer.fit_transform(da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論