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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

任務(wù)實(shí)施步驟3:利用條形圖分析標(biāo)簽字段“類別”分布趨勢(shì)。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ù)測(cè)1.3

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

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

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

任務(wù)實(shí)施知識(shí)點(diǎn):熱力圖熱力圖熱力圖,又名相關(guān)系數(shù)圖,根據(jù)熱力圖中不同方塊顏色對(duì)應(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,則在每個(gè)熱力圖單元格中寫入數(shù)據(jù)值。1惡性腫瘤預(yù)測(cè)1.3

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

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

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

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

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

任務(wù)實(shí)施步驟2:數(shù)據(jù)集拆分成訓(xùn)練集和測(cè)試集。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ù)測(cè)1.3

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

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

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

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

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

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

任務(wù)實(shí)施貝葉斯分類算法再比如垃圾郵件分類,假設(shè)現(xiàn)在有一堆郵件,正常郵件的比例是80%,垃圾郵件的比例是20%,這堆郵件中,5%的郵件中會(huì)出現(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ù)測(cè)1.3

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

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

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

任務(wù)實(shí)施步驟2:根據(jù)特征數(shù)據(jù),進(jìn)行預(yù)測(cè)。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ù)測(cè)本任務(wù)基于網(wǎng)絡(luò)收集了正常郵件與垃圾郵件兩類數(shù)據(jù),意在實(shí)現(xiàn)對(duì)未知的郵件進(jìn)行分類預(yù)測(cè),主要思路就是依據(jù)用戶收集的大量已接收到的歷史郵件為載體,將每個(gè)有效的單詞在當(dāng)前郵件中的詞頻做為特征值,將正常郵件與垃圾郵件做為分類,依據(jù)樸素貝葉斯理論進(jìn)行計(jì)算。詳細(xì)的字段描述見下表。2.2任務(wù)描述2垃圾郵件預(yù)測(cè)2.2任務(wù)描述字段文件文件類型文件內(nèi)容mail\train\normal文本文件小張,您好!上次您介紹給我的教材,對(duì)我很有幫助,于是,希望您能再介紹幾本教材給我,非常感謝。文本文件小李,您好!論文還需要修改,具體情況請(qǐng)?jiān)诟郊胁槭铡ail\train\spam文本文件***期刊:【主要欄目】:信息技術(shù)。文本文件***期刊:【主要欄目】:大數(shù)據(jù)技術(shù)。投稿郵箱:mail\test文本文件小林,您好!朋友最近介紹我一本教材,對(duì)我很有幫助,于是,也推薦您一本,詳見附錄。文本文件***期刊:【主要欄目】:大數(shù)據(jù)2垃圾郵件預(yù)測(cè)2.2任務(wù)描述1)中文分詞實(shí)現(xiàn)與停詞過濾處理。2)獲取郵件高頻單詞集。3)垃圾郵件與正常郵件分類實(shí)現(xiàn)。任務(wù)目標(biāo)2垃圾郵件預(yù)測(cè)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ù)測(cè)結(jié)果,計(jì)算預(yù)測(cè)的準(zhǔn)確率。定義通過文件夾讀取文件內(nèi)容函數(shù),并測(cè)試效果2垃圾郵件預(yù)測(cè)2.2

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

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

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

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

任務(wù)實(shí)施步驟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ù)測(cè)2.3

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

任務(wù)實(shí)施步驟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ù)測(cè)2.3

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

任務(wù)實(shí)施步驟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ù)測(cè)2.3

任務(wù)實(shí)施步驟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ù)測(cè)2.3

任務(wù)實(shí)施步驟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個(gè)文件,最后的輸出結(jié)果為列表的4個(gè)元素。2垃圾郵件預(yù)測(cè)2.3

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

任務(wù)實(shí)施步驟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ù)測(cè)2.3

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

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

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

任務(wù)實(shí)施知識(shí)點(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最早的用于提取文本特征的方法,將文本直接簡(jiǎn)化為一系列詞的集合。比如性別sex的取值Male、Female、Female、Male,對(duì)其進(jìn)行one_hot_encoding編碼處理的如下:

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

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

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

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

任務(wù)實(shí)施步驟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ù)測(cè)2.3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

