機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊8、9 基于K-均值的聚類、基于集成學(xué)習(xí)的分類預(yù)測_第1頁
機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊8、9 基于K-均值的聚類、基于集成學(xué)習(xí)的分類預(yù)測_第2頁
機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊8、9 基于K-均值的聚類、基于集成學(xué)習(xí)的分類預(yù)測_第3頁
機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊8、9 基于K-均值的聚類、基于集成學(xué)習(xí)的分類預(yù)測_第4頁
機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程-課件 模塊8、9 基于K-均值的聚類、基于集成學(xué)習(xí)的分類預(yù)測_第5頁
已閱讀5頁,還剩170頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)轉(zhuǎn)換PCA降維K-均值模型訓(xùn)練聚類評價不失真壓縮圖像參考書目《機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》基于K-均值的聚類模塊8機器學(xué)習(xí)技術(shù)目錄NBA球員分類地區(qū)消費分類圖像矢量量化小結(jié)習(xí)題八基于K-均值的聚類任務(wù)模塊8機器學(xué)習(xí)技術(shù)找到NBA球員在過去一個賽季的統(tǒng)計數(shù)據(jù)。有286位球員球場上的各方面表現(xiàn),使用K-均值算法劃分球員到簇,并定義簇的具體分類。詳細的字段描述見下表。1.1任務(wù)描述1.NBA球員分類1.1任務(wù)描述要求使用K-均值算法聚類players.csv中的286名球員,分析簇代表的球員特點。任務(wù)目標字段類型允許為空標簽?例子排名int否是1球員str否否詹姆斯-哈登球隊str否否火箭得分float否否31.9命中-出手str否否9.60-21命中率float否否0.45399999999999996命中-三分str否否4.20-10.70三分命中率float否否0.397命中-罰球str否否8.50-9.90罰球命中率float否否0.861場次int否否30上場時間float否否36.11.NBA球員分類1.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame,檢測空值和數(shù)據(jù)分布特征歸一化到(0,1)區(qū)間依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換從探查數(shù)據(jù)內(nèi)容開始,通過數(shù)據(jù)清洗和數(shù)據(jù)轉(zhuǎn)換加工原始數(shù)據(jù),使用輪廓系數(shù)評價聚類性能,找到K-均值算法的最優(yōu)K值。1.NBA球員分類1.2

任務(wù)分解輪廓系數(shù)評價K-均值模型性能,找到最優(yōu)K值最優(yōu)K值訓(xùn)練的模型劃分球員,可視化數(shù)據(jù)分布觀察不同簇樣本的數(shù)據(jù)分布,指定簇到具體的分類參數(shù)查找聚類可視化簇分析接上1.NBA球員分類1.3

任務(wù)實施1.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportseabornassbnimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportminmax_scalefromsklearn.clusterimportKMeansfromsklearn.metricsimportsilhouette_scoreimportnumpyasnp按“SHIFT+Enter”,檢查輸出無異常。1.NBA球員分類1.3

任務(wù)實施1.3.2數(shù)據(jù)觀察文件讀入DataFrame對象后,需要觀察字段內(nèi)容和空值。步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟2:檢查前5個樣本。players=pd.read_csv("../data/players.csv")players.head()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟3:查看特征是否包含空值。players.isnull().sum()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟4:設(shè)置Matplotlib正常顯示中文字符和負號。plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False步驟5:可視化數(shù)據(jù)分布。sbn.lmplot(x="得分",y="命中率",data=players,fit_reg=False,scatter_kws={"alpha":0.8,"color":"steelblue"})1.NBA球員分類1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:從圖中看出,左下樣本分布比較集中,可以歸為一類;左上樣本密度低,歸為一類;右邊樣本密度也不高,歸為1類。因此K-均值算法的K值設(shè)為3。1.NBA球員分類K-均值K-均值算法流程K-均值算法的基本思想是:以空間中K個點為中心進行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結(jié)果,大概就是這個意思,“物以類聚、人以群分”。具體流程如下:步驟1:從N個樣本數(shù)據(jù)中隨機選取K個對象,作為初始的聚類中心;步驟2:分別計算每個樣本點到各個聚類中心的距離,并逐個分配到距離其最近的簇中;步驟3:所有對象分配完成后,更新K個聚類中心位置,聚類中心定義為簇內(nèi)所有對象在各個維度的均值;步驟4:與前一次計算得到的K個聚類中心比較,如果聚類中心發(fā)生變化,轉(zhuǎn)至步驟2,否則轉(zhuǎn)至步驟5;步驟5:當(dāng)類中心不再發(fā)生變化,停止執(zhí)行。下圖演示了2輪K-均值算法的迭代過程,最終聚類趨于穩(wěn)定。K-均值Sklearn庫的KMeans類提供了K-均值算法接口,定義如下:classsklearn.cluster.KMeans(n_clusters=8,init='k-means++',**kargs)參數(shù)n_clusters:int,默認值8聚類數(shù)。init:{‘k-means++’,‘random’},默認值=‘k-means++’初始化方法。通常n_clusters需要可視化方法分析聚類結(jié)果,評價后選擇最佳值。K-均值1.3

任務(wù)實施1.3.3數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:步驟2:轉(zhuǎn)換“得分”、“罰球命中率”、“命中率”、“三分命中率”字段到[0,1]區(qū)間。對于數(shù)據(jù)矩陣X,歸一化公式如下:

1.NBA球員分類1.3

任務(wù)實施X_scaled=minmax_scale(players[['得分','罰球命中率','命中率','三分命中率']])X_scaled按“SHIFT+Enter”,運行結(jié)果如下:從結(jié)果可以看出,這4個字段值變換到[0,1]區(qū)間。1.NBA球員分類1.3

任務(wù)實施1.3.4參數(shù)查找步驟1:定義2級標題。##<fontcolor="black">參數(shù)查找</font>按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟2:初始化不同n_clusters參數(shù)值的K-均值模型,用輪廓系數(shù)評價模型性能,找到最優(yōu)參數(shù)。n_clusters對應(yīng)K-均值算法的K。S=[]#存儲不同簇的輪廓系數(shù)K=range(2,11)forkinrange(2,11): kmeans=KMeans(n_init="auto",init="k-means++",n_clusters=k,random_state=0) kmeans.fit(X_scaled)1.NBA球員分類1.3

任務(wù)實施 labels=kmeans.labels_ #計算輪廓系數(shù) sil_score=silhouette_score(X_scaled,labels,metric='euclidean') S.append(sil_score)接上KMenas為什么設(shè)置init=”k-means++”?K-Means++是為K-均值算法選擇初始值(或“種子”)的算法,避免標準K-均值算法有時發(fā)現(xiàn)的較弱聚類。KMeans設(shè)置init=”k-means++”將在初始化時啟用K-Means++算法選擇有利于聚類的聚類中心。1.NBA球員分類輪廓系數(shù)輪廓系數(shù)(Silhouette)是一個衡量一個樣本與它所屬聚類相較于其它聚類的相似程度。取值范圍-1到1,值越大表明這個結(jié)點更匹配其屬聚類而不與相鄰的聚類匹配。如果大多數(shù)樣本都有很高的輪廓系數(shù)值,那么聚類適當(dāng)。若許多點都有低或者負的值,說明K過大或過小。在Sklearn庫中,silhouette_score函數(shù)輸入數(shù)據(jù)集和分類,輸出所有樣本的平均輪廓系數(shù)。sklearn.metrics.silhouette_score(X,labels,**kwds)參數(shù)X:array樣本之間的成對距離數(shù)組或特征數(shù)組。labels:array每個樣本的預(yù)測標簽。1.3

任務(wù)實施步驟3:可視化K值對聚類的性能影響。#設(shè)置繪圖風(fēng)格plt.style.use('ggplot')#繪制K的個數(shù)與輪廓系數(shù)的關(guān)系plt.plot(K,S,'b*-')plt.xlabel('簇的個數(shù)')plt.ylabel('輪廓系數(shù)')1.NBA球員分類1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:表明K=3聚類效果最好。1.NBA球員分類1.3

任務(wù)實施1.3.5聚類可視化步驟1:定義2級標題。##<fontcolor="black">聚類可視化</font>按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟2:將球員數(shù)據(jù)集分成3類。kmeans=KMeans(n_init="auto",init="k-means++",n_clusters=3,random_state=0)kmeans.fit(X_scaled)按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟3:找到聚類中心。#將聚類結(jié)果標簽插入到數(shù)據(jù)集players中players['cluster']=kmeans.labels_centers=[]#存儲簇中心foriinplayers.cluster.unique(): centers.append(players.loc[players.cluster==i,['得分','罰球命中率','命中率','三分命中率']].mean()) #將列表轉(zhuǎn)換為數(shù)組,便于后面的索引取數(shù) centers=np.array(centers)1.NBA球員分類1.3

任務(wù)實施步驟4:可視化聚類結(jié)果。#繪制散點圖sbn.lmplot(x='得分',y='命中率',hue='cluster',data=players,markers=['^','s','o'],fit_reg=False,scatter_kws={'alpha':0.8},legend=False)#添加簇中心plt.scatter(centers[:,0],centers[:,2],c='k',marker='*',s=180)plt.xlabel('得分')plt.ylabel('命中率')1.NBA球員分類1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:從聚類結(jié)果可以看出,聚類中心點位于簇的中心位置。1.NBA球員分類1.3

任務(wù)實施1.3.6簇分析步驟1:定義2級標題。##<fontcolor="black">簇分析</font>按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟2:統(tǒng)計各簇中的樣本數(shù)。pd.Series(kmeans.labels_).value_counts()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟3:第1類球員得分低但命中率高,推測為上場及進攻次數(shù)較少的新秀。res0Series=pd.Series(kmeans.labels_)res0=res0Series[res0Series.values==0]players.iloc[res0.index].head()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟4:第2類球員得分低且命中率也不高,推測為得分能力不強的組織型球員。res0Series=pd.Series(kmeans.labels_)res0=res0Series[res0Series.values==1]players.iloc[res0.index].head()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類1.3

