機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊6 基于貝葉斯理論的分類預(yù)測_第1頁
機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊6 基于貝葉斯理論的分類預(yù)測_第2頁
機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊6 基于貝葉斯理論的分類預(yù)測_第3頁
機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊6 基于貝葉斯理論的分類預(yù)測_第4頁
機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊6 基于貝葉斯理論的分類預(yù)測_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)探查數(shù)據(jù)可視化文本向量化數(shù)據(jù)轉(zhuǎn)換貝葉斯分類模型訓(xùn)練數(shù)據(jù)預(yù)測基于貝葉斯理論的分類預(yù)測參考書目《機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》模塊6機(jī)器學(xué)習(xí)技術(shù)目錄惡性腫瘤預(yù)測垃圾郵件預(yù)測廣告短信預(yù)測小結(jié)習(xí)題六基于貝葉斯理論的分類預(yù)測模塊6機(jī)器學(xué)習(xí)技術(shù)breast-cancer-uci.data數(shù)據(jù)庫來自威斯康星大學(xué),記錄了影響惡性癌癥的10個特征信息,應(yīng)用貝葉斯分類算法歸納出分類規(guī)則,分析特征信息的相關(guān)影響關(guān)系,最終判斷患者是否患有惡性癌癥。詳細(xì)的字段描述見下表。1.1任務(wù)描述1惡性腫瘤預(yù)測字段字段類型允許為空標(biāo)簽?例子編號int否否1171845團(tuán)塊厚度int否否8細(xì)胞大小均勻性int否否6細(xì)胞形狀均勻性int否否4邊緣附著力int否否31.1任務(wù)描述字段字段類型允許為空標(biāo)簽?例子單層上皮細(xì)胞大小int否否5裸核str是否9乏味染色質(zhì)int否否3正常核仁int否否1線粒體int否否1類別int否是4單層上皮細(xì)胞大小int否否5裸核str是否9接上1惡性腫瘤預(yù)測注:1.團(tuán)塊厚度、細(xì)胞大小均勻性、細(xì)胞形狀均勻性、邊緣附著力、單層上皮細(xì)胞大小、裸核、乏味染色質(zhì)、正常核仁、線粒體字段中,取值均為1-10。2.類別字段中,2表示良性,4表示惡性。1.1任務(wù)描述1)在數(shù)據(jù)探查時,將類別分為良性和惡性,分別統(tǒng)計特征分布。2)通過團(tuán)塊厚度、細(xì)胞大小均勻性、細(xì)胞形狀均勻性、細(xì)胞形狀均勻性、邊緣附著力等特征,預(yù)測患者是否會患有惡性腫瘤。3)計算模型預(yù)測的準(zhǔn)確率。4)特征團(tuán)塊厚度、細(xì)胞大小均勻性、細(xì)胞形狀均勻性、邊緣附著力、單層上皮細(xì)胞大小、裸核、乏味染色質(zhì)、正常核仁、線粒體分別分別取值10、10、10、8、6、8、7、10、1,預(yù)測良性還是惡性。任務(wù)目標(biāo)1惡性腫瘤預(yù)測1.2

任務(wù)分解import方式引入依賴的模塊使用Matplotblib以密度圖矩陣、熱力圖形式可視化樣本的空間分布依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)可視化從探查數(shù)據(jù)內(nèi)容開始,經(jīng)過分析數(shù)據(jù)分布,根據(jù)數(shù)據(jù)特征建立決策樹分類模型,預(yù)測結(jié)果,計算預(yù)測的準(zhǔn)確率。檢查樣本分布、特征/標(biāo)簽類型、空值、重復(fù)行、屬性相互關(guān)系1惡性腫瘤預(yù)測1.2

任務(wù)分解轉(zhuǎn)換Pandas類型到Numpy類型在已知樣本上訓(xùn)練回歸模型利用已經(jīng)建立的邏輯貝葉斯模型進(jìn)行結(jié)果預(yù)測數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練預(yù)測接上模型評估根據(jù)測試集預(yù)測得到的label,跟真實label比較,計算預(yù)測準(zhǔn)確率1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importnumpyasnpimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassnsfromsklearnimportmodel_selectionfromsklearn.naive_bayesimportGaussianNB按“SHIFT+Enter”,檢查輸出無異常1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.2數(shù)據(jù)探查文件讀入DataFrame對象后,需要觀察不同標(biāo)簽的數(shù)據(jù)特征。步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)探查</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:讀入數(shù)據(jù)集文件到DataFrame對象。df=pd.read_csv("c:/data/breast-cancer-uci.data",header=0)df.sample(5)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟3:利用數(shù)據(jù)交叉表進(jìn)行數(shù)據(jù)字段描述。()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟4:裸核字段頻數(shù)統(tǒng)計。df["裸核"].value_counts()1惡性腫瘤預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1.3