任務(wù)實(shí)施步驟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ù)測(cè)3.3

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

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

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

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

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

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

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

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

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

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

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

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

任務(wù)實(shí)施步驟3:利用餅圖分析標(biāo)簽字段分布趨勢(shì)。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ù)測(cè)3.3

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

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

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

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

任務(wù)實(shí)施步驟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ù)測(cè)3.3

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

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

任務(wù)實(shí)施步驟2:計(jì)算模型擬合度。R2=lr_model.score(X_test,y_test)print("預(yù)測(cè)準(zhǔn)確率=%.2f%%"%(R2*100))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測(cè)3.3

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

任務(wù)實(shí)施步驟2:輸入測(cè)試的短信文本。test_msg="in2awklycomptowinFACupfinaltkts21stMay2005.TextFAto87121toreceiveentryquestion(stdtxtrate)T&C'sapply08452810075over18's"按“SHIFT+Enter”,檢查輸出無異常3廣告短信預(yù)測(cè)3.3

任務(wù)實(shí)施用之前訓(xùn)練好的詞袋模型轉(zhuǎn)換為計(jì)數(shù)矩陣test_vector=cvt.transform([test_msg])test_vector.toarray()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3廣告短信預(yù)測(cè)3.3

任務(wù)實(shí)施步驟3:預(yù)測(cè)。label_names=["ham","spam"]y_pred=nb_model.predict(test_vector)result=label_names[y_pred[0]]print("預(yù)測(cè)結(jié)果為:%s"%(result))3廣告短信預(yù)測(cè)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:小結(jié)密度圖矩陣和熱力圖能幫助理解數(shù)據(jù)分布。處理文本文件過多時(shí),可以先創(chuàng)建文件處理函數(shù)進(jìn)行數(shù)據(jù)合并。文本輸入貝葉斯模型前需要經(jīng)過文本向量化,把文本轉(zhuǎn)化為數(shù)字。One-hot編碼對(duì)每段話分詞后,找到每個(gè)單詞的編號(hào),建立特征向量。貝葉斯分類算法經(jīng)常用于預(yù)測(cè)文本的類型。3廣告短信預(yù)測(cè)習(xí)題六一選擇題1.在Pandas中,describe()函數(shù)不能得到的統(tǒng)計(jì)值為()。A.平均值 B.中位數(shù)C.眾數(shù) D.最大值2.以下相關(guān)系數(shù)中,錯(cuò)誤的是()。A.0.2 B.0.88C.0.36 D.1.53.在列表的末尾添加元素,可以使用()。A.append B.extendC.add D.concatenate一選擇題4.利用sns中的heatmap()繪制熱力圖時(shí),用來控制顏色列表的是()。A.data B.cmapC.vmax D.square5.貝葉斯模型通常用來進(jìn)行()。A.回歸 B.聚類C.降維 D.分類習(xí)題六二填空題1.利用.iloc()選取除了第一列以外的列的數(shù)據(jù),可以使用()。2.去掉字符串兩邊的空格,可使用函數(shù)()。3.計(jì)算相關(guān)系數(shù),可使用函數(shù)()。習(xí)題六三

操作題passexam.csv包含期末考試前一周行為的樣本,有三種行為:打游戲、通宵聊天、學(xué)習(xí),標(biāo)簽為期末考試是否掛科(0:不掛科,1:不掛科)。完成下面任務(wù):(1)用“通宵聊天”的中位數(shù)填充該列的缺失值;(2)劃分80%數(shù)據(jù)建立訓(xùn)練集,20%數(shù)據(jù)建立測(cè)試集;(3)建立高斯貝葉斯、多項(xiàng)式貝葉斯兩個(gè)模型,并比較其在測(cè)試集上的準(zhǔn)確率。習(xí)題六數(shù)據(jù)觀察數(shù)據(jù)清洗數(shù)據(jù)轉(zhuǎn)換SVM模型訓(xùn)練SVM模型預(yù)測(cè)參考書目《機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動(dòng)式教程》基于支持向量機(jī)的分類預(yù)測(cè)模塊7機(jī)器學(xué)習(xí)技術(shù)目錄乳腺癌預(yù)測(cè)手寫數(shù)字識(shí)別傳感器連通預(yù)測(cè)小結(jié)習(xí)題七基于支持向量機(jī)的分類預(yù)測(cè)模塊7機(jī)器學(xué)習(xí)技術(shù)乳腺癌(breastcarcinoma,BC)是女性最常見的惡性腫瘤之一,據(jù)資料統(tǒng)計(jì),發(fā)病率占全身各種惡性腫瘤的7-10%,因此早期發(fā)現(xiàn)及治療非常重要,對(duì)其檢測(cè)的關(guān)鍵挑戰(zhàn)是如何將腫瘤分為惡性(癌性)或良性(非癌性)。1.1任務(wù)描述1