任務(wù)實施步驟5:第3類球員得分高、命中率高,推測為球隊的進攻核心。res0Series=pd.Series(kmeans.labels_)res0=res0Series[res0Series.values==2]players.iloc[res0.index].head()按“SHIFT+Enter”,運行結(jié)果如下:1.NBA球員分類知識點K-均值算法優(yōu)缺點優(yōu)點1)算法思想簡單,收斂速度快;2)主要需要調(diào)參的參數(shù)僅僅是K;3)算法的可解釋度比較強。缺點1)采用迭代方法,聚類結(jié)果往往收斂于局部最優(yōu)而得不到全局最優(yōu)解;2)對非凸形狀的類簇識別效果差;3)易受噪聲、邊緣點、孤立點影響;4)可處理的數(shù)據(jù)類型有限,對于高維數(shù)據(jù)對象的聚類效果不佳。根據(jù)國家統(tǒng)計局發(fā)布的2019年全國31個?。ㄊ?、自治區(qū))居民人均消費支出數(shù)據(jù),涵蓋食品煙酒、衣著、居住、生活用品及服務(wù)、交通通信、教育文化娛樂、醫(yī)療保健等方面,使用K-均值算法劃分地區(qū)到簇,分析每個簇的具體含義。詳細的字段描述見下表。2.1任務(wù)描述2.地區(qū)消費分類2.1任務(wù)描述根據(jù)各地區(qū)的消費數(shù)據(jù),使用K-均值算法聚類31個省市,分析簇代表的地區(qū)特點。任務(wù)目標2.地區(qū)消費分類字段類型允許為空標簽?例子地區(qū)str否是北京消費支出(元)float否否43038.3食品煙酒(元)float否否8488.5衣著(元)float否否8488.5居?。ㄔゝloat否否8488.5生活用品及服務(wù)float否否8488.5交通通信(元)float否否8488.5教育文化娛樂(元)float否否8488.5醫(yī)療保健(元)float否否8488.5其他(元)float否否8488.52.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame對象,觀察特征值刪除與聚類無關(guān)的字段“地區(qū)”依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)清洗從探查數(shù)據(jù)內(nèi)容開始,通過數(shù)據(jù)清洗和數(shù)據(jù)轉(zhuǎn)換加工原始數(shù)據(jù),使用輪廓系數(shù)評價聚類性能,找到K-均值算法的最優(yōu)K值。2.地區(qū)消費分類2.2

任務(wù)分解特征歸一化到(0,1)區(qū)間訓(xùn)練和選擇降維前后的K-均值模型,分析簇代表的地區(qū)用圖表展示樣本分布和所屬的簇,分析聚類結(jié)果數(shù)據(jù)轉(zhuǎn)換聚類可視化分析接上2.地區(qū)消費分類2.3

任務(wù)實施2.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportminmax_scale,StandardScalerfromsklearn.decompositionimportPCAfromsklearn.clusterimportKMeans,DBSCANfromsklearn.metricsimportsilhouette_scoreimportnumpyasnp2.地區(qū)消費分類2.3

任務(wù)實施2.3.2數(shù)據(jù)觀察文件讀入DataFrame對象后,觀察字段內(nèi)容。步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:檢查前5個樣本。rawdata_df=pd.read_csv("../data/2019各省居民平均消費支出.csv")rawdata_df.head()2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.3.3數(shù)據(jù)清洗步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)清洗</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:刪除與聚類無關(guān)的字段“地區(qū)”。X=rawdata_df.drop(["地區(qū)"],axis=1)X.head()2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.3.4數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:轉(zhuǎn)換字段值到[0,1]區(qū)間。X_scaled=minmax_scale(X)X_scaled[0:5,:]2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:從結(jié)果可以看出,現(xiàn)在所有字段的值位于[0,1]區(qū)間。2.3

任務(wù)實施2.3.5聚類步驟1:定義2級標題。##<fontcolor="black">聚類</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:用數(shù)據(jù)集的所有字段訓(xùn)練K-均值模型,評價聚類的平均輪廓系數(shù)。kmeans=KMeans(n_init="auto",init="k-means++",n_clusters=3,random_state=0)kmeans.fit(X_scaled)labels=kmeans.labels_silhouette_score(X_scaled,labels,metric='euclidean')2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施步驟3:降低數(shù)據(jù)維度到2。pca=PCA(n_components=2,random_state=51592)X_decomposed=pca.fit_transform(X_scaled)2.地區(qū)消費分類步驟4:數(shù)據(jù)降維后再次測試K-Means聚類模型的性能。kmeans=KMeans(n_init="auto",init="k-means++",n_clusters=3,random_state=0)kmeans.fit(X_decomposed)2.3

任務(wù)實施labels=kmeans.labels_silhouette_score(X_decomposed,labels,metric='euclidean')接上2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:比較降維前后2次聚類模型的輪廓系數(shù),可以發(fā)現(xiàn)降維后的聚類模型效果更好,因此下面就使用降維后的聚類模型。2.3

任務(wù)實施步驟5:數(shù)據(jù)集添加聚類標簽。rawdata_df["類"]=labelsrawdata_df.sort_values(by="類",axis=0)#相同標簽樣本放在一起2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.地區(qū)消費分類從上面結(jié)果看出,按照平均消費支出全國地區(qū)分為3類:(1).特大型城市:北京、上海。(2).經(jīng)濟發(fā)達省市:廣東、浙江、江蘇、天津。(3).發(fā)展中省市:河南、青海、甘肅等。2.3

任務(wù)實施2.3.6可視化分析步驟1:定義2級標題。##<fontcolor="black">可視化分析</font>按“SHIFT+Enter”,運行結(jié)果如下:2.地區(qū)消費分類2.3