任務(wù)實施步驟5:裸核字段填充。df.loc[df["裸核"]=="?","裸核"]=np.nandf["裸核"].fillna(df["裸核"].mode()[0],inplace=True)df["裸核"].value_counts()1惡性腫瘤預(yù)測1.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟6:特征數(shù)據(jù)描述性統(tǒng)計。df.describe()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟7:標(biāo)簽字段頻數(shù)統(tǒng)計。label_count=df['類別'].value_counts()label_count按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟8:計算相關(guān)系數(shù)。corr_result=df.iloc[:,1:].corr()corr_result1惡性腫瘤預(yù)測1.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.3數(shù)據(jù)可視化步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']按“SHIFT+Enter”,檢查輸出無異常1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟3:利用條形圖分析標(biāo)簽字段“類別”分布趨勢。plt.figure(figsize=(6,4))plt.barh(y=label_count.index,width=label_count,height=0.3)plt.yticks([2,4],['良性','惡性'])plt.show()1惡性腫瘤預(yù)測1.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:良性的患者多于惡性的患者。1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟4:繪制密度圖矩陣。df.iloc[:,1:-1].plot(kind='density',subplots=True,layout=(2,4),sharex=False,sharey=False,fontsize=15,figsize=(15,10))1惡性腫瘤預(yù)測1.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:大部分字段的頻數(shù)高峰都集中0附近。1惡性腫瘤預(yù)測1.3

任務(wù)實施知識點(diǎn):熱力圖熱力圖熱力圖,又名相關(guān)系數(shù)圖,根據(jù)熱力圖中不同方塊顏色對應(yīng)的相關(guān)系數(shù)的大小,可以判斷出變量之間相關(guān)性的大小。Seaborn模塊提供了heatmap()函數(shù)用來繪制熱力圖,其主要參數(shù)及其作用如下:data:矩形數(shù)據(jù)集??梢詮?qiáng)制轉(zhuǎn)換為ndarray格式數(shù)據(jù)的2維數(shù)據(jù)集,如果提供了PandasDataFrame數(shù)據(jù),索引/列信息將用于標(biāo)記列和行。annot:布爾值或者矩形數(shù)據(jù)。如果為True,則在每個熱力圖單元格中寫入數(shù)據(jù)值。1惡性腫瘤預(yù)測1.3

任務(wù)實施熱力圖vmax:浮點(diǎn)型數(shù)據(jù)。用于錨定色彩映射的值,否則它們是從數(shù)據(jù)和其他關(guān)鍵字參數(shù)推斷出來。square:布爾值。如果為True,則將坐標(biāo)軸方向設(shè)置為“equal”,以使每個單元格為方形。cmap:顏色列表。表示從數(shù)據(jù)值到顏色空間的映射。接上1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.4數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:拆分出特征和標(biāo)簽。X=df.iloc[:,0:-1].valuesy=df.iloc[:,-1]按“SHIFT+Enter”,

檢查輸出無異常1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.5模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:數(shù)據(jù)集拆分成訓(xùn)練集和測試集。X_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,random_state=4,test_size=0.2)X_train.shape,X_test.shape按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟3:訓(xùn)練貝葉斯分類模型。nb_model=GaussianNB()nb_model.fit(X_train,y_train)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施知識點(diǎn):貝葉斯分類算法貝葉斯分類算法貝葉斯(Bayes)算法是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法,該算法是有監(jiān)督的學(xué)習(xí)算法,解決的是分類問題,是將一個未知樣本分到幾個預(yù)先已知類別的過程。最常用的是樸素貝葉斯(Na?veBayes,NB)。樸素貝葉斯的思想就是根據(jù)某些個先驗概率計算Y變量屬于某個類別的后驗概率,也就是根據(jù)先前事件的有關(guān)數(shù)據(jù)估計未來某個事件發(fā)生的概率。1惡性腫瘤預(yù)測1.3

任務(wù)實施貝葉斯分類算法樸素貝葉斯公式P(A|B)=(P(B|A)?P(A))/P(B)。其中,P(A)叫做A事件的先驗概率,即一般情況下,認(rèn)為A發(fā)生的概率。