乳腺癌預(yù)測(cè)breast-cancer-kaggle.csv來自Kaggle網(wǎng)站提供的威斯康星州乳腺癌(診斷)數(shù)據(jù),有569條癌癥病人檢測(cè)樣本,其中惡性樣本212條、良性樣本357條,每個(gè)樣本有32個(gè)字段。詳細(xì)的字段描述見下表。1.1任務(wù)描述1

乳腺癌預(yù)測(cè)字段類型允許為空標(biāo)簽?例子idint否否842302diagnosis(診斷結(jié)果)str否是M:Malignant(惡性)B:Benign(良性)radius_mean/se/worst(半徑平均、標(biāo)準(zhǔn)差、最差)float否否17.99texture_mean(紋理平均、標(biāo)準(zhǔn)差、最差)float否否10.38perimeter_mean(周邊平均、標(biāo)準(zhǔn)差、最差)float否否122.80area_mean(面積平均、標(biāo)準(zhǔn)差、最差)float否否1001.0smoothness_mean(平滑度平均、標(biāo)準(zhǔn)差、最差)float否否0.11840compactness_mean(緊密度平均、標(biāo)準(zhǔn)差、最差)float否否0.27760concavity_mean(凹度平均、標(biāo)準(zhǔn)差、最差)float否否0.3001concavepoints_mean(凸度平均、標(biāo)準(zhǔn)差、最差)float否否0.1471symmetry_mean(對(duì)稱性平均、標(biāo)準(zhǔn)差、最差)float否否0.2419fractal_dimension_mean(分形維數(shù)平均、標(biāo)準(zhǔn)差、最差)float否否0.07871要求使用SVM和breast-cancer-kaggle.csv建立分類模型,預(yù)測(cè)病人腫瘤是良性還是惡性。任務(wù)目標(biāo)1

乳腺癌預(yù)測(cè)1.2

任務(wù)分解import方式引入依賴的模塊檢查字段值和類型刪除任務(wù)無關(guān)或冗余的字段依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)清洗從探查數(shù)據(jù)內(nèi)容開始,通過數(shù)據(jù)清洗和數(shù)據(jù)轉(zhuǎn)換加工原始數(shù)據(jù),使用SVM模型找到?jīng)Q策函數(shù),最后用實(shí)例解析SVM算法原理。1.2

任務(wù)分解文本轉(zhuǎn)換到數(shù)值;數(shù)據(jù)集切分為訓(xùn)練集和測(cè)試集;實(shí)施標(biāo)準(zhǔn)化轉(zhuǎn)換、歸一化轉(zhuǎn)換和降維在訓(xùn)練集上訓(xùn)練SVM模型不同分布的人工數(shù)據(jù)集可視化SVM決策函數(shù)和樣本的空間分布,理解SVM算法思想和超參數(shù)數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練SVM實(shí)例解析接上1