任務(wù)實施步驟2:獲取各類樣本的索引。class0_idx=rawdata_df[rawdata_df["類"]==0].index.valuesclass1_idx=rawdata_df[rawdata_df["類"]==1].index.valuesclass2_idx=rawdata_df[rawdata_df["類"]==2].index.values2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.地區(qū)消費分類步驟3:設(shè)置Matplotlib正常顯示中文字符和負號。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False步驟4:可視化聚類結(jié)果。plt.scatter(X_decomposed[class0_idx,0],X_decomposed[class0_idx,1],marker='.',color='c',s=50,label="發(fā)展中省市")plt.scatter(X_decomposed[class1_idx,0],X_decomposed[class1_idx,1],marker='o',color='g',s=50,label='特大省市')2.3

任務(wù)實施plt.scatter(X_decomposed[class2_idx,0],X_decomposed[class2_idx,1],marker='v',color='r',s=50,label='經(jīng)濟發(fā)達省市')接上2.地區(qū)消費分類按“SHIFT+Enter”,運行結(jié)果如下:從聚類結(jié)果可以看出,3種樣本分別散布在不同區(qū)域。圖像有N個像素點,含有M種顏色。使用K-Means算法把N個像素點聚成K類,找出K個中心點。使用每個像素點所在的簇的中心點來覆蓋原有的顏色值。這樣,N個像素點帶有的M種顏色取值,就被壓縮了到K種顏色值。3.1任務(wù)描述3.圖像矢量量化給定一張彩色圖片,使用K-均值算法聚類像素點,像素點的顏色值用所屬簇的中心點值代替,比較分析壓縮后的圖片大小。任務(wù)目標3.2

任務(wù)分解import方式引入依賴的模塊圖片讀入Numpy對象,觀察像素類型、數(shù)據(jù)維度、取值范圍、顏色數(shù)等屬性像素值歸一化到(0,1)區(qū)間,數(shù)據(jù)轉(zhuǎn)換到2維空間依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換從探查數(shù)據(jù)內(nèi)容開始,通過數(shù)據(jù)轉(zhuǎn)換加工原始數(shù)據(jù),訓(xùn)練K-均值模型,用聚類中心值代替像素點的顏色值,可視化分析矢量量化結(jié)果。3.圖像矢量量化3.2

任務(wù)分解K-均值算法在像素點組成的數(shù)據(jù)集上訓(xùn)練聚類模型像素點的顏色值用所屬聚類的中心點值代替比較替換前后圖片的視覺效果和文件大小模型訓(xùn)練像素值替換可視化分析接上3.圖像矢量量化3.3

任務(wù)實施3.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansimportnumpyasnpfromsklearn.utilsimportshufflefromos.pathimportgetsize3.圖像矢量量化3.3

任務(wù)實施3.3.2數(shù)據(jù)觀察步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:圖片讀入Numpy對象,查看像素值類型、圖片大小、像素值范圍、顏色數(shù)等圖片特征。china=plt.imread('../data/china.jpg')print('像素值類型:',china.dtype)print('圖片大小:',china.shape)print('顏色最小值:{},顏色最大值:{}'.format(china.min(),china.max()))newimage=china.reshape((-1,3))print("圖片顏色數(shù):",pd.DataFrame(newimage).drop_duplicates().shape)3.圖像矢量量化3.3

任務(wù)實施3.圖像矢量量化按“SHIFT+Enter”,運行結(jié)果如下:步驟3:圖片保存到壓縮文件。np.savez_compressed("china.npz",pic=china)按“SHIFT+Enter”,在當(dāng)前目錄看到壓縮文件“china.npz”。3.3

任務(wù)實施3.3.3數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:轉(zhuǎn)換像素值到[0,1]區(qū)間。china=np.array(china,dtype=np.float64)/china.max()3.圖像矢量量化步驟3:3維矩陣轉(zhuǎn)換到2維空間。w,h,d=china.shapeimage_array=np.reshape(china,(-1,d))按“SHIFT+Enter”,檢查輸出無異常。按“SHIFT+Enter”,檢查輸出無異常。3.3

任務(wù)實施3.3.4模型訓(xùn)練步驟1:定義2級標題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:使用K-Means算法在像素點上訓(xùn)練聚類模型。kmean_model=KMeans(n_clusters=64,n_init="auto",random_state=0)kmeans=kmean_model.fit(image_array)3.圖像矢量量化按“SHIFT+Enter”,檢查輸出無異常。3.3

任務(wù)實施3.3.5像素值替換步驟1:定義2級標題。##<fontcolor="black">像素值替換</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:K-Means模型預(yù)測每個像素點隸屬的聚類。labels=kmeans.predict(image_array)3.圖像矢量量化步驟3:像素點的顏色值用聚類中心值代替。image_kmeans=np.zeros((w*h,d))foriinrange(w*h):

image_kmeans[i]=kmeans.cluster_centers_[labels[i]]"K-Means矢量圖顏色數(shù):{}".format(pd.DataFrame(image_kmeans).drop_duplicates().shape)3.3

任務(wù)實施從結(jié)果可以看出,經(jīng)過像素值替換的K-Means矢量圖只有64種顏色。3.圖像矢量量化按“SHIFT+Enter”,運行結(jié)果如下:3.3

任務(wù)實施3.3.6可視化分析步驟1:定義2級標題。##<fontcolor="black">可視化分析</font>按“SHIFT+Enter”,運行結(jié)果如下:3.圖像矢量量化3.3