P(B|A)叫做似然度,是A假設(shè)條件成立的情況下發(fā)生B的概率。P(A|B)叫做后驗概率,在B發(fā)生的情況下發(fā)生A的概率,也就是要求的概率。

P(B)叫做標(biāo)準(zhǔn)化常量,即在一般情況下,認(rèn)為B發(fā)生的概率。接上1惡性腫瘤預(yù)測1.3

任務(wù)實施貝葉斯分類算法比如一個單位內(nèi)有70%的男性員工,30%是女性員工。根據(jù)統(tǒng)計,男性員工總是穿長褲,女性員工則有一半穿長褲,一半穿裙子。假設(shè)在單位中隨機(jī)抽取一個穿長褲的員工,推斷該員工是女性的概率是多少?已知:P(男)=70%,P(女)=30%,P(長褲|男)=100%,P(長褲|女)=50%,P(裙子|女)=50%。假設(shè)該單位總?cè)藬?shù)為U,穿長褲人數(shù)=穿長褲的男員工人數(shù)+穿長褲的女員工人數(shù)=U*70%+U*30%*50%,其中,穿長褲女員工的人數(shù)=U*30%*50%。隨機(jī)抽取一個穿長褲的員工是女性的概率=穿長褲女生的人數(shù)/穿長褲總?cè)藬?shù)=U*30%*50%/(U*70%+U*30%*50%)=0.25接上1惡性腫瘤預(yù)測1.3

任務(wù)實施貝葉斯分類算法再比如垃圾郵件分類,假設(shè)現(xiàn)在有一堆郵件,正常郵件的比例是80%,垃圾郵件的比例是20%,這堆郵件中,5%的郵件中會出現(xiàn)Viagra單詞,其中垃圾郵件中出現(xiàn)Viagra單詞的概率是5/20,如果有一封郵件,這封郵件中包含Viagra單詞,求這封郵件是垃圾郵件的概率是多少?P(spam/Viagra)=(P(Viagra/spam)*P(spam))/P(Viagra)=(5/20*20%)/0.05=80%接上1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.6模型評估步驟1:定義2級標(biāo)題。##<fontcolor="black">模型評估</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:計算預(yù)測準(zhǔn)確率。R2=dt_model.score(X_test,y_test)print("預(yù)測準(zhǔn)確率=%.2f%%"%(R2*100))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施1.3.7預(yù)測步驟1:定義2級標(biāo)題。##<fontcolor="black">預(yù)測</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測1.3

任務(wù)實施步驟2:根據(jù)特征數(shù)據(jù),進(jìn)行預(yù)測。names={2:"良性",4:"惡性"}test_data=np.array([[10,10,10,8,6,8,7,10,1]])pred=nb_model.predict(test_data)names[pred[0]]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1惡性腫瘤預(yù)測本任務(wù)基于網(wǎng)絡(luò)收集了正常郵件與垃圾郵件兩類數(shù)據(jù),意在實現(xiàn)對未知的郵件進(jìn)行分類預(yù)測,主要思路就是依據(jù)用戶收集的大量已接收到的歷史郵件為載體,將每個有效的單詞在當(dāng)前郵件中的詞頻做為特征值,將正常郵件與垃圾郵件做為分類,依據(jù)樸素貝葉斯理論進(jìn)行計算。詳細(xì)的字段描述見下表。2.2任務(wù)描述2垃圾郵件預(yù)測2.2任務(wù)描述字段文件文件類型文件內(nèi)容mail\train\normal文本文件小張,您好!上次您介紹給我的教材,對我很有幫助,于是,希望您能再介紹幾本教材給我,非常感謝。文本文件小李,您好!論文還需要修改,具體情況請在附件中查收。mail\train\spam文本文件***期刊:【主要欄目】:信息技術(shù)。投稿郵箱:XXXXX@163.com文本文件***期刊:【主要欄目】:大數(shù)據(jù)技術(shù)。投稿郵箱:XXXXX@129.commail\test文本文件小林,您好!朋友最近介紹我一本教材,對我很有幫助,于是,也推薦您一本,詳見附錄。文本文件***期刊:【主要欄目】:大數(shù)據(jù)投稿郵箱:XXXXX@189.com2垃圾郵件預(yù)測2.2任務(wù)描述1)中文分詞實現(xiàn)與停詞過濾處理。2)獲取郵件高頻單詞集。3)垃圾郵件與正常郵件分類實現(xiàn)。任務(wù)目標(biāo)2垃圾郵件預(yù)測2.2