乳腺癌預(yù)測(cè)1.3

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

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟2:導(dǎo)入依賴庫。importpandasaspdimportnumpyasnpfromsklearn.svmimportSVCfromsklearn.model_selectionimporttrain_test_splitimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearn.preprocessingimportStandardScaler,Normalizer,LabelEncoder1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施fromsklearn.decompositionimportPCAfromsklearn.metricsimportroc_auc_score,roc_curve,accuracy_scorefromsklearn.treeimportDecisionTreeClassifierfromsklearn.datasets._samples_generatorimportmake_blobs,make_circles接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施1.3.2數(shù)據(jù)探查步驟1:定義2級(jí)標(biāo)題。##<fontcolor="black">數(shù)據(jù)探查</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟2:讀入數(shù)據(jù)集文件到DataFrame對(duì)象。df_data=pd.read_csv("../data/breast-cancer-kaggle.csv")df_data.shape運(yùn)行結(jié)果如下:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟3:檢查前5個(gè)樣本。df_data.head()運(yùn)行結(jié)果如下:diagnoisis(標(biāo)簽):M(惡性),B(良性)1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟4:查看數(shù)據(jù)類型。df_()運(yùn)行結(jié)果如下:從上面的輸出可以看出,數(shù)據(jù)集有569條樣本,每個(gè)樣本有32個(gè)字段。其中字段”id”和預(yù)測(cè)無關(guān),可以刪除。1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施1.3.3數(shù)據(jù)清洗步驟1:定義2級(jí)標(biāo)題。#<fontcolor=“black”>數(shù)據(jù)清洗</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟2:刪除"id"列。all_data=df_data.drop("id",axis=1)all_data.head()運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

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

乳腺癌預(yù)測(cè)3.3

任務(wù)實(shí)施步驟2:“diagnosis”字段從文本轉(zhuǎn)換到數(shù)值。le=LabelEncoder()all_data["diagnosis"]=le.fit_transform(all_data["diagnosis"])all_()運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟3:拆分出特征和標(biāo)簽。X=all_data.iloc[:,1:].valuesy=all_data.iloc[:,0].valuesX.shape,y.shape運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟4:數(shù)據(jù)集拆分成訓(xùn)練集和測(cè)試集,測(cè)試集占30%。X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)X_train.shape,X_test.shape,y_train.shape,y_test.shape運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟4:數(shù)據(jù)集拆分成訓(xùn)練集和測(cè)試集,測(cè)試集占20%。X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)X_train.shape,X_test.shape,y_train.shape,y_test.shape運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施,其中x是特征值,xmean是特征平均值,xstd是特征標(biāo)準(zhǔn)偏差。scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)X_train[0,0:5],X_train_scaled[0][0:5]1

乳腺癌預(yù)測(cè)步驟5:調(diào)用StandardScaler類標(biāo)準(zhǔn)化特征,特征標(biāo)準(zhǔn)化后服從(0,1)正態(tài)分布。標(biāo)準(zhǔn)化公式:

1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)運(yùn)行結(jié)果:,其中x是特征值,|X|是樣本向量大小。步驟6:調(diào)用Normalizer類歸一化特征,特征歸一化后樣本向量大小為1。歸一化公式:

1.3

任務(wù)實(shí)施normalizer=Normalizer()X_train_normalized=normalizer.fit_transform(X_train_scaled)X_test_normalized=normalizer.transform(X_test_scaled)X_train_normalized[0][0:5]運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施pca=PCA(n_components=20,random_state=51592)X_train_decomposed=pca.fit_transform(X_train_normalized)X_test_decomposed=pca.transform(X_test_normalized)X_train_normalized.shape,X_train_decomposed.shape1

乳腺癌預(yù)測(cè)步驟7:調(diào)用PCA類降低數(shù)據(jù)維度,避免不相關(guān)特征帶來過擬合問題。運(yùn)行結(jié)果:1.3

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

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟2:在訓(xùn)練集上訓(xùn)練SVM模型。svm_model=SVC(kernel="linear",random_state=2)svm_model.fit(X_train_decomposed,y_train)運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟3:計(jì)算測(cè)試準(zhǔn)確率。y_test_pred=svm_model.predict(X_test_decomposed)test_score=accuracy_score(y_test,y_test_pred)"準(zhǔn)確率:{:.2f}".format(test_score*100)運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟4:計(jì)算置信度(樣本到?jīng)Q策邊界的距離)。大于0預(yù)測(cè)為1,小于0預(yù)測(cè)為0,越大或越小表示預(yù)測(cè)結(jié)果越確定。deci=svm_model.decision_function(X_test_decomposed)(deci>0).sum()==(y_test_pred==1).sum()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:上面的結(jié)果表明deci>0和y_test_pred==1等價(jià)。1