任務(wù)實施步驟2:恢復(fù)矢量圖到3維空間。image_kmeans=image_kmeans.reshape(w,h,d)*china.max()3.圖像矢量量化步驟3:保存矢量圖到壓縮文件。np.savez_compressed("china_kmeans.npz",pic=image_kmeans)print("原圖壓縮文件大小:{}".format(getsize("china.npz")))print("矢量圖壓縮文件大小:{}".format(getsize("china_kmeans.npz")))3.3

任務(wù)實施3.圖像矢量量化按“SHIFT+Enter”,運行結(jié)果如下:矢量圖只有64種顏色,信息量變少,因此產(chǎn)生的壓縮文件更小。步驟4:設(shè)置Matplotlib正常顯示中文字符和負號。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False3.3

任務(wù)實施步驟5:顯示原圖。china=np.load("china.npz")['pic']plt.title('原圖')plt.axis('off')plt.imshow(china)按“SHIFT+Enter”,運行結(jié)果如右圖:3.圖像矢量量化3.3

任務(wù)實施步驟6:顯示矢量圖。china_kmeans=np.load("china_kmeans.npz")['pic']plt.title('K-Means矢量圖')plt.axis('off')plt.imshow(china_kmeans)按“SHIFT+Enter”,運行結(jié)果如右圖:3.圖像矢量量化小結(jié)聚類是無監(jiān)督學(xué)習(xí),訓(xùn)練集樣本不帶有標簽。K-均值算法的K值選擇對聚類性能有較大影響。降低數(shù)據(jù)維度可能提升聚類性能。聚類使用輪廓系數(shù)評價聚類算法性能。簇的定義往往需要聚類后具體分析。圖像矢量量化減少了信息量但幾乎不影響圖片質(zhì)量。K-均值啟用K-Means++算法優(yōu)化初始中心點的選擇。習(xí)題八一選擇題1.輪廓系數(shù)英文名稱是()。A.Silkworm B.SilhouetteC.Silkindex D.ContourLine2.KMeans初始化參數(shù)init="k-means++"目的在于()。A.選擇符合數(shù)據(jù)分布的初始中心點 B.評價聚類性能C.加速聚類速度 D.定義聚類個數(shù)3.提升聚類性能的方法不包括()。A.選擇合適的K值 B.降低數(shù)據(jù)維度C.K值盡量大 D.K-Means++選擇初始中心點一選擇題4.矢量量化()。A.降低了圖像維度 B.提高了圖像維度C.改變了圖像大小 D.降低了圖像信息量5.minmax_scale函數(shù)()。A.計算樣本元素的最小值和最大值。B.轉(zhuǎn)換特征到一定區(qū)間。C.轉(zhuǎn)換特征服從高斯分布。D.轉(zhuǎn)換特征服從正態(tài)分布。習(xí)題八二填空題1.標準K-均值算法開始隨機選?。ǎ﹤€對象作為初始的聚類中心,然后計算每個對象與各個聚類中心之間的距離,把每個對象分配給距離它()的聚類中心。2.silhouette_score函數(shù)計算聚類結(jié)果的緊密度和分離度,取值范圍為(),-1表示聚類結(jié)果()、1表示(),-1到1之間表示不確定。3.矢量量化不改變特征的數(shù)量也不改變樣本的數(shù)量,只改變在這些特征下的樣本上的()。習(xí)題八習(xí)題八三

操作題案例2沒有搜索合適的K值,直接依賴經(jīng)驗設(shè)定K=3。補充代碼可視化不同K值的輪廓系數(shù),檢查K=3是否最優(yōu)。數(shù)據(jù)轉(zhuǎn)換投票法BaggingAdaBoost性能評價參考書目《機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》基于集成學(xué)習(xí)的分類預(yù)測模塊9機器學(xué)習(xí)技術(shù)目錄投票法融合多分類器Bagging提升分類器精度AdaBoost提升分類器精度小結(jié)習(xí)題九基于集成學(xué)習(xí)的分類預(yù)測模塊9機器學(xué)習(xí)技術(shù)癌癥是世界上女性最常見的癌癥。它占所有癌癥病例的25%,僅2015年就影響了210多萬人。當(dāng)乳房中的細胞開始生長失控時,它就開始了。這些細胞通常形成腫瘤,可以通過X射線看到,或者在乳房區(qū)域感覺到腫塊。對其檢測的關(guān)鍵挑戰(zhàn)是如何將腫瘤分為惡性(癌性)或良性(非癌性)。要求使用投票法融合多個分類器提升分類精度。詳細的字段描述見第7章。1.1任務(wù)描述1.投票法融合多分類器基于breast-cancer-kaggle.csv,先使用K-最近鄰、邏輯回歸、決策樹、貝葉斯、支持向量機單分類器建立模型,預(yù)測病人腫瘤是良性還是惡性,然后使用投票方法綜合單分類器模型提升預(yù)測精度。任務(wù)目標1.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame,抽樣檢查樣本,檢查屬性類型轉(zhuǎn)換到(0,1)區(qū)間的正態(tài)分布依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換從探查數(shù)據(jù)內(nèi)容開始,經(jīng)過數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)集分離,使用單分類器建立模型評估精度,然后采用投票方法融合多個模型預(yù)測腫瘤類別。1.投票法融合多分類器1.2

