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

下載本文檔

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

文檔簡介

數(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多萬人。當乳房中的細胞開始生長失控時,它就開始了。這些細胞通常形成腫瘤,可以通過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)當優(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任務(wù)描述3.AdaBoost提升分類器精度先使用邏輯回歸模型擬合訓(xùn)練數(shù)據(jù),預(yù)測明天是否下雨,然后使用AdaBoost方法提升單分類器精度。任務(wù)目標3.1任務(wù)描述3.AdaBoost提升分類器精度字段類型非空標簽?例子編號int是是0月份(Month)int是否8.0氣象站(Climate)int是否1.0最低溫度(MinTemp)float是否17.5最高溫度(MaxTemp)float是否36.0降雨量(Rainfall)float是否0.0蒸發(fā)量(Evaporation)float是否8.8光照時間(Sunshine)float是否7.508659217877095最強風(fēng)方向(WindGustDir)int是否2.0最強風(fēng)速度(WindGustSpeed)float是否26.0早上9點風(fēng)向(WindDir9am)int是否6.0下午3點風(fēng)向(WindDir3pm)int是否0.0早上9點風(fēng)速(WindSpeed9am)int是否17.0下午3點風(fēng)速(WindSpeed3pm)int是否15.0早上9點濕度(Humidity9am)int是否57.0下午3點濕度(Humidity3pm)float是否51.65199530516432早上9點大氣壓(Pressure9am)float是否1016.8早上3點大氣壓(Pressure3pm)float是否1012.2早上9點云指數(shù)(Cloud9am)int是否0.0早上3點云指數(shù)(Cloud3pm)int是否7.0早上9點溫度(Temp9am)float是否27.5早上3點溫度(Temp3pm)float是否21.71900320606237今天下雨int是否1:下雨;0:不下雨明天下雨int是否1:下雨;0:不下雨3.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame,檢查樣本和字段類型特征轉(zhuǎn)換到服從正態(tài)分布依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換觀察數(shù)據(jù)后,轉(zhuǎn)換特征服從正態(tài)分布,先使用邏輯回歸模型預(yù)測數(shù)據(jù),進而采取AdaBoost方法提升單分類器精度。3.AdaBoost提升分類器精度3.2

任務(wù)分解在訓(xùn)練集上訓(xùn)練邏輯回歸模型,并在驗證集上評估模型精度單分類器訓(xùn)練接上AdaBoost加權(quán)組合多個分類器形成強分類器,預(yù)測結(jié)果由強分類器產(chǎn)生AdaBoost提升性能3.AdaBoost提升分類器精度3.3

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

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

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

任務(wù)實施步驟2:從文件中讀取數(shù)據(jù)。#index_col=0:第1列作為索引df_train=pd.read_csv('../data/rainfall_train.csv',header=0,encoding='GBK',index_col=0)df_test=pd.read_csv('../data/rainfall_test.csv',header=0,encoding='GBK',index_col=0)df_train.shape,df_test.shape3.AdaBoost提升分類器精度按“SHIFT+Enter”,運行結(jié)果如下:3.3

任務(wù)實施步驟3:字段較多,設(shè)置Pandas顯示所有列。pd.set_option('display.max_columns',None)3.AdaBoost提升分類器精度按“SHIFT+Enter”,運行結(jié)果如下:步驟4:觀察頭5條記錄。df_train.head(5)3.3

任務(wù)實施步驟5:查看字段數(shù)據(jù)類型。df_()3.AdaBoost提升分類器精度運行結(jié)果如右圖:3.3

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

任務(wù)實施步驟2:DataFrame對象轉(zhuǎn)換到Numpy對象。X_train=df_train.iloc[:,0:-1].valuesX_test=df_test.iloc[:,0:-1].valuesy_train=df_train.iloc[:,-1]y_test=df_test.iloc[:,-1]3.AdaBoost提升分類器精度3.3

任務(wù)實施3.AdaBoost提升分類器精度步驟3:訓(xùn)練標準化參數(shù),轉(zhuǎn)換訓(xùn)練集特征到正態(tài)分布。scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_train_scaled[0:2,:]按“SHIFT+Enter”,運行結(jié)果如下:3.3

任務(wù)實施3.AdaBoost提升分類器精度步驟4:轉(zhuǎn)換測試集特征服從正態(tài)分布。X_test_scaled=scaler.transform(X_test)X_test_scaled[0:2,:]按“SHIFT+Enter”,運行結(jié)果如下:3.3

任務(wù)實施3.3.4單分類器訓(xùn)練步驟1:定義2級標題。##<fontcolor="black">單分類器訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:3.AdaBoost提升分類器精度3.3

任務(wù)實施步驟2:在訓(xùn)練集上訓(xùn)練邏輯回歸模型。lr_clf=LogisticRegression()lr_clf.fit(X_train_scaled,y_train)3.AdaBoost提升分類器精度按“SHIFT+Enter”,運行結(jié)果如下:3.3

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

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

任務(wù)實施步驟2:在訓(xùn)練集上訓(xùn)練基于邏輯回歸的AdaBoost模型。ada_clf=AdaBoostClassifier(estimator=LogisticRegression(),n_estimators=10,random_state=0)ada_clf.fit(X_train_scaled,y_train)3.AdaBoost提升分類器精度按“SHIFT+Enter”,運行結(jié)果如下:3.3

任務(wù)實施步驟3:在測試集上評估AdaBoost模型。ada_clf.score(X_test_scaled,y_test)3.AdaBoost提升分類器精度按“SHIFT+Enter”,運行結(jié)果如下:AdaBoostAdaBoost是第一個具有適應(yīng)性的算法,即能適應(yīng)弱分類器各自的訓(xùn)練誤差率,這也是其名稱的由來(Ada為Adaptive的簡寫)。AdaBoost的具體流程:先對每個樣本賦予相同的初始權(quán)重,每一輪分類器訓(xùn)練過后都會根據(jù)其表現(xiàn)對每個樣本的權(quán)重進行調(diào)整,增加分錯樣本的權(quán)重,這樣先前做錯的樣本在后續(xù)就能得到更多關(guān)注,按這樣的過程重復(fù)訓(xùn)練出M個分類器,最后進行加權(quán)組合,如下圖所示:Sklearn庫的AdaBoostClassifier類提供了AdaBoost算法接口,定義如下:AdaBoostclasssklearn.ensemble.BaggingClassifier(estimator=None,n_estimators=10,**kargs)參數(shù)estimators:對象基學(xué)習(xí)器。n_estimators:int,默認值10基學(xué)習(xí)器數(shù)。AdaBoost使用弱分類器,其個體分類器之間存在強依賴關(guān)系,是一種序列化方法。Bagging則一般使用強分類器,其個體學(xué)習(xí)器之間不存在強依賴關(guān)系,容易并行。Boosting關(guān)注降低偏差(預(yù)測值與真實值之間的誤差),而Bagging主要關(guān)注降低方差(預(yù)測值之間的離散程度)。小結(jié)投票法一般選用性能接近的分類器集成。AdaBoost使用弱分類器,而Bagging使用強分類器。Bagging容易并行而AdaBoost很難并行。習(xí)題九一選擇題1.袋裝法英文名是()。A.Voting B.Bagging C.Boosting D.Bayes2.Series的nunique方法打?。ǎ.最大值 B.最小值C.唯一值數(shù)量 D.中位數(shù)3.DataFrame類的sample()打?。ǎ?。A.任意5個樣本 B.最前面5個樣本C.最后面5個樣本 D.中間5個樣本一選擇題4.numpy.nan表示()。A.缺省值。 B.0。 C.最大整數(shù)。 D.最大浮點數(shù)。5.下面說法正確的是()。A.投票法集成的模型越多,性能越好。B.投票法性能總能超過個體分類器。C.投票法集成性能相近的基分類器更可能有性能提升。D.投票法不依賴基分類器。習(xí)題九二填空題1.分類投票法可以被劃分為()與()。2.Bagging使用()采樣的方式選取訓(xùn)練集,抽取樣本后放回,然后再次抽取。3.Boosting關(guān)注降低(),而Bagging主要關(guān)注降低()。習(xí)題九習(xí)題九三

思考題使用降雨預(yù)測數(shù)據(jù)集,比較投票法、Bagging、AdaBoost三種集成學(xué)習(xí)方法,回答下面2個問題:1)三種集成學(xué)習(xí)方法是否有效?2)那種集中學(xué)習(xí)方法在該數(shù)據(jù)集上性能最好?掌握構(gòu)造DataLoader掌握構(gòu)造多層感知機掌握構(gòu)造卷積神經(jīng)網(wǎng)絡(luò)掌握構(gòu)造循環(huán)神經(jīng)網(wǎng)絡(luò)掌握訓(xùn)練深度學(xué)習(xí)模型掌握使用深度模型預(yù)測樣本參考書目《機器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》基于深度學(xué)習(xí)的分類預(yù)測模塊10機器學(xué)習(xí)技術(shù)目錄多層感知機預(yù)測糖尿病CNN識別圖像時間戳循環(huán)神經(jīng)網(wǎng)絡(luò)預(yù)測國際旅行客流量小結(jié)習(xí)題十基于深度學(xué)習(xí)的分類預(yù)測模塊10機器學(xué)習(xí)技術(shù)本任務(wù)使用PinaIndians糖尿病發(fā)病情況數(shù)據(jù)集,樣本來自國家糖尿病、消化和腎臟疾病研究所。特別是,這里的所有病人都是至少21歲的皮馬印第安人血統(tǒng)的女性。這個數(shù)據(jù)集描述了PimaIndians的患者醫(yī)療記錄數(shù)據(jù),以及他們是否在五年內(nèi)發(fā)生糖尿病。數(shù)據(jù)集包括幾個醫(yī)學(xué)預(yù)測變量和一個目標變量,即結(jié)果。預(yù)測變量包括懷孕次數(shù)、體重指數(shù)、胰島素水平、年齡等。詳細的字段描述見下表。1.1任務(wù)描述1.多層感知機預(yù)測糖尿病1.1任務(wù)描述構(gòu)造訓(xùn)練多層感知機,訓(xùn)練模型擬合數(shù)據(jù)集樣本,并可視化訓(xùn)練過程中模型性能的變化。任務(wù)目標字段類型允許為空標簽?例子懷孕次數(shù)int否否62小時口服葡萄糖耐量試驗中血漿葡萄糖濃度int否否148舒張壓int否否72三頭肌皮褶皺厚度int否否352小時血清胰島素