任務(wù)分解import方式引入依賴的模塊將正常郵件與垃圾郵件進(jìn)行合并,構(gòu)成訓(xùn)練數(shù)據(jù)集依賴庫導(dǎo)入定義函數(shù)數(shù)據(jù)合并從探查數(shù)據(jù)內(nèi)容開始,經(jīng)過分析數(shù)據(jù)分布,根據(jù)數(shù)據(jù)特征建立決策樹分類模型,預(yù)測結(jié)果,計算預(yù)測的準(zhǔn)確率。定義通過文件夾讀取文件內(nèi)容函數(shù),并測試效果2垃圾郵件預(yù)測2.2

任務(wù)分解文本向量化模型訓(xùn)練接上預(yù)測根據(jù)數(shù)據(jù)預(yù)測結(jié)果將郵件文本轉(zhuǎn)化為向量,并構(gòu)建詞頻統(tǒng)計的計數(shù)矩陣構(gòu)建貝葉斯分類模型,然后在已知樣本上訓(xùn)練模型2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importosimportnumpyasnpfromreimportsubfromjiebaimportcutfromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.naive_bayesimportMultinomialNB按“SHIFT+Enter”,檢查輸出無異常2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.2定義函數(shù)文件讀入DataFrame對象后,需要觀察不同標(biāo)簽的數(shù)據(jù)特征。步驟1:定義2級標(biāo)題。##<fontcolor="black">定義函數(shù)</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:定義讀取文件夾中所有文件的函數(shù),輸出結(jié)果為列表,但不含根目錄。deffile_to_txt(file_path):'''文本文件轉(zhuǎn)換到空格分隔的字符串'''wordLst=[]withopen(file_path,encoding='utf8')asfp:forlineinfp:#去除前后空格

line=line.strip()#過濾干擾字符或無效字符

line=sub(r'[\ufeff:.【】0-9、—。,!~\*]','',line)line=cut(line)wordLst.extend(list(line))return"".join(wordLst)file_to_txt(r"c:\data\mail\train\normal\normal-train1.txt")2垃圾郵件預(yù)測2.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟4:定義讀取文件夾中所有文件內(nèi)容的函數(shù)。defdir_to_txt(root_dir):txtlst=[]filelst=dir_to_file(root_dir)forfileinfilelst:txt=file_to_txt(root_dir+'/'+file)txtlst.append(txt)returntxtlst2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.3數(shù)據(jù)合并##<fontcolor="black">數(shù)據(jù)合并</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:轉(zhuǎn)換訓(xùn)練集的正常郵件到空格分隔的字符串。root_dir="c:/data/mail/train/normal"train_normal_text=dir_to_txt(root_dir)train_normal_text按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟3:轉(zhuǎn)換訓(xùn)練集的垃圾郵件到空格分隔的字符串。root_dir="c:/data/mail/train/spam"train_spam_text=dir_to_txt(root_dir)train_spam_text按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟4:合并數(shù)據(jù),構(gòu)建訓(xùn)練集。X_raw=np.concatenate([train_normal_text,train_spam_text])X_raw按“SHIFT+Enter”,運(yùn)行結(jié)果如下:訓(xùn)練集一共有4個文件,最后的輸出結(jié)果為列表的4個元素。2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.4文本向量化步驟1:定義2級標(biāo)題。##<fontcolor="black">文本向量化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:讀入停用詞表。stopWordLst=[]withopen("c:/data/stopwords/chinese",'r',encoding='utf-8')asfr:#加載停用詞

forwordinfr.readlines():stopWordLst.append(word.strip())stopWordLst[:10]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟3:訓(xùn)練詞袋模型。cvt=CountVectorizer(stop_words=stopWordLst)X=cvt.fit_transform(X_raw)按“SHIFT+Enter”,檢查輸出無異常2垃圾郵件預(yù)測2.3

任務(wù)實施步驟4:顯示文本文件切詞結(jié)果。cvt_names=cvt.get_feature_names_out()print(cvt_names)print(cvt_names.shape)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:訓(xùn)練集一共切出了23個詞匯,詞匯之間默認(rèn)由空格隔開。2垃圾郵件預(yù)測2.3