任務(wù)分解構(gòu)建單分類器模型在訓(xùn)練集上訓(xùn)練,在測試集上評估精度融合多個單分類器模型預(yù)測標簽單分類器訓(xùn)練投票法模型訓(xùn)練接上1.投票法融合多分類器1.3

任務(wù)實施1.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportnumpyasnpfromsklearn.svmimportSVCfromsklearnimportneighborsfromsklearn.linear_modelimportLogisticRegressionfromsklearn.treeimportDecisionTreeClassifierfromsklearn.naive_bayesimportGaussianNB1.投票法融合多分類器1.3

任務(wù)實施fromsklearn.ensembleimportVotingClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScaler,Normalizer,LabelEncoder1.投票法融合多分類器按“SHIFT+Enter”,檢查輸出無異常。接上1.3

任務(wù)實施1.3.2數(shù)據(jù)觀察文件讀入DataFrame對象后,需要觀察屬性值和類型。步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟2:把數(shù)據(jù)從文件讀入DataFrame對象。df_data=pd.read_csv("../data/breast-cancer-kaggle.csv",index_col="id")df_data.shape按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟3:檢查前5個樣本。df.head(5)按“SHIFT+Enter”,運行結(jié)果如下:diagnoisis:M(惡性),B(良性)1.投票法融合多分類器1.3

任務(wù)實施步驟4:查看每個字段的數(shù)據(jù)類型。df_()按“SHIFT+Enter”,運行結(jié)果如右圖。從結(jié)果看出,數(shù)據(jù)集共有569條樣本、31個字段。除標簽diagnosis外,其它30個字段都是float類型,30個特征分為mean(平均值)、se(標準方差)、worst(最差)3組。標簽diagnosis需要轉(zhuǎn)換到int。1.投票法融合多分類器1.3

任務(wù)實施1.3.3數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟2:標簽從文本轉(zhuǎn)換到索引型數(shù)值。le=LabelEncoder()df_data["diagnosis"]=le.fit_transform(df_data["diagnosis"])df_()按“SHIFT+Enter”,運行結(jié)果如右圖。1.投票法融合多分類器1.3

任務(wù)實施步驟3:DataFrame對象轉(zhuǎn)換到Numpy對象。X=df_data.iloc[:,1:].valuesy=df_data.iloc[:,0].valuesX.shape,y.shape按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟4:數(shù)據(jù)集分為2部分:訓(xùn)練集和測試集,測試集占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按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟5:轉(zhuǎn)換特征服從正態(tài)分布。轉(zhuǎn)換公式:scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)X_train_scaled[:2,:]1.投票法融合多分類器

,其中x是特征值,xmean是特征平均值,xstd是特征標準偏差。1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟6:轉(zhuǎn)換特征到[-1,1]區(qū)間。轉(zhuǎn)換公式:normalizer=Normalizer()X_train_norm=normalizer.fit_transform(X_train_scaled)X_test_norm=normalizer.transform(X_test_scaled)X_train_norm[0:2,:]1.投票法融合多分類器,其中x是特征值,|x|是樣本向量大小。

1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施1.3.4單分類器訓(xùn)練嘗試使用不同的分類器,在訓(xùn)練集上訓(xùn)練模型,比較在測試集上的模型性能步驟1:定義2級標題。##<fontcolor="black">單分類器訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟2:定義3級標題。###<fontcolor="black">K-最近鄰</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟3:在訓(xùn)練集上訓(xùn)練K-最近鄰模型。knn_clf=neighbors.KNeighborsClassifier(n_neighbors=5)knn_clf.fit(X_train_norm,y_train)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟4:評估K-最近鄰模型在測試集上的準確率。test_score=knn_clf.score(X_test_norm,y_test)“KNN準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施步驟5:定義3級標題。###<fontcolor="black">邏輯回歸</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟6:在訓(xùn)練集上訓(xùn)練邏輯回歸模型。log_clf=LogisticRegression(random_state=0)log_clf.fit(X_train_norm,y_train)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟7:評估邏輯回歸模型在測試集上的準確率。test_score=log_clf.score(X_test_norm,y_test)"邏輯回歸準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施步驟8:定義3級標題。###<fontcolor="black">決策樹</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟9:在訓(xùn)練集上訓(xùn)練決策樹模型。dt_clf=DecisionTreeClassifier(max_depth=5,random_state=0)dt_clf.fit(X_train_norm,y_train)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟10:評估決策樹模型在測試集上的準確率。test_score=dt_clf.score(X_test_norm,y_test)"決策樹準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施步驟11:定義3級標題。###<fontcolor="black">樸素貝葉斯</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟12:在訓(xùn)練集上訓(xùn)練貝葉斯模型。nb_clf=GaussianNB()nb_clf.fit(X_train_norm,y_train)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟13:評估貝葉斯模型在測試集上的準確率。test_score=nb_clf.score(X_test_norm,y_test)"樸素貝葉斯準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施步驟14:定義3級標題。###<fontcolor="black">支持向量機</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟15:在訓(xùn)練集上訓(xùn)練支持向量機模型。svm_clf=SVC(kernel='rbf',random_state=0)svm_clf.fit(X_train_norm,y_train)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟16:評估支持向量機模型在測試集上的準確率。test_score=svm_clf.score(X_test_norm,y_test)"SVM準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施1.3.5投票法模型訓(xùn)練融合多個單分類器預(yù)測結(jié)果,采用投票法決定最終標簽步驟1:定義2級標題。##<fontcolor="black">投票法模型訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器1.3

