




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)觀察數(shù)據(jù)轉(zhuǎn)換KNN模型訓(xùn)練模型保存KNN模型預(yù)測參考書目《機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》基于K-最近鄰的分類預(yù)測模塊3機(jī)器學(xué)習(xí)技術(shù)目錄電影類型預(yù)測鳶尾花種類預(yù)測葡萄酒品種預(yù)測小結(jié)習(xí)題三基于K-最近鄰的分類預(yù)測模塊3機(jī)器學(xué)習(xí)技術(shù)數(shù)據(jù)集film.csv記錄6部電影的肢體沖突鏡頭數(shù)、擁抱鏡頭數(shù),以及電影評估類型。詳細(xì)的字段描述見下表。1.1任務(wù)描述1電影類型預(yù)測有一部未看過的電影【肢體沖突鏡頭=18、擁抱鏡頭=90】,預(yù)測該電影是愛情片還是動作片。任務(wù)目標(biāo)字段字段類型允許為空標(biāo)簽?例子電影名稱string否否CaliforniaMan肢體沖突鏡頭Int否否3擁抱鏡頭int否否81影片類型int否是{1:愛情片,0:動作片}1電影類型預(yù)測1.2
任務(wù)分解import方式引入依賴的模塊檢查樣本分布、特征/標(biāo)簽類型、空值、重復(fù)行、屬性相互關(guān)系可視化樣本的空間分布、待測試樣本和訓(xùn)練樣本的空間關(guān)系依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)可視化從探查數(shù)據(jù)內(nèi)容開始,經(jīng)過分析數(shù)據(jù)分布,使用KNN模型找到標(biāo)簽和數(shù)據(jù)特征之間的關(guān)系,然后利用KNN模型預(yù)測未看過的電影。1電影類型預(yù)測1.2
任務(wù)分解轉(zhuǎn)換Pandas類型到Numpy類型在已知樣本上訓(xùn)練KNN模型用訓(xùn)練的模型預(yù)測電影【肢體沖突鏡頭=18、擁抱鏡頭為90】的類型數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練預(yù)測接上1電影類型預(yù)測1.3
任務(wù)實(shí)施使用Python編程時(shí),沒必要實(shí)現(xiàn)所有的功能,可以借助Python自身的標(biāo)準(zhǔn)庫或者其他人提供的第三方庫。比如,本任務(wù)會使用到KNeighborsClassifier類,它位于sklearn.neighbors模塊中,只需要將此模塊導(dǎo)入到Jupyter程序中,就可以調(diào)用此函數(shù)。fromsklearn.neighborsimportKNeighborsClassifier1電影類型預(yù)測1.3
任務(wù)實(shí)施1.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearn.neighborsimportKNeighborsClassifier按“SHIFT+Enter”,檢查輸出無異常。1電影類型預(yù)測1.3
任務(wù)實(shí)施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ù)實(shí)施步驟2:對齊列名和數(shù)據(jù)。pd.set_option('display.unicode.ambiguous_as_wide',True)pd.set_option('display.unicode.east_asian_width',True)按“SHIFT+Enter”,檢查輸出無異常。1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟3:讀入數(shù)據(jù)集文件到DataFrame對象。url=“../data/film.csv”df=pd.read_csv(url,names=[“電影名稱”,“電影類型”,“肢體沖突鏡頭”,“擁抱鏡頭"])按“SHIFT+Enter”,檢查輸出無異常。1.3
CSVCSV(逗號分隔值文件格式)逗號分隔值(Comma-SeparatedValues,CSV,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾枺┪募约兾谋拘问酱鎯Ρ砀駭?shù)據(jù)(數(shù)字和文本)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。建議使用EXCEL或Notepad打開和保存CSV文件。1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟4:顯示愛情片樣本。print("愛情片數(shù)據(jù):\n",df[df["電影類型"]==1])按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟5:顯示動作片樣本。print("動作片數(shù)據(jù):\n",df[df["電影類型"]==0])按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施1.3.3數(shù)據(jù)可視化在3個(gè)特征中,“電影名稱”內(nèi)容是文本,無法映射到枚舉類型,因而不予考慮,只需要觀察“肢體沖突鏡頭”、“擁抱鏡頭”2個(gè)特征與標(biāo)簽“電影類型”的關(guān)系。步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False按“SHIFT+Enter”,檢查輸出無異常1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟3:圖形化訓(xùn)練樣本和待測樣本的空間分布。testdata=[18,90]#測試樣本plt.figure(figsize=(4,4),dpi=80)plt.scatter(df[‘肢體沖突鏡頭’][0:3],df[‘擁抱鏡頭'][0:3],marker='o',color='g',s=70,label='愛情片')plt.scatter(df[‘肢體沖突鏡頭’][3:6],df[‘擁抱鏡頭'][3:6],marker='o',color='w',edgecolors='g',s=70,label='動作片')1電影類型預(yù)測1.3
任務(wù)實(shí)施plt.scatter(testdata[:1],testdata[1:],marker='.',color='b',s=120,label='未知樣本')plt.text(testdata[:1][0]+8,testdata[1:][0]+3,"k=3")plt.arrow(testdata[:1][0]+1,testdata[1:][0]+1,14,14,width=0.1,fc="b",head_width=1.5)draw_circle=plt.Circle((testdata[:1],testdata[1:]),24,fill=False,color='g')接上1電影類型預(yù)測1.3
任務(wù)實(shí)施plt.gcf().gca().add_artist(draw_circle)plt.xlabel(‘肢體沖突鏡頭')plt.ylabel(‘擁抱鏡頭')plt.legend(loc=1)plt.xlim(-20,120)plt.ylim(-20,120)接上1電影類型預(yù)測1.3
任務(wù)實(shí)施運(yùn)行結(jié)果如下:從左圖看出,如果根據(jù)最近3個(gè)鄰居的標(biāo)簽判斷未知樣本的標(biāo)簽,那么可以預(yù)測未知樣本的電影類型是愛情片,這就是K-最近鄰算法的核心思想。K-最近鄰K-最近鄰(K-nearestneighbor,KNN)的核心思想:假若一個(gè)特征空間中大多數(shù)的樣本屬于某一個(gè)類別,則在這個(gè)特征空間中,K個(gè)最相似的樣本也屬于這個(gè)類別。該模型可用于待分樣本所屬的類別判定或簡單回歸模型的計(jì)算,其核心關(guān)注點(diǎn)為測試點(diǎn)個(gè)數(shù)(K)與距離計(jì)算模型的確定。Sklearn庫的KneighborsClassifier類實(shí)現(xiàn)了KNN模型,定義如下:特別注意的是,參數(shù)n_neighbors會對分類性能有較大影響,往往需要多次實(shí)驗(yàn)找到最優(yōu)值或次優(yōu)值。1電影類型預(yù)測1.3
任務(wù)實(shí)施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ù)實(shí)施步驟2:轉(zhuǎn)換特征和標(biāo)簽到Numpy類型。X=df[[“肢體沖突鏡頭”,“擁抱鏡頭"]].valuesy=df["電影類型"].values按“SHIFT+Enter”,檢查輸出無異常1電影類型預(yù)測1.3
任務(wù)實(shí)施1.3.5模型訓(xùn)練構(gòu)建KNN模型后,在特征X和標(biāo)簽y上訓(xùn)練。步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟2:建立KNN模型。knn_model=KNeighborsClassifier(n_neighbors=3)按“SHIFT+Enter”,輸出無異常步驟3:訓(xùn)練KNN模型。knn_model.fit(X,y)按“SHIFT+Enter”,輸出無異常1電影類型預(yù)測1.3
任務(wù)實(shí)施1.3.6預(yù)測基于訓(xùn)練好的KNN模型,預(yù)測樣本【肢體沖突鏡頭=18,擁抱鏡頭=90】的電影類型。步驟1:定義2級標(biāo)題。##<fontcolor="black">預(yù)測</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟2:定義索引對應(yīng)標(biāo)簽值的標(biāo)簽列表。label_names=["動作片","愛情片"]步驟3:預(yù)測未知樣本的標(biāo)簽索引。y_pred=knn_model.predict([testdata])1電影類型預(yù)測1.3
任務(wù)實(shí)施步驟4:打印標(biāo)簽值。label_names[y_pred[0]]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:數(shù)據(jù)集iris.csv源于UCI平臺,由Fisher在1936年收集整理,由3種不同類型的鳶尾花的50條樣本構(gòu)成。2.1任務(wù)描述2
鳶尾花種類預(yù)測每行數(shù)據(jù)包含4個(gè)特征:Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Petal.Length(花瓣長度)和Petal.Width(花瓣寬度),單位是cm;以及3個(gè)種類:IrisSetosa(山鳶尾)、IrisVersicolour(雜色鳶尾)和IrisVirginica(維吉尼亞鳶尾)。詳細(xì)的字段描述見下表。2.1任務(wù)描述2
鳶尾花種類預(yù)測1)建立KNN分類模型并評估精度。2)預(yù)測鳶尾花樣本【花萼長度=5.2,花萼寬度=2.6,花瓣長度=3.8,花瓣寬度=1.3】的種類。任務(wù)目標(biāo)字段字段類型允許為空標(biāo)簽?例子花萼長度float否否6.4花萼寬度float否否2.8花瓣長度float否否5.6花瓣寬度float否否2.2種類int否是{0:Setosa,1:Versicolor,2:Virginica}注:第一行不是列標(biāo)題,也不是樣本,讀入時(shí)跳過2
鳶尾花種類預(yù)測2.2
任務(wù)分解import方式引入依賴的模塊檢查樣本分布、特征/標(biāo)簽類型、空值、重復(fù)行、屬性相互關(guān)系箱型圖可視化樣本的空間分布依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)可視化觀察數(shù)據(jù)后,按照訓(xùn)練集和驗(yàn)證集4:1比例切分?jǐn)?shù)據(jù)集,然后保存訓(xùn)練好的KNN模型到硬盤,使用模型預(yù)測未知樣本的標(biāo)簽。2
鳶尾花種類預(yù)測2.2
任務(wù)分解轉(zhuǎn)換Pandas類型到Numpy類型,轉(zhuǎn)換特征到(0,1)正態(tài)分布在訓(xùn)練集上訓(xùn)練KNN模型,并在驗(yàn)證集上評估模型精度用訓(xùn)練的模型預(yù)測標(biāo)簽未知的樣本數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練預(yù)測接上模型持久化模型保存到硬盤以待將來使用2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearnimportneighborsfromsklearnimportmodel_selectionfromsklearnimportpreprocessingimportjoblibimportnumpyasnp2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.2數(shù)據(jù)探查步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)探查</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:讀入數(shù)據(jù)集文件到DataFrame對象。names=['花萼長度','花萼寬度','花瓣長度','花瓣寬度','鳶尾花類型']dataset=pd.read_csv("../data/iris.csv",names=names,skiprows=1)按“SHIFT+Enter”,檢查輸出無異常。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟3:查看樣本特征的統(tǒng)計(jì)值。dataset.iloc[:,0:4].describe()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:從特征統(tǒng)計(jì)值看出,“花萼長度”和“花瓣寬度”的取值范圍與其他2個(gè)特征有著不同的取值范圍和方差。DataFrame.describe()2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.3數(shù)據(jù)可視化步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False按“SHIFT+Enter”,檢查輸出無異常。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟3:箱型圖顯示特征數(shù)據(jù)分布。dataset.iloc[:,0:4].plot(kind='box',subplots=True,layout=(4,4),sharex=False,sharey=False)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:四個(gè)特征有著不同的中心值,方差也不相同,需要通過數(shù)據(jù)轉(zhuǎn)換映射特征到相同的數(shù)據(jù)分布。箱線圖箱線圖是一種基于五位數(shù)摘要(LW(最小值),下四分位數(shù)(Q1),中位數(shù)(Q2),上四分位數(shù)(Q3)和最大值(UW))顯示數(shù)據(jù)分布的標(biāo)準(zhǔn)化方法。例如,有列表(1,3,5,6,10,19)的箱型圖。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.4數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:從DataFrame對象中抽取特征和標(biāo)簽。X=dataset.iloc[:,0:4].valuesy=dataset.iloc[:,4].values按“SHIFT+Enter”,檢查輸出無異常。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟3:縮放特征服從正態(tài)分布。scaler=preprocessing.StandardScaler()norm_X=scaler.fit_transform(X)norm_X[0:5,...]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:從轉(zhuǎn)換后的數(shù)據(jù)來看,每個(gè)特征已經(jīng)服從(0,1)正態(tài)分布。StandardScalerK-最近鄰需要計(jì)算樣本之間的距離。如果一個(gè)特征值域范圍非常大,那么距離計(jì)算就主要取決于這個(gè)特征,從而與實(shí)際情況相悖(比如這時(shí)實(shí)際情況是值域范圍小的特征更重要)。StandardScaler類具有歸一化功能,定義如下:classsklearn.preprocessing.StandardScaler(copy,**kargs)參數(shù)copy:bool,默認(rèn)值True
如果False,直接特征縮放2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟4:切分出訓(xùn)練集和驗(yàn)證集。X_train,X_val,y_train,y_val=model_selection.train_test_split(norm_X,y,random_state=4,test_size=0.2)f'訓(xùn)練集樣本個(gè)數(shù):{len(X_train)}',f'驗(yàn)證集樣本個(gè)數(shù):{len(X_val)}'按“SHIFT+Enter”,運(yùn)行結(jié)果如下:訓(xùn)練集、驗(yàn)證集、測試集、超參數(shù)訓(xùn)練集、驗(yàn)證集、測試集、超參數(shù)為了建立機(jī)器學(xué)習(xí)模型并知道模型性能,數(shù)據(jù)集可以分為三部分:訓(xùn)練集、驗(yàn)證集、測試集。訓(xùn)練集(trainset):用于訓(xùn)練機(jī)器學(xué)習(xí)模型。驗(yàn)證集(validationset):驗(yàn)證模型性能以調(diào)整超參數(shù)。測試集(testset):驗(yàn)證模型在未標(biāo)注數(shù)據(jù)上的性能。超參數(shù)(hyperparameters):根據(jù)經(jīng)驗(yàn)進(jìn)行設(shè)定的參數(shù),如KneighborsClassifier中的n_neighbors。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.5模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:建立KNN模型。knn_model=neighbors.KNeighborsClassifier(n_neighbors=5)按“SHIFT+Enter”,檢查輸出無異常。步驟3:訓(xùn)練KNN模型。knn_model.fit(X_train,y_train)按“SHIFT+Enter”,檢查輸出無異常。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟4:在驗(yàn)證集上評估模型。acc=knn_model.score(X_val,y_val)f"模型評估準(zhǔn)確率:{acc:0.4f}"按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.6模型持久化許多大型模型訓(xùn)練往往需要花費(fèi)大量時(shí)間,每次使用模型前重新訓(xùn)練并不現(xiàn)實(shí)。在實(shí)際應(yīng)用中,經(jīng)常把訓(xùn)練好的模型保存到文件中,使用時(shí)再加載內(nèi)存。步驟1:定義2級標(biāo)題。##<fontcolor="black">模型持久化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:保存模型到硬盤。joblib.dump(scaler,'iris_scaler.pkl')joblib.dump(knn_model,'iris_knn.pkl')按“SHIFT+Enter”,檢查輸出無異常。檢查當(dāng)前目錄,可以發(fā)現(xiàn)多了2個(gè)文件:iris_scaler.pkl包含特征的統(tǒng)計(jì)值,iris_knn.pkl保存了KNN模型結(jié)構(gòu)和參數(shù)。2鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟3:從硬盤加載模型到內(nèi)存。scaler=joblib.load('iris_scaler.pkl')knn_model=joblib.load('iris_knn.pkl')按“SHIFT+Enter”,檢查輸出無異常。步驟3不是必須的,只是為了演示持久化的模型加載到內(nèi)存的過程。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施2.3.7預(yù)測步驟1:定義2級標(biāo)題。#<fontcolor="black">測試</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟2:按照索引值定義標(biāo)簽列表。label_names=["iris-setosa","iris-versicolour","iris-virginica"]按“SHIFT+Enter”,檢查輸出無異常。步驟3:構(gòu)建測試樣本。test_data=np.array([[5.2,2.6,3.8,1.3]])按“SHIFT+Enter”,檢查輸出無異常。2鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟4:轉(zhuǎn)換測試樣本。norm_test_data=scaler.transform(test_data)按“SHIFT+Enter”,檢查輸出無異常。步驟5:在KNN模型上預(yù)測。y_pred=knn_model.predict(norm_test_data)[0]按“SHIFT+Enter”,檢查輸出無異常。2
鳶尾花種類預(yù)測2.3
任務(wù)實(shí)施步驟6:打印預(yù)測鳶尾花品種。label_names[y_pred]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:數(shù)據(jù)集wine.data來自UCIIrvine機(jī)器學(xué)習(xí)庫,共有178行、14列。3.1任務(wù)描述3葡萄酒品種預(yù)測第一列為類別標(biāo)簽,用1,2,3表示三種不同類別,其中第1行至第59行為第一類,類別標(biāo)簽為1,第60行至第130行為第二類,標(biāo)簽為2,第131行至第178行為第三類,標(biāo)簽為3,第2列至第14列為13個(gè)成分的含量信息。詳細(xì)的字段描述見下表。3.1任務(wù)描述3葡萄酒品種預(yù)測字段字段類型允許為空標(biāo)簽?例子target(品種標(biāo)簽)int否是[1,2,3]alcohol(酒精)float否否12.37malic_acid(蘋果酸)float否否1.63ash(灰分)float否否2.3alcalinity_of_ash(灰分的堿性)float否否24.5magnesium(鎂)int否否88total_phenols(苯酚總量)float否否2.22flavanoids(黃酮類物質(zhì))float否否2.45nonflavanoid_phenols(非黃酮類酚)float否否0.4proanthocyanins(原花青素)float否否1.9color_intensity(顏色強(qiáng)度)float否否2.12hue(色度)float否否0.89od280/od315_of_diluted_wines(稀釋酒蛋白質(zhì)濃度的光譜度)float否否2.78proline(脯氨酸)int否否3423.1任務(wù)描述3葡萄酒品種預(yù)測1)建立KNN分類模型并評估精度。2)預(yù)測葡萄酒樣本【alcohol=13.17,malic_acid=2.58,ash=2.37,alcalinity_of_ash=20,magnesium=120,total_phenols=1.63,flavanoids=0.67,nonflavanoid_phenols=0.53,proanthocyanins=1.46,color_intensity=9.3,hue=0.6,od280/od315_of_diluted_wines=1.62,proline=840】的品種。任務(wù)目標(biāo)3葡萄酒品種預(yù)測3.2
任務(wù)分解import方式引入依賴的模塊檢查樣本分布、特征/標(biāo)簽類型、空值、重復(fù)行、屬性相互關(guān)系箱型圖可視化特征的空間分布依賴庫導(dǎo)入數(shù)據(jù)探查數(shù)據(jù)可視化觀察數(shù)據(jù)后,按照訓(xùn)練集和驗(yàn)證集4:1比例切分?jǐn)?shù)據(jù)集,然后保存訓(xùn)練好的KNN模型到硬盤,使用模型預(yù)測未知樣本的標(biāo)簽。3葡萄酒品種預(yù)測3.2
任務(wù)分解轉(zhuǎn)換Pandas類型到Numpy類型,轉(zhuǎn)換特征到(0,1)正態(tài)分布在訓(xùn)練集上訓(xùn)練KNN模型,并在驗(yàn)證集上評估模型精度用訓(xùn)練的模型預(yù)測標(biāo)簽未知的樣本數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練預(yù)測接上模型持久化模型保存到硬盤以待將來使用3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施3.3.1依賴庫導(dǎo)入步驟1:定義2級標(biāo)題。##<fontcolor="black">依賴庫導(dǎo)入</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:導(dǎo)入依賴庫。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearnimportneighborsfromsklearnimportmodel_selectionfromsklearnimportpreprocessingimportjoblibimportnumpyasnp3鳶尾花種類預(yù)測3.3
任務(wù)實(shí)施3.3.2數(shù)據(jù)探查步驟1:定義2級標(biāo)題。##<fontcolor="black">數(shù)據(jù)探查</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:讀入數(shù)據(jù)集文件到DataFrame對象。dataset=pd.read_csv("../data/wine.data")按“SHIFT+Enter”,檢查輸出無異常。步驟3:讀查看不同品種的樣本數(shù)。f"1類酒的樣本數(shù):{len(dataset[dataset.iloc[:,0]==1])},\2類酒的樣本數(shù):{len(dataset[dataset.iloc[:,0]==2])},\3類酒的樣本數(shù):{len(dataset[dataset.iloc[:,0]==3])}"3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施運(yùn)行結(jié)果如下:步驟4:查看樣本特征的統(tǒng)計(jì)值。dataset.iloc[:,1:14].describe()運(yùn)行結(jié)果如下:“alcohol”、“alcalinity_of_ash”和“magnesium”的取值范圍與其它特征的取值范圍顯著不同。3鳶尾花種類預(yù)測3.3
任務(wù)實(shí)施3.3.2數(shù)據(jù)可視化步驟1:定義2級標(biāo)題。#<fontcolor="black">數(shù)據(jù)可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:DataFrame.plot一次顯示所有特征的箱型圖。boxplot=dataset.iloc[:,1:14].plot(kind='box',subplots=True,layout=(4,4),sharex=False,sharey=False)運(yùn)行結(jié)果如下:子圖標(biāo)題有遮擋,調(diào)用subplots_adjust方法調(diào)整子圖的水平和垂直間距。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟3:手工添加子圖,調(diào)用boxplot方法在每個(gè)子圖窗口顯示特征的箱型圖。fig=plt.figure()fig.subplots_adjust(hspace=0.5,wspace=0.8)#加大子圖水平和垂直間距foriinrange(4):
forjinrange(4):
col_index=i*4+j+1
ifcol_index==14:
break3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施運(yùn)行結(jié)果如下: #和if左對齊 ax=fig.add_subplot(4,4,col_index) att_value=dataset.iloc[:,col_index].values#數(shù)據(jù)序列 att_label=dataset.iloc[:,col_index].name#列標(biāo)題 ax.boxplot(att_value,labels=[att_label])接上3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施13個(gè)特征有著不同的中心值,方差也不相同,需要通過數(shù)據(jù)轉(zhuǎn)換方法映射特征到相同的數(shù)據(jù)分布。3鳶尾花種類預(yù)測3.3
任務(wù)實(shí)施3.3.3數(shù)據(jù)轉(zhuǎn)換步驟1:定義2級標(biāo)題。#<fontcolor="black">數(shù)據(jù)轉(zhuǎn)換</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:從DataFrame對象中抽取特征和標(biāo)簽。X=dataset.iloc[:,1:14].valuesy=dataset.iloc[:,0].values按“SHIFT+Enter”,輸出無異常。步驟3:縮放特征服從正態(tài)分布。scaler=preprocessing.StandardScaler()norm_X=scaler.fit_transform(X)norm_X[0:5,...]3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施運(yùn)行結(jié)果如下:從轉(zhuǎn)換后的數(shù)據(jù)來看,特征已經(jīng)服從(0,1)正態(tài)分布。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟4:分割數(shù)據(jù)集,分成訓(xùn)練集和驗(yàn)證集(驗(yàn)證集占比0.2)。X_train,X_val,y_train,y_val=model_selection.train_test_split(norm_X,y,random_state=4,test_size=0.2)print('訓(xùn)練集樣本的個(gè)數(shù):',len(X_train))print('測試集樣本的個(gè)數(shù):',len(X_val))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3
任務(wù)實(shí)施3.3.5模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:建立KNN模型。knn_model=neighbors.KNeighborsClassifier(n_neighbors=5)按“SHIFT+Enter”,檢查輸出無異常步驟3:訓(xùn)練KNN模型。knn_model.fit(X_train,y_train)按“SHIFT+Enter”,檢查輸出無異常3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟4:在驗(yàn)證集上評估模型。acc=knn_model.score(X_val,y_val)f"模型評估準(zhǔn)確率:{acc:0.4f}"按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施3.3.6模型持久化步驟1:定義2級標(biāo)題。##<fontcolor="black">模型持久化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:保存模型到硬盤。scaler=joblib.load('wine_scaler.pkl')knn_model=joblib.load('wine_knn.pkl')按“SHIFT+Enter”,檢查輸出無異常。檢查當(dāng)前目錄,可以發(fā)現(xiàn)多了2個(gè)文件:wine_scaler.pkl包含特征的統(tǒng)計(jì)值,wine_knn.pkl保存了KNN模型結(jié)構(gòu)和參數(shù)。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟3:從硬盤加載模型到內(nèi)存。scaler=joblib.load('wine_scaler.pkl')knn_model=joblib.load('wine_knn.pkl')按“SHIFT+Enter”,檢查輸出無異常。步驟3不是必須的,只是為了演示持久化的模型加載到內(nèi)存的過程。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施3.3.7預(yù)測步驟1:定義2級標(biāo)題。#<fontcolor="black">測試</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟2:按照索引值定義標(biāo)簽列表。label_names=["1類","2類","3類"]按“SHIFT+Enter”,檢查輸出無異常。步驟3:構(gòu)建測試樣本。test_data=np.array([[13.17,2.58,2.37,20,120,1.63,.67,.53,1.46,9.3,.6,1.62,840]])按“SHIFT+Enter”,檢查輸出無異常。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟4:轉(zhuǎn)換測試樣本。norm_test_data=scaler.transform(test_data)按“SHIFT+Enter”,檢查輸出無異常。步驟5:在KNN模型上預(yù)測。y_pred=knn_model.predict(norm_test_data)[0]按“SHIFT+Enter”,檢查輸出無異常。3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟6:打印預(yù)測的葡萄酒品種。predict方法返回的是一個(gè)numpy數(shù)組,第一個(gè)元素就是label_names的index減1,因而列表索引從0開始。label_names[y_pred-1]按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟7:查找和目標(biāo)關(guān)系最密切的2個(gè)特征。dataset.corr()["target"]運(yùn)行結(jié)果如下:3葡萄酒品種預(yù)測3.3
任務(wù)實(shí)施步驟8:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年汽車板簧行業(yè)深度研究分析報(bào)告
- 2021-2026年中國發(fā)電機(jī)行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 2025年嬰幼兒棉鞋行業(yè)深度研究分析報(bào)告
- 供熱管網(wǎng)及供熱設(shè)施提升改造項(xiàng)目管理團(tuán)隊(duì)與職責(zé)分工
- 七年級語文的知識點(diǎn)總結(jié)
- 旅社承租合同范本
- 井蓋項(xiàng)目投資分析及可行性報(bào)告
- 中國壓鑄行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 家常美食撫人心
- 2025年農(nóng)藥乳化劑配制項(xiàng)目可行性研究報(bào)告
- 2025年上半年天津市寧河區(qū)事業(yè)單位招聘12人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2024年科技節(jié)小學(xué)科普知識競賽題及答案(共100題)
- 心肺復(fù)蘇課件
- 2024-2030年“一帶一路”背景下中國鐵塊礦產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報(bào)告
- 鋼包熱修工安全技術(shù)操作規(guī)程(3篇)
- 風(fēng)力發(fā)電廠土建工程施工組織設(shè)計(jì)
- 2024年云南省公務(wù)員錄用考試《行測》真題卷及答案解析
- 成人缺氧缺血性腦病護(hù)理
- 期末提優(yōu)測試卷(試題)-2024-2025學(xué)年四年級上冊數(shù)學(xué)青島版
- 風(fēng)機(jī)基礎(chǔ)監(jiān)理實(shí)施細(xì)則
- GB/T 24503-2024礦用圓環(huán)鏈驅(qū)動鏈輪
評論
0/150
提交評論