乳腺癌預(yù)測(cè)支持向量機(jī)支持向量機(jī)(SupportVectorMachine,SVM)的基本原理:尋找一個(gè)分類器使得超平面和最近的數(shù)據(jù)點(diǎn)之間的分類邊緣(超平面和最近的數(shù)據(jù)點(diǎn)之間的間隔被稱為分類邊緣)最大。SVM算法通常認(rèn)為分類邊緣越大,平面越優(yōu),具有“最大間隔”的決策面就是SVM要尋找的最優(yōu)解。最優(yōu)解對(duì)應(yīng)兩側(cè)虛線要穿過的樣本點(diǎn),稱為“支持向量”。支持向量機(jī)kernel=”linear”效果不好時(shí)再嘗試kernel=“rbf”,也可以用GridSearchCV嘗試其它的kernel。Sklearn庫的SVC類實(shí)現(xiàn)了SVM模型,定義如下:classsklearn.svm.SVC(C=1.0,kernel='rbf',gamma='scale',class_weight=None,**kargs)參數(shù)C:int,默認(rèn)值1.0懲罰系數(shù)。一般需要通過交叉驗(yàn)證選擇一個(gè)合適的C。kernel:默認(rèn)值rbf

核函數(shù)。四種選擇:”linear”(線性),“poly”(多項(xiàng)式),“rbf”(高斯),“sigmoid”。gamma:float,默認(rèn)值auto。核函數(shù)參數(shù)。kernel=“l(fā)inear”時(shí)不起作用。class_weight:float

樣本權(quán)重。訓(xùn)練集中某類樣本數(shù)量過多時(shí),建議設(shè)置為“balanced”。如果樣本類別分布沒有明顯的偏移,忽略這個(gè)參數(shù)。1.3

任務(wù)實(shí)施1.3.6SVM實(shí)例解析SVM根據(jù)數(shù)據(jù)與決策函數(shù)的最大間隔選擇決策函數(shù)。根據(jù)線性可分和線性不可分2種情況,示例SVM算法的設(shè)計(jì)思路。步驟1:定義2級(jí)標(biāo)題。##<fontcolor="black">SVM實(shí)例解析</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施步驟2:如果數(shù)據(jù)集可以用線性分類器劃分,稱為線性可分。定義3級(jí)標(biāo)題。###<fontcolor="black">線性可分</font>運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)步驟3:定義4級(jí)標(biāo)題。####<fontcolor="black">硬間隔</font>1.3

任務(wù)實(shí)施運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)步驟4:構(gòu)造模擬數(shù)據(jù)。X,y=make_blobs(n_samples=60,centers=2,cluster_std=0.4,random_state=0)plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)1.3

任務(wù)實(shí)施運(yùn)行結(jié)果:1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟5:可視化樣本和分類器(用函數(shù)表示)的最大間隔(分類器和樣本邊界的距離)。#Matplotlib支持中文字符mpl.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#畫樣本plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)1.3

任務(wù)實(shí)施#畫函數(shù)x_fit=np.linspace(0,3,50)y_1=1*x_fit+0.8plt.plot(x_fit,y_1,'-c)#畫邊距plt.fill_between(x_fit,y_1-0.6,y_1+0.6,edgecolor='none',color='#AAAAAA',alpha=0.4)接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施#畫函數(shù)y_2=-0.3*x_fit+3plt.plot(x_fit,y_2,'-k')#畫邊距plt.fill_between(x_fit,y_2-0.4,y_2+0.4,edgecolor='none',color='#AAAAAA',alpha=0.4)接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施運(yùn)行結(jié)果如下:從圖中看出,藍(lán)色線與數(shù)據(jù)集最大間隔大于黑色線的,因此藍(lán)色線代表的函數(shù)更優(yōu)。1