任務(wù)實施生成切詞計數(shù)矩陣print(X.toarray())print(X.shape)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:訓(xùn)練集4個文件在23個詞匯上的統(tǒng)計結(jié)果,最終生成了4*23的計數(shù)二維矩陣。2垃圾郵件預(yù)測2.3

任務(wù)實施知識點(diǎn):文本向量化文本向量化文本的向量化,就是將信息數(shù)值化,從而便于進(jìn)行建模分析。自然語言處理面臨的文本數(shù)據(jù)往往是非結(jié)構(gòu)化雜亂無章的文本數(shù)據(jù),而機(jī)器學(xué)習(xí)算法處理的數(shù)據(jù)往往是固定長度的輸入和輸出。因而機(jī)器學(xué)習(xí)并不能直接處理原始的文本數(shù)據(jù)。必須把文本數(shù)據(jù)轉(zhuǎn)換成數(shù)字,比如向量。One-hot最早的用于提取文本特征的方法,將文本直接簡化為一系列詞的集合。比如性別sex的取值Male、Female、Female、Male,對其進(jìn)行one_hot_encoding編碼處理的如下:

2垃圾郵件預(yù)測2.3

任務(wù)實施知識點(diǎn):文本向量化文本向量化在One-hot表示法的基礎(chǔ)上,對詞表中的每一個詞在該文本出現(xiàn)的頻次進(jìn)行記錄,以表示當(dāng)前詞在該文本的重要程度。CountVectorizer是一個類,通過這一類中的功能,可以很容易地實現(xiàn)文本的詞頻統(tǒng)計與向量化,它主要是把新的文本轉(zhuǎn)化為特征矩陣,只不過這些特征是已經(jīng)確定過的。而這個特征序列是前面的fit_transfome()輸入的語料庫確定的特征。2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.5模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,檢查輸出無異常2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:構(gòu)造訓(xùn)練集數(shù)據(jù)。X_train=X按“SHIFT+Enter”,檢查輸出無異常2垃圾郵件預(yù)測2.3

任務(wù)實施步驟3:構(gòu)造訓(xùn)練集標(biāo)簽。0表示正常郵件,1表示垃圾郵件y_train=np.array([0]*len(train_normal_text)+[1]*len(train_spam_text))y_train按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟4:訓(xùn)練多項式貝葉斯模型。nb_model=MultinomialNB()nb_model.fit(X_train,y_train)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施2.3.6預(yù)測步驟1:定義2級標(biāo)題。##<fontcolor="black">預(yù)測</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟2:將測試郵件轉(zhuǎn)換到空格分隔的字符串。test_text=file_to_txt("c:/data/mail/test/spam-test.txt")test_text按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟3:向量化郵件。test_vector=cvt.transform([test_text])test_vector按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測2.3

任務(wù)實施步驟4:預(yù)測。label_names=["正常郵件","垃圾郵件"]y_pred=nb_model.predict(test_vector)result=label_names[y_pred[0]]print("預(yù)測結(jié)果為:%s"%(result))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2垃圾郵件預(yù)測SMSSpamCollection是用于廣告短信識別的經(jīng)典數(shù)據(jù)集,完全來自真實短信內(nèi)容,包括4831條正常短信和747條廣告短信。SMS消息通常限制為160個字符,這樣減少了可用于識別消息是否為垃圾的文本數(shù)量。每一個line都表示一段郵件,"ham"和"spam"分別表示郵件的類別“正常短信”和“垃圾短信”。將正常郵件與垃圾郵件進(jìn)行分類。3.3任務(wù)描述3廣告短信預(yù)測3.1任務(wù)描述1)中文分詞實現(xiàn)與停詞過濾處理。2)獲取短信高頻單詞集。3)垃圾短信與正常短信分類實現(xiàn)。任務(wù)目標(biāo)3廣告短信預(yù)測3.2

任務(wù)分解import方式引入依賴的模塊替換標(biāo)簽值,再提取特征和標(biāo)簽依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)轉(zhuǎn)換從探查數(shù)據(jù)內(nèi)容開始,使用切詞工具將文本文件轉(zhuǎn)換為向量,得到切詞計數(shù)矩陣,建立貝葉斯分類模型,通過模型擬合度R2評價模型,最后根據(jù)數(shù)據(jù)預(yù)測結(jié)果。使用Pandas把使用Pandas把SMSSpamCollection讀入到DataFrame對象3廣告短信預(yù)測3.2