int否否0身體質(zhì)量指數(shù)float否否33.6糖尿病譜系功能float否否0.627年齡int否否50是否患糖尿病int否否0:否,1:是1.多層感知機預(yù)測糖尿病1.2

任務(wù)分解import方式引入依賴的模塊文件讀入DataFrame,抽樣檢查樣本值和數(shù)據(jù)分布數(shù)據(jù)封裝成PyTorch庫的DataLoader對象依賴庫導(dǎo)入數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換從探查數(shù)據(jù)內(nèi)容開始,經(jīng)過數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)集分離,定義多層感知機,迭代訓(xùn)練網(wǎng)絡(luò)模型擬合數(shù)據(jù)集樣本,可視化訓(xùn)練過程中訓(xùn)練性能和測試性能變化。1.多層感知機預(yù)測糖尿病1.2

任務(wù)分解定義一個包含2個隱藏層和1個輸出層的多層感知機采用反向傳播方式,更新各層的梯度值,找到模型的最優(yōu)或次優(yōu)參數(shù)模型構(gòu)建模型訓(xùn)練接上可視化模型在2個數(shù)據(jù)集上的準確率變化訓(xùn)練過程可視化1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施1.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:使用PyTorch深度學(xué)習(xí)框架實施模型創(chuàng)建和訓(xùn)練,支持在強大GPU上運行矩陣運算,也支持反向傳播過程中的自動求導(dǎo)功能。1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importnumpyasnpimportpandasaspdfrommatplotlibimportpyplotaspltimportmatplotlibasmplfromtorchimportnnfromsklearn.model_selectionimporttrain_test_splitfromtorch.utils.dataimportTensorDataset,DataLoaderimporttorch1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施1.3.2數(shù)據(jù)觀察文件讀入DataFrame對象后,需要觀察屬性值和數(shù)據(jù)分布。步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)觀察</font>按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟2:把數(shù)據(jù)從文件讀入DataFrame對象。df=pd.read_csv("../data/pima-indians-diabetes.csv",header=0)df.shape按“SHIFT+Enter”,運行結(jié)果如下:步驟3:查看頭5條記錄。df.head()1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:步驟4:查看各字段的統(tǒng)計特征。df.describe()1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施1.3.3數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟2:DataFrame對象轉(zhuǎn)換到Numpy類型。X=df.iloc[:,:-1].valuesy=df.iloc[:,-1].values.reshape(-1,1)X.shape,y.shape按“SHIFT+Enter”,運行結(jié)果如下:Series對象的values方法返回是1維Numpy對象。PyTorch訓(xùn)練時要求輸入和標簽都至少2維,因此使用reshape方法轉(zhuǎn)換到2維的Numpy對象作為標簽。1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟3:數(shù)據(jù)集切分為2部分:訓(xùn)練集和測試集,測試集占20%。X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)X_train.shape,X_test.shape,y_train.shape,y_test.shape按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟4:把訓(xùn)練集封裝為DataLoader。train_data=TensorDataset(torch.Tensor(X_train),torch.Tensor(y_train))train_dataloader=DataLoader(train_data,batch_size=10,shuffle=True)test_data=TensorDataset(torch.Tensor(X_test),torch.Tensor(y_test))test_dataloader=DataLoader(test_data,batch_size=10,shuffle=True)在處理大數(shù)據(jù)集時,一次將整個數(shù)據(jù)加載到內(nèi)存中變得非常難,DataLoader將數(shù)據(jù)分批加載到內(nèi)存中,一次讀入少量數(shù)據(jù)。DataLoader初始化時一般要設(shè)置batch_size控制每個批次的樣本數(shù)量;shuffle設(shè)置是否隨機抽取樣本。1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施1.3.4模型構(gòu)建步驟1:定義2級標題。##<fontcolor="black">模型構(gòu)建</font>按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施步驟2:定義一個簡單的多層感知機類,激化函數(shù)使用ReLU,輸出層使用Sigmoid函數(shù)計算糖尿病的概率。classNeuralNetwork(nn.Module):