乳腺癌預(yù)測(cè)支持向量機(jī)提供了在眾多可能的分類器之間進(jìn)行選擇的原則,確保對(duì)未知數(shù)據(jù)集具有更高的泛化性。1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟6:訓(xùn)練SVM分類器。svm_model=SVC(kernel='linear')svm_model.fit(X,y)運(yùn)行結(jié)果:1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟7:準(zhǔn)備SVM分類器參數(shù)。#最佳函數(shù)w=svm_model.coef_[0]b=svm_ercept_[0]a=-w[0]/w[1]y_3=a*x_fit-b/w[1]1.3

任務(wù)實(shí)施#最大邊距下界b_down=svm_model.support_vectors_[0]y_down=a*x_fit+b_down[1]-a*b_down[0]#最大邊距上界b_up=svm_model.support_vectors_[-1]y_up=a*x_fit+b_up[1]-a*b_up[0]接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟8:可視化樣本和線性SVM的最大間隔。#畫散點(diǎn)圖plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)#畫函數(shù)plt.plot(x_fit,y_3,'-c')#畫邊距plt.fill_between(x_fit,y_down,y_up,edgecolor='none',color='#AAAAAA',alpha=0.4)1.3

任務(wù)實(shí)施#畫支持向量plt.scatter(svm_model.support_vectors_[:,0],svm_model.support_vectors_[:,1],edgecolor='b',s=80,facecolors='none')接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施運(yùn)行結(jié)果如下:帶藍(lán)邊的點(diǎn)是距離SVM分類器最近的點(diǎn),稱之為支持向量。1

乳腺癌預(yù)測(cè)可以看出,SVM分類器有著和數(shù)據(jù)集盡量大的最大間隔。1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟9:定義4級(jí)標(biāo)題。####<fontcolor="black">軟間隔</font>運(yùn)行結(jié)果:軟間隔相比于硬間隔而言,允許個(gè)別樣本出現(xiàn)在間隔帶中。如果沒有一個(gè)原則進(jìn)行約束,滿足軟間隔的分類器就會(huì)出現(xiàn)很多條。SVC對(duì)分錯(cuò)的數(shù)據(jù)進(jìn)行懲罰,參數(shù)C就是懲罰參數(shù)。懲罰參數(shù)越小,容忍性就越大。1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟10:構(gòu)造離散度更大的模擬數(shù)據(jù)。X,y=make_blobs(n_samples=60,centers=2,cluster_std=0.9,random_state=0)plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)運(yùn)行結(jié)果:1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟11:可視化SVM模型(C=1)。svm_model=SVC(kernel='linear',C=1)svm_model.fit(X,y)#最佳函數(shù)w=svm_model.coef_[0]b=svm_ercept_[0]a=-w[0]/w[1]x_fit=np.linspace(-1.5,4,50)y_3=a*x_fit-b/w[1]1.3

任務(wù)實(shí)施#最大邊距下界b_down=svm_model.support_vectors_[0]y_down=a*x_fit+b_down[1]-a*b_down[0]#最大邊距上界b_up=svm_model.support_vectors_[-1]y_up=a*x_fit+b_up[1]-a*b_up[0]#畫散點(diǎn)圖plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施#畫函數(shù)plt.plot(x_fit,y_3,'-c')#畫邊距plt.fill_between(x_fit,y_down,y_up,edgecolor='none',color='#AAAAAA',alpha=0.4)#畫支持向量plt.scatter(svm_model.support_vectors_[:,0],svm_model.support_vectors_[:,1],edgecolor='black',s=80,facecolors='none')接上1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施運(yùn)行結(jié)果如下:懲罰參數(shù)C=0.2時(shí),SVM會(huì)更具包容性,從而兼容更多的錯(cuò)分樣本。1

乳腺癌預(yù)測(cè)1.3

任務(wù)實(shí)施1

乳腺癌預(yù)測(cè)步驟12:進(jìn)一步放松樣本出現(xiàn)在間隔帶的限制,可視化SVM模型(C=0.2)。svm_model=SVC(kernel='linear',C=0.2)svm_model.fit(X,y)#最佳函數(shù)w=svm_model.coef_[0]b=svm_ercept_[0]a=-w[0]/w[1]y_3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論