任務(wù)實施步驟2:定義3級標題。###<fontcolor="black">集成5種模型</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟3:在訓(xùn)練集上訓(xùn)練集成模型(K-最近鄰+邏輯回歸+決策樹+貝葉斯+SVM)。1.3

任務(wù)實施voting_clf=VotingClassifier(estimators=[('knn_clf',neighbors.KNeighborsClassifier(n_neighbors=5)),('log_clf',LogisticRegression(random_state=0)),('dt_clf',DecisionTreeClassifier(max_depth=5,random_state=0)),('nb_clf',GaussianNB()),('svm_clf',SVC(kernel='rbf',random_state=0))],voting='hard')voting_clf.fit(X_train_norm,y_train)1.投票法融合多分類器1.3

任務(wù)實施1.投票法融合多分類器按“SHIFT+Enter”,運行結(jié)果如下:test_score=voting_clf.score(X_test_norm,y_test)"集成5種模型準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:步驟4:評估測試集上的準確率。1.3

任務(wù)實施步驟2:定義3級標題。###<fontcolor="black">集成最優(yōu)模型</font>按“SHIFT+Enter”,運行結(jié)果如下:1.投票法融合多分類器步驟6:在訓(xùn)練集上訓(xùn)練2種性能接近的投票模型(邏輯回歸+SVM)。1.3

任務(wù)實施voting_clf=VotingClassifier(estimators=[('log_clf',LogisticRegression(random_state=0)),('svm_clf',SVC(kernel='rbf',random_state=0))],voting='hard')voting_clf.fit(X_train_norm,y_train)1.投票法融合多分類器按“SHIFT+Enter”,運行結(jié)果如下:1.3

任務(wù)實施1.投票法融合多分類器按“SHIFT+Enter”,運行結(jié)果如下:test_score=voting_clf.score(X_test_norm,y_test)"集成2種性能接近模型準確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運行結(jié)果如下:步驟7:評估測試集上的準確率。集成學(xué)習(xí)投票法投票法是一種遵循少數(shù)服從多數(shù)原則的集成學(xué)習(xí)模型,通過多個學(xué)習(xí)器的集成降低方差,從而提高模型的魯棒性。在理想情況下,投票法的預(yù)測效果應(yīng)當(dāng)優(yōu)于任何一個基學(xué)習(xí)器的預(yù)測效果。Sklearn庫的VotingClassifier類提供了投票法接口,定義如下:集成學(xué)習(xí)投票法classsklearn.ensemble.VotingClassifier(estimators,**kargs)參數(shù)estimators:列表一組基學(xué)習(xí)器。投票法在回歸模型與分類模型上均可使用。分類投票法又可以被劃分為硬投票與軟投票:(1)硬投票:預(yù)測結(jié)果是所有投票結(jié)果最多出現(xiàn)的類。(2)軟投票:預(yù)測結(jié)果是所有投票結(jié)果中概率和最大的類。實驗所用數(shù)據(jù)集來自威斯康星大學(xué)的癌癥診斷記錄,要求建立機器學(xué)習(xí)模型,預(yù)測病人患癌的概率。詳細的字段描述見模塊6的表6-1。2.1任務(wù)描述2.Bagging提升分類器精度基于breast-cancer-uci.data,先使用高斯貝葉斯模型擬合訓(xùn)練數(shù)據(jù),預(yù)測病人腫瘤是良性還是惡性,然后使用Bagging方法提升單分類器精度。任務(wù)目標2.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame,檢查索引、樣本、字段類型、空值等用平均值填充字段空值依賴庫導(dǎo)入數(shù)據(jù)觀察空值填充觀察數(shù)據(jù)后,填充缺失值,按照訓(xùn)練集和驗證集4:1比例切分數(shù)據(jù)集,先使用高斯貝葉斯模型預(yù)測腫瘤性質(zhì),進而采取Bagging方法提升單分類器精度。2.Bagging提升分類器精度2.2

任務(wù)分解數(shù)據(jù)轉(zhuǎn)換到Numpy對象在訓(xùn)練集上訓(xùn)練高斯貝葉斯模型,并在驗證集上評估模型精度數(shù)據(jù)轉(zhuǎn)換單分類器訓(xùn)練接上Bagging方法在訓(xùn)練集上訓(xùn)練多個高斯貝葉斯模型,預(yù)測時融合多個模型Bagging提升性能2.Bagging提升分類器精度2.3

任務(wù)實施2.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度2.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.naive_bayesimportGaussianNBfromsklearn.ensembleimportBaggingClassifier按“SHIFT+Enter”,檢查輸出無異常。2.Bagging提升分類器精度2.3

任務(wù)實施2.3.2數(shù)據(jù)觀察文件讀入DataFrame對象后,需要觀察屬性值和類型。步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度2.3

任務(wù)實施步驟2:把數(shù)據(jù)從文件讀入DataFrame對象。df=pd.read_csv("../data/breast-cancer-uci.data",header=0)df.shape按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟3:檢查“編號”字段的唯一性。df['編號'].nunique()2.3