def__init__(self):

super().__init__() self.flatten=nn.Flatten() self.linear_relu_stack=nn.Sequential(

nn.Linear(8,16),#全連接層

nn.ReLU(),#激活層1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施 nn.Linear(16,8),#全連接層

nn.ReLU(),#激活層

nn.Linear(8,1),#輸出層

nn.Sigmoid())defforward(self,x):

x=self.flatten(x)

logits=self.linear_relu_stack(x)

returnlogits接上1.多層感知機預(yù)測糖尿病激活函數(shù)隱藏層和輸出層的神經(jīng)元通過激活函數(shù)(ActivationFunction),將輸入端的加權(quán)和轉(zhuǎn)換成神經(jīng)元輸出值。在沒有激活函數(shù)的作用下,無論怎么調(diào)整網(wǎng)絡(luò)參數(shù),輸出值仍為線性,因此一般激活函數(shù)都是非線性的。常用的激活函數(shù)有:

監(jiān)督學(xué)習(xí)性能指標

監(jiān)督學(xué)習(xí)性能指標

1.3

任務(wù)實施步驟3:創(chuàng)建多層感知機。model=NeuralNetwork()model按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病多層感知機多層感知機(MultilayerPerceptron,MLP)是一種基于前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),由輸入層、隱藏層和輸出層組成,其中隱藏層可以有多層。每一層的神經(jīng)元與相鄰層的神經(jīng)元相連,通過不斷調(diào)整神經(jīng)元之間的權(quán)重,實現(xiàn)對復(fù)雜問題的學(xué)習(xí)和預(yù)測。它是一種前向反饋網(wǎng)絡(luò),具有強大的處理能力和表達能力,廣泛應(yīng)用于分類、回歸、識別等各種任務(wù)中。單隱藏層的多層感知機如下圖所示:1.3