任務(wù)分解轉(zhuǎn)換Pandas類型到Numpy類型文本向量化數(shù)據(jù)可視化接上模型訓(xùn)練構(gòu)建貝葉斯分類模型,然后在已知樣本上訓(xùn)練模型使用Matplotblib以餅圖、柱形圖形式可視化標(biāo)簽及切詞的分布3廣告短信預(yù)測3.2

任務(wù)分解模型評估預(yù)測接上利用已經(jīng)建立的邏輯回歸模型進(jìn)行結(jié)果預(yù)測根據(jù)測試集預(yù)測得到的label,跟真實label比較,計算預(yù)測準(zhǔn)確率3廣告短信預(yù)測3.3

任務(wù)實施3.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltfromsklearn.feature_extraction.textimportCountVectorizerfromsklearnimportmodel_selectionfromsklearn.naive_bayesimportMultinomialNB按“SHIFT+Enter”,檢查輸出無異常3廣告短信預(yù)測3.3

任務(wù)實施3.3.2數(shù)據(jù)探查文件讀入DataFrame對象后,需要觀察不同標(biāo)簽的數(shù)據(jù)特征。步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)探查</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟2:讀入數(shù)據(jù)集文件到DataFrame對象。col_names=["label","content"]df=pd.read_csv("c:/data/smsspamcollection",sep='\t',header=None,names=col_names)df.shape,df.head()3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟3:讀入數(shù)據(jù)集文件到DataFrame對象。label_count=df['label'].value_counts()label_count3廣告短信預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3.3.3數(shù)據(jù)可視化步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟2:替換標(biāo)簽值。df['label']=df['label'].replace({'ham':0,'spam':1})df.head()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟3:提取特征和標(biāo)簽。X_raw=df.loc[:,"content"].valuesy=df.loc[:,"label"].valuesprint("數(shù)據(jù)內(nèi)容為:\n",X_raw[0:5])print("數(shù)據(jù)標(biāo)簽為:\n",y[0:5])3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施3.3.4文本向量化步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟2:讀入停用詞表。stopWordLst=[]withopen("c:/data/stopwords/english",'r',encoding='utf-8')asfr:#加載停用詞

forwordinfr.readlines():stopWordLst.append(word.strip())stopWordLst[:10]3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟3:訓(xùn)練詞袋模型。cvt=CountVectorizer(stop_words=stopWordLst)X=cvt.fit_transform(X_raw)3廣告短信預(yù)測3.3

任務(wù)實施文本文件切詞結(jié)果,顯示前50個。cvt_names=cvt.get_feature_names_out()print(cvt_names.shape)print(cvt_names[:50])3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測訓(xùn)練集一共切出了8577個詞匯,詞匯之間默認(rèn)由空格隔開。3.3

任務(wù)實施生成切詞計數(shù)矩陣,查看前5行。print(X.shape)print(X.toarray()[:5])3廣告短信預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:訓(xùn)練集5572個文件在8577個切詞上的統(tǒng)計結(jié)果,最終生成了5572*8577的計數(shù)二維數(shù)組。3.3

任務(wù)實施步驟4:查看詞袋模型的出現(xiàn)頻率。cut_count=list(cvt.vocabulary_.items())cut_count[:10]3廣告短信預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3.3.5數(shù)據(jù)可視化步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,檢查輸出無異常3廣告短信預(yù)測3.3

任務(wù)實施步驟2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']按“SHIFT+Enter”,檢查輸出無異常3廣告短信預(yù)測3.3

任務(wù)實施步驟3:利用餅圖分析標(biāo)簽字段分布趨勢。plt.pie(x=label_count,labels=label_count.index,autopct='%.1f%%',colors=['darkorange','lightgreen'],explode=[0.1,0],radius=0.7)plt.title("標(biāo)簽取值分布",color='r',size=15)plt.show()3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟4:利用條形圖分析隨機(jī)詞頻統(tǒng)計結(jié)果。plt.barh(y=cut_result['word'],width=cut_result['count']/1000)plt.title("隨機(jī)詞頻統(tǒng)計",color='r',size=15)plt.show()3廣告短信預(yù)測3.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施3.3.6模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟2:構(gòu)造訓(xùn)練集數(shù)據(jù)。X_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,random_state=4,test_size=0.2)X_train.shape,X_test.shape按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施步驟3:訓(xùn)練多項式貝葉斯模型。nb_model=MultinomialNB()nb_model.fit(X_train,y_train)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測3.3

任務(wù)實施3.3

溫馨提示

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

評論

0/150

提交評論