任務(wù)實施按“SHIFT+Enter”,檢查輸出無異常。2.Bagging提升分類器精度從結(jié)果看出,“編號”字段值并不唯一,不能作為索引。步驟4:隨機觀察5個樣本。df.sample(5)按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.Bagging提升分類器精度步驟5:查看字段數(shù)據(jù)類型。()按“SHIFT+Enter”,運行結(jié)果如下:“裸核”字段類型不是int64,進一步觀察。2.3

任務(wù)實施2.Bagging提升分類器精度步驟6:檢查“裸核”字段的數(shù)據(jù)分布。df["裸核"].value_counts()發(fā)現(xiàn)有“?”代表未知值,需要用平均值代替。按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.3.3空值填充步驟1:定義2級標題。##<fontcolor="black">空值填充</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟2:用Numpy的缺省值nan替換"?"。df.loc[df["裸核"]=="?","裸核"]=np.nan2.3

任務(wù)實施步驟3:檢查替換結(jié)果。df.isnull().sum()按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度發(fā)現(xiàn)除”裸核”字段有16個空值外,其他字段都不包含空值。2.3

任務(wù)實施步驟4:計算“裸核”字段的平均值。bare_nuclei_mean=df["裸核"].median()bare_nuclei_mean按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟5:用平均值替換空值。df.loc[df["裸核"].isnull(),"裸核"]=bare_nuclei_mean2.3

任務(wù)實施步驟6:檢查替換結(jié)果。df.isnull().sum()按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度2.3

任務(wù)實施步驟7:檢查“裸核”字段的數(shù)據(jù)分布。df["裸核"].value_counts()按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度“裸核”字段中1和1.0看作不同的值,需要轉(zhuǎn)換到同樣的數(shù)據(jù)類型消除差別。2.3

任務(wù)實施步驟8:轉(zhuǎn)換“裸核”字段類型到int64。df["裸核"]=df["裸核"].astype("int64")2.Bagging提升分類器精度步驟9:再次檢查“裸核”字段的數(shù)據(jù)分布。df["裸核"].value_counts()“裸核”字段只有值1。2.3

任務(wù)實施2.Bagging提升分類器精度步驟10:檢查字段類型。()數(shù)據(jù)集所有字段都是int64,能用來訓(xùn)練和測試。按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.3.4數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟2:DataFrame對象轉(zhuǎn)換到Numpy對象。X=df.iloc[:,1:-1].valuesy=df.iloc[:,-1].values2.3

任務(wù)實施步驟3:數(shù)據(jù)集切分為訓(xùn)練集和測試集,測試集占20%。X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=4)X_train.shape,X_test.shape,y_train.shape,y_test.shape按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度2.3

任務(wù)實施2.3.5單分類器訓(xùn)練步驟1:定義2級標題。##<fontcolor="black">單分類器訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟2:在訓(xùn)練集上訓(xùn)練高斯貝葉斯模型。nb_model=GaussianNB()nb_model.fit(X_train,y_train)2.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度步驟3:在測試集上評估模型。nb_model.score(X_test,y_test)*100按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.3.6Bagging提升性能步驟1:定義2級標題。##<fontcolor="black">Bagging提升性能</font>按“SHIFT+Enter”,運行結(jié)果如下:2.Bagging提升分類器精度2.3

任務(wù)實施2.Bagging提升分類器精度步驟2:在訓(xùn)練集上訓(xùn)練基分類器為高斯貝葉斯的Bagging集成分類器。bg_model=BaggingClassifier(GaussianNB(),n_estimators=20,random_state=0)bg_model.fit(X_train,y_train)按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.Bagging提升分類器精度步驟3:在測試集上評估Bagging集成分類器。bg_model.score(X_test,y_test)*100按“SHIFT+Enter”,運行結(jié)果如下:BaggingBagging對于包含n個樣本的訓(xùn)練集,進行m次有放回的隨機采樣操作,從而得到m個樣本的采樣集,按照相同的方式重復(fù)進行,就可以采集到N個包含m個樣本的數(shù)據(jù)集,從而訓(xùn)練出N個基學(xué)習(xí)器,最終對這N個基學(xué)習(xí)器的輸出投票后決定預(yù)測結(jié)果。Bagging算法的核心思想如下圖:Sklearn庫的BaggingClassifier類提供了Bagging算法接口,定義如下:集成學(xué)習(xí)投票法classsklearn.ensemble.BaggingClassifier(estimator=None,n_estimators=10,**kargs)參數(shù)estimator:對象基學(xué)習(xí)器。n_estimators:int,默認值10基學(xué)習(xí)器數(shù)。Bagging主要通過樣本的擾動來增加基學(xué)習(xí)器之間的多樣性,因此Bagging的基學(xué)習(xí)器應(yīng)為那些對訓(xùn)練集十分敏感的不穩(wěn)定學(xué)習(xí)算法,比如神經(jīng)網(wǎng)絡(luò)與決策樹等。從偏差-方差分解來看,Bagging算法主要關(guān)注于降低方差,即通過多次重復(fù)訓(xùn)練提高穩(wěn)定性。實驗所用數(shù)據(jù)集來自許多澳大利亞氣象站的大約10年的每日天氣觀測以及天氣預(yù)報,要求使用歷史降雨數(shù)據(jù)建立機器學(xué)習(xí)模型,預(yù)測明天下雨的概率。詳細的字段描述見下表。3.1

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論