任務(wù)實施1.3.5模型訓(xùn)練步驟1:定義2級標題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病步驟2:定義函數(shù)封裝在訓(xùn)練數(shù)據(jù)集上訓(xùn)練1代的過程。deftrain(dataloader,model,loss_fn,optimizer): size=len(dataloader.dataset)1.3

任務(wù)實施 model.train()#設(shè)置模型在訓(xùn)練狀態(tài) forbatch,(X,y)inenumerate(dataloader): pred=model(X)#正向傳播

loss=loss_fn(pred,y)#計算損失

loss.backward()#反向傳播 optimizer.step()#根據(jù)當前參數(shù)值和梯度更新參數(shù)值 optimizer.zero_grad()#參數(shù)偏導(dǎo)設(shè)置為0

ifbatch%10==0:

loss,current=loss.item(),(batch+1)*len(X) print(f"loss:{loss:>7f}[{current:>5d}/{size:>5d}]")1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施1.多層感知機預(yù)測糖尿病步驟3:定義函數(shù)封裝測試過程。deftest(dataloader,model,loss_fn):

size=len(dataloader.dataset)

num_batches=len(dataloader)

model.eval()

test_loss,correct=0,0

withtorch.no_grad():#測試過程不涉及梯度計算

forX,yindataloader:

pred=model(X)

1.3

任務(wù)實施 test_loss+=loss_fn(pred,y).item()#縮進三層

correct+=((pred>=0.5)==y).type(torch.float).sum().item()acc=correct/sizereturnacc,test_loss/num_batches1.多層感知機預(yù)測糖尿病步驟4:使用BCELoss損失函數(shù)評價預(yù)測值和真實值之間的差距。loss_fn=nn.BCELoss()模型狀態(tài)轉(zhuǎn)換model.train()改變模型到訓(xùn)練狀態(tài),model.eval()改變模型到測試狀態(tài),2個狀態(tài)轉(zhuǎn)換函數(shù)主要是對BN層和Dropout層有影響。BN層執(zhí)行model.train()之后,BN層對之后輸入的每個batch獨立計算其均值和方差,BN層的參數(shù)不斷發(fā)生變化。訓(xùn)練過程中每個batch的μ和σ都保存下來,然后加權(quán)平均當做整個訓(xùn)練數(shù)據(jù)集的μ和σ用于測試。執(zhí)行model.eval()之后,BN層使用統(tǒng)計的μ和σ做測試,不再發(fā)生變化。

Dropout層執(zhí)行model.train()后,忽略一些神經(jīng)元。執(zhí)行model.train()后,使用所有神經(jīng)元。激活函數(shù)損失函數(shù)就是用來度量模型的預(yù)測值與真實值的差距,損失函數(shù)越小,模型的魯棒性就越好。每個批次的訓(xùn)練數(shù)據(jù)送入模型后,通過前向傳播輸出預(yù)測值,然后損失函數(shù)會計算出預(yù)測值和真實值之間的差距,也就是損失值。得到損失值之后,模型通過反向傳播去更新各個參數(shù),來降低真實值與預(yù)測值之間的損失,使得模型生成的預(yù)測值往真實值方向靠攏,從而達到學(xué)習(xí)的目的。常用的損失函數(shù)有:

監(jiān)督學(xué)習(xí)性能指標

優(yōu)化器優(yōu)化器是深度學(xué)習(xí)中用于優(yōu)化神經(jīng)網(wǎng)絡(luò)模型的一類算法,其主要作用是根據(jù)模型的損失函數(shù)來調(diào)整模型的參數(shù),使得模型能夠更好地擬合訓(xùn)練數(shù)據(jù),提高模型的性能和泛化能力。優(yōu)化器在訓(xùn)練過程中通過不斷更新模型的參數(shù),使模型逐步接近最優(yōu)解。常用的優(yōu)化器有:隨機梯度下降(SGD)RMSpropAdamAdaGrad1.3

任務(wù)實施步驟5:使用Adam優(yōu)化器更新模型權(quán)重。optimizer=torch.optim.Adam(model.parameters(),lr=1e-3)1.多層感知機預(yù)測糖尿病步驟6:迭代更新網(wǎng)絡(luò)模型權(quán)重,達到模型擬合訓(xùn)練樣本的效果。epochs=20train_accs=[]test_accs=[]按“SHIFT+Enter”,檢查輸出無異常。1.3

任務(wù)實施1.多層感知機預(yù)測糖尿病fortinrange(epochs): print(f"Epoch{t+1}\n--------------------") train(train_dataloader,model,loss_fn,optimizer) acc,one_loss=test(train_dataloader,model,loss_fn) print(f"訓(xùn)練:\n準確率:{(100*acc):>0.1f}%,損失:{one_loss:>8f}") train_accs.append(acc) acc,one_loss=test(test_dataloader,model,loss_fn) print(f"測試:\n準確率:{(100*acc):>0.1f}%,損失:{one_loss:>8f}") test_accs.append(acc)1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病……1.3

任務(wù)實施1.3.6訓(xùn)練過程可視化步驟1:定義2級標題。##<fontcolor="black">訓(xùn)練過程可視化</font>按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病步驟2:設(shè)置Matplotlib正常顯示中文字體和減號。mpl.rcParams["font.sans-serif"]=["SimHei"]mpl.rcParams["axes.unicode_minus"]=False1.3

任務(wù)實施步驟3:可視化訓(xùn)練過程。plt.plot(range(1,epochs+1),train_accs,color="blue",label="訓(xùn)練準確率")plt.plot(range(1,epochs+1),test_accs,color="green",label="測試準確率")plt.xlabel("代")plt.xticks(range(1,epochs+1))plt.legend(loc=0)plt.title("訓(xùn)練過程")plt.show()1.多層感知機預(yù)測糖尿病1.3

任務(wù)實施按“SHIFT+Enter”,運行結(jié)果如下:1.多層感知機預(yù)測糖尿病監(jiān)控照片的左上方有拍攝時間(時間戳),要求識別出時間戳中的年/月/日/時/分/秒。訓(xùn)練用的數(shù)據(jù)集包含0~9的手寫數(shù)字,每個字母3個樣本。2.1任務(wù)描述2.CNN識別圖像時間戳2.1任務(wù)描述基于上圖的圖片數(shù)據(jù)集樣本,建立和訓(xùn)練CNN模型,使用模型識別監(jiān)控照片中的年/月/日/時/分/秒。任務(wù)目標2.CNN識別圖像時間戳2.2

任務(wù)分解import方式引入依賴的模塊圖片目錄封裝為DataLoader創(chuàng)建包含卷積層、池化層、全連接層和Softmax層的CNN模型依賴庫導(dǎo)入數(shù)據(jù)轉(zhuǎn)換模型構(gòu)建把目標目錄下的圖片樣本封裝為DataLoader,構(gòu)建CNN模型后多次訓(xùn)練使得模型擬合圖片數(shù)據(jù)集,然后應(yīng)用該模型識別監(jiān)控圖片中的數(shù)字。2.CNN識別圖像時間戳2.2

任務(wù)分解采用反向傳播方式更新各層的梯度值,找到CNN模型的最優(yōu)或次優(yōu)參數(shù)模型訓(xùn)練接上CNN模型識別監(jiān)控圖片的時間戳?xí)r間戳識別2.CNN識別圖像時間戳2.3

任務(wù)實施2.3.1依賴庫導(dǎo)入步驟1:定義2級標題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運行結(jié)果如下:2.CNN識別圖像時間戳2.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。fromtorch.utils.dataimportDataset,DataLoaderfromtorchvisionimporttransforms,datasetsfrommatplotlibimportpyplotaspltimporttorchfromtorchimportnnimportnumpyasnp2.CNN識別圖像時間戳2.3

任務(wù)實施2.3.2數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運行結(jié)果如下:2.CNN識別圖像時間戳2.3

任務(wù)實施步驟2:構(gòu)建變換列表作為轉(zhuǎn)換通道。transforms_train=transforms.Compose([

transforms.Grayscale(),#轉(zhuǎn)到灰度圖 transforms.ToTensor()#轉(zhuǎn)到Tensor類型,值變換到[0,1] ])2.CNN識別圖像時間戳按“SHIFT+Enter”,檢查輸出無異常。2.3

任務(wù)實施步驟3:從目標目錄建立圖片數(shù)據(jù)集。2.CNN識別圖像時間戳ds_train=datasets.ImageFolder("../data/image/digit/",transform=transforms_train,target_transform=lambdat:torch.tensor([t]))print(ds_train)print(ds_train.classes)按“SHIFT+Enter”,運行結(jié)果如下:2.3

任務(wù)實施2.CNN識別圖像時間戳步驟4:通過DataLoader加載ImageFolder。這里的num_workers為了避免出錯,盡量設(shè)置為0。train_dataloader=DataLoader(ds_train,batch_size=2,shuffle=True,num_workers=0)按“SHIFT+Enter”,檢查輸出無異常。2.3

任務(wù)實施步驟5:抽樣檢查樣本。2.CNN識別圖像時間戳plt.figure(figsize=(5,5))foriinrange(9):

img,label=ds_train[i]

print(img.shape)#圖像是c*w*h->w*h*c

img=img.permute(1,2,0)

ax=plt.subplot(3,3,i+1)

ax.imshow(img.numpy())2.3

任務(wù)實施2.CNN識別圖像時間戳 ax.set_title("label=%d"%label.item(),fontsize=8) ax.set_xticks([]) ax.set_yticks([])plt.show()接上

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論