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

下載本文檔

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

文檔簡介

數(shù)據(jù)觀察數(shù)據(jù)清洗數(shù)據(jù)轉(zhuǎn)換SVM模型訓(xùn)練SVM模型預(yù)測參考書目《機(jī)器學(xué)習(xí)技術(shù)任務(wù)驅(qū)動式教程》基于支持向量機(jī)的分類預(yù)測模塊7機(jī)器學(xué)習(xí)技術(shù)目錄乳腺癌預(yù)測手寫數(shù)字識別傳感器連通預(yù)測小結(jié)習(xí)題七基于支持向量機(jī)的分類預(yù)測模塊7機(jī)器學(xué)習(xí)技術(shù)乳腺癌(breastcarcinoma,BC)是女性最常見的惡性腫瘤之一,據(jù)資料統(tǒng)計,發(fā)病率占全身各種惡性腫瘤的7-10%,因此早期發(fā)現(xiàn)及治療非常重要,對其檢測的關(guān)鍵挑戰(zhàn)是如何將腫瘤分為惡性(癌性)或良性(非癌性)。1.1任務(wù)描述1

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

乳腺癌預(yù)測字段類型允許為空標(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(對稱性平均、標(biāo)準(zhǔn)差、最差)float否否0.2419fractal_dimension_mean(分形維數(shù)平均、標(biāo)準(zhǔn)差、最差)float否否0.07871要求使用SVM和breast-cancer-kaggle.csv建立分類模型,預(yù)測病人腫瘤是良性還是惡性。任務(wù)目標(biāo)1

乳腺癌預(yù)測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ù),最后用實例解析SVM算法原理。1.2

任務(wù)分解文本轉(zhuǎn)換到數(shù)值;數(shù)據(jù)集切分為訓(xùn)練集和測試集;實施標(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實例解析接上1

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測3.3

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

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

任務(wù)實施步驟4:數(shù)據(jù)集拆分成訓(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運(yùn)行結(jié)果:1

乳腺癌預(yù)測1.3

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

任務(wù)實施,其中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ù)測步驟5:調(diào)用StandardScaler類標(biāo)準(zhǔn)化特征,特征標(biāo)準(zhǔn)化后服從(0,1)正態(tài)分布。標(biāo)準(zhǔn)化公式:

1.3

任務(wù)實施1

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

1.3

任務(wù)實施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ù)測1.3

任務(wù)實施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ù)測步驟7:調(diào)用PCA類降低數(shù)據(jù)維度,避免不相關(guān)特征帶來過擬合問題。運(yùn)行結(jié)果:1.3

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

乳腺癌預(yù)測1.3

任務(wù)實施步驟2:在訓(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ù)測1.3

任務(wù)實施步驟3:計算測試準(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ù)測1.3

任務(wù)實施步驟4:計算置信度(樣本到?jīng)Q策邊界的距離)。大于0預(yù)測為1,小于0預(yù)測為0,越大或越小表示預(yù)測結(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等價。1

乳腺癌預(yù)測支持向量機(jī)支持向量機(jī)(SupportVectorMachine,SVM)的基本原理:尋找一個分類器使得超平面和最近的數(shù)據(jù)點之間的分類邊緣(超平面和最近的數(shù)據(jù)點之間的間隔被稱為分類邊緣)最大。SVM算法通常認(rèn)為分類邊緣越大,平面越優(yōu),具有“最大間隔”的決策面就是SVM要尋找的最優(yōu)解。最優(yōu)解對應(yīng)兩側(cè)虛線要穿過的樣本點,稱為“支持向量”。支持向量機(jī)kernel=”linear”效果不好時再嘗試kernel=“rbf”,也可以用GridSearchCV嘗試其它的kernel。Sklearn庫的SVC類實現(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ù)。一般需要通過交叉驗證選擇一個合適的C。kernel:默認(rèn)值rbf

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

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

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

乳腺癌預(yù)測1.3

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

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

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

乳腺癌預(yù)測步驟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ù)實施運(yùn)行結(jié)果:1

乳腺癌預(yù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟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ù)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ù)測1.3

任務(wù)實施#畫函數(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ù)測1.3

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

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

任務(wù)實施1

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

任務(wù)實施1

乳腺癌預(yù)測步驟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ù)實施#最大邊距下界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ù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟8:可視化樣本和線性SVM的最大間隔。#畫散點圖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ù)實施#畫支持向量plt.scatter(svm_model.support_vectors_[:,0],svm_model.support_vectors_[:,1],edgecolor='b',s=80,facecolors='none')接上1

乳腺癌預(yù)測1.3

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

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

任務(wù)實施1

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

任務(wù)實施1

乳腺癌預(yù)測步驟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ù)實施1

乳腺癌預(yù)測步驟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ù)實施#最大邊距下界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]#畫散點圖plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)接上1

乳腺癌預(yù)測1.3

任務(wù)實施#畫函數(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ù)測1.3

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

乳腺癌預(yù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟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=a*x_fit-b/w[1]1.3

任務(wù)實施#最大邊距下界b_down=svm_model.support_vectors_[10]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]#畫散點圖plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)接上1

乳腺癌預(yù)測1.3

任務(wù)實施#畫函數(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ù)測1.3

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

乳腺癌預(yù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟13:定義3級標(biāo)題。###<fontcolor="black">線性不可分</font>運(yùn)行結(jié)果:步驟14:低維數(shù)據(jù)不可分時,映射到高維空間。定義4級標(biāo)題。###<fontcolor=“black”>超平面</font>1.3

任務(wù)實施1

乳腺癌預(yù)測運(yùn)行結(jié)果:步驟15:構(gòu)造線性不可分的模擬數(shù)據(jù)。X,y=make_circles(100,factor=.1,noise=.1,random_state=0)plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)1.3

任務(wù)實施運(yùn)行結(jié)果如下:如果遇到這樣的數(shù)據(jù)集,沒有辦法利用線性分類器進(jìn)行分類。1

乳腺癌預(yù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟16:可以將二維(低維)空間的數(shù)據(jù)映射到三維(高維)空間后,通過一個超平面劃分?jǐn)?shù)據(jù),目的在于使用SVM在高維空間找到超平面的能力。#畫出映射到3維空間的樣本r=np.exp(-(X[:,0]**2+X[:,1]**2))ax=plt.subplot(projection='3d')ax.scatter3D(X[:,0],X[:,1],r,c=y,s=50,cmap=plt.cm.Paired)ax.set_xlabel('x')1.3

任務(wù)實施ax.set_ylabel('y')ax.set_zlabel('z')#畫一個平面分隔樣本x_1,y_1=np.meshgrid(np.linspace(-1,1),np.linspace(-1,1))z=0.01*x_1+0.01*y_1+0.5ax.plot_surface(x_1,y_1,z,alpha=0.3)接上1

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測1.3

任務(wù)實施1

乳腺癌預(yù)測步驟17:在SVC中,可以用高斯核函數(shù)來實現(xiàn)這一功能:kernel='rbf'。#訓(xùn)練kernel="rbf"的SVC模型clf=SVC(kernel='rbf')clf.fit(X,y)#畫出樣本plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)#構(gòu)造meshgrid樣本x=np.linspace(-1,1)y=np.linspace(-1,1)1.3

任務(wù)實施x_1,y_1=np.meshgrid(x,y)P=np.zeros_like(x_1)fori,xiinenumerate(x):

forj,yjinenumerate(y): #計算meshgrid樣本的置信度

P[i,j]=clf.decision_function(np.array([[xi,yj]]))接上1

乳腺癌預(yù)測1.3

任務(wù)實施#畫出meshgrid等高線ax=plt.gca()ax.contour(x_1,y_1,P,colors='k',levels=[-1,0,0.9],alpha=0.5,linestyles=['--','-','--'])#畫出支持向量plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],edgecolor='b',s=80,facecolors='none')接上1

乳腺癌預(yù)測1.3

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

乳腺癌預(yù)測SVM優(yōu)缺點優(yōu)點缺點有嚴(yán)格的數(shù)學(xué)理論支持,可解釋性強(qiáng),不依靠統(tǒng)計方法,簡化算法流程;能找出對任務(wù)至關(guān)重要的關(guān)鍵樣本(即:支持向量);采用核技巧之后,可以處理非線性分類/回歸任務(wù);最終決策函數(shù)只由少數(shù)的支持向量所確定,計算的復(fù)雜性取決于支持向量的數(shù)目,而不是樣本空間的維數(shù),這在某種意義上避免了“維數(shù)災(zāi)難”。訓(xùn)練時間長。有些情況下(比如SMO)每次都需要挑選一對參數(shù),因此時間復(fù)雜度為O(N2),其中N為訓(xùn)練樣本的數(shù)量;當(dāng)采用核技巧時,如果需要存儲核矩陣,則空間復(fù)雜度為O(N2);模型預(yù)測時,預(yù)測時間與支持向量的個數(shù)成正比,當(dāng)支持向量較大時,預(yù)測計算復(fù)雜度較高。數(shù)據(jù)源由optdigits.tra和optdigits.tes組成,43人手寫的數(shù)字經(jīng)過MNIST提供的預(yù)處理程序處理,有30個人手寫數(shù)字包含在optdigits.tra(訓(xùn)練集),另外13個人手寫數(shù)字構(gòu)成optdigits.tes(測試集)。每個手寫數(shù)字32x32位圖劃分為4x4的非重疊塊,并在每個塊中計數(shù)可視化像素數(shù)量。最終,生成8x8的輸入矩陣,其中每個元素都是0到16范圍內(nèi)的整數(shù),這降低了尺寸并且恒等產(chǎn)生了小的變形。2.1任務(wù)描述2手寫數(shù)字識別2.1任務(wù)描述應(yīng)用SVM技術(shù),實現(xiàn)手寫數(shù)字自動識別功能。任務(wù)目標(biāo)下圖是一個0的8x8矩陣。樣本向量:(0,1,6,15,12,1,0,0,0,7,16,6,6,10,0,0,0,8,16,2,0,11,2,0,0,5,16,3,0,5,7,0,0,7,13,3,0,8,7,0,0,4,12,0,1,13,5,0,0,0,14,9,15,9,0,0,0,0,6,14,7,1,0,0)2手寫數(shù)字識別2.2

任務(wù)分解import方式引入依賴的模塊文件讀入到DataFrame對象DataFrame對象轉(zhuǎn)換到Numpy特征和標(biāo)簽依賴庫導(dǎo)入數(shù)據(jù)讀取數(shù)據(jù)轉(zhuǎn)換讀取文件到內(nèi)存后,在訓(xùn)練集上訓(xùn)練SVM模型,在測試集上評估模型,分析模型錯分樣本原因。2手寫數(shù)字識別2.2

任務(wù)分解構(gòu)建SVM模型,然后在訓(xùn)練集上訓(xùn)練模型,在測試集上評估模型精度使用交叉驗證方法在參數(shù)子空間中找到模型最優(yōu)參數(shù)使用模型的最優(yōu)參數(shù)重新在訓(xùn)練集上訓(xùn)練模型,在測試集上評估模型精度模型訓(xùn)練參數(shù)查找最優(yōu)模型訓(xùn)練接上可視化錯分樣本,分析錯誤樣本的特點,總結(jié)錯分規(guī)律最優(yōu)模型訓(xùn)練2手寫數(shù)字識別2.3

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

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportnumpyasnpfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimportGridSearchCVimportmatplotlib.pyplotaspltimportmatplotlibasmpl2手寫數(shù)字識別2.3

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

任務(wù)實施步驟2:讀取訓(xùn)練集。train_df=pd.read_csv("../data/optdigits.tra",dtype=int,header=None)train_df.describe()2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

任務(wù)實施步驟3:讀取測試集。test_df=pd.read_csv("../data/optdigits.tes",dtype=int,header=None)train_df.describe()2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

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

任務(wù)實施步驟2:訓(xùn)練數(shù)據(jù)轉(zhuǎn)換到Numpy類型。X_train=train_df.iloc[:,:-1].valuesy_train=train_df.iloc[:,-1].valuesX_train.shape,y_train.shape2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

任務(wù)實施步驟3:測試數(shù)據(jù)轉(zhuǎn)換到Numpy類型。X_test=test_df.iloc[:,:-1].valuesy_test=test_df.iloc[:,-1].valuesX_test.shape,y_test.shape2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

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

任務(wù)實施步驟2:建立SVM模型。model=SVC(kernel="rbf",random_state=0)model.fit(X_train,y_train)2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

任務(wù)實施步驟3:在測試集上評估模型。y_test_pred=model.predict(X_test)test_score=accuracy_score(y_test,y_test_pred)"測試準(zhǔn)確率:{:.2f}".format(test_score*100)2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

任務(wù)實施2.3.5參數(shù)查找調(diào)整SVC類初始化參數(shù)將影響模型性能,常用的初始化參數(shù)包括:kernel:核函數(shù)類型,常用值有"rbf"或"linear",默認(rèn)值是"rbf"。C:松弛系數(shù)的懲罰項系數(shù)。如果C值設(shè)定比較大,那SVC可能會選擇邊際較小的,能夠更好地分類所有訓(xùn)練點的決策邊界;如果C的設(shè)定值較小,那SVC會盡量最大化邊界,決策功能會更簡單,但代價是訓(xùn)練的準(zhǔn)確度。gamma:核函數(shù)的系數(shù),僅在參數(shù)kernel的選項為"rbf",“poly"和"sigmoid"的時候有效。接下來GridSearchCV搜索kernel和C值空間,找到最優(yōu)參數(shù)。2手寫數(shù)字識別2.3

任務(wù)實施步驟1:定義2級標(biāo)題。##<fontcolor="black">參數(shù)查找</font>2手寫數(shù)字識別運(yùn)行結(jié)果:步驟2:搜索kernel和C組合在訓(xùn)練集上的性能,找到最優(yōu)參數(shù)。params={"kernel":["rbf","linear"],"C":np.logspace(0,3,5)}model=GridSearchCV(SVC(random_state=0,gamma=4e-4),param_grid=params,cv=5)2.3

任務(wù)實施model.fit(X_train,y_train)print("最好的參數(shù)是:{},它的精確度:{:.2f}".format(model.best_params_,model.best_score_*100))接上2手寫數(shù)字識別運(yùn)行結(jié)果:numpy.logspaceNumpy中的logspace()函數(shù)可以在指定的范圍內(nèi)生成等比數(shù)列,以10為底數(shù)取對數(shù)。比如生成從10的0次方到10的4次方之間5個數(shù),可以使用logspace(0,4,5)函數(shù)。np.logspace(0,3,5)運(yùn)行結(jié)果:2.3

任務(wù)實施2.3.6最優(yōu)參數(shù)模型訓(xùn)練步驟1:定義2級標(biāo)題。##<fontcolor="black">最優(yōu)參數(shù)模型訓(xùn)練</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2手寫數(shù)字識別2.3

任務(wù)實施步驟2:在訓(xùn)練集上重新訓(xùn)練SVM模型。model=SVC(kernel=model.best_params_["kernel"],C=model.best_params_["C"],gamma=4e-4,random_state=0)model.fit(X_train,y_train)2手寫數(shù)字識別運(yùn)行結(jié)果:2.3

任務(wù)實施步驟3:在測試集上重新評估模型。y_test_pred=model.predict(X_test)test_score=accuracy_score(y_test,y_test_pred)"測試準(zhǔn)確率:{:.2f}".format(test_score*100)2手寫數(shù)字識別運(yùn)行結(jié)果:最優(yōu)參數(shù)訓(xùn)練的模型與默認(rèn)參數(shù)訓(xùn)練的模型相比,從97.61提到到97.83。2.3

任務(wù)實施2.3.7錯分樣本可視化步驟1:定義2級標(biāo)題。##<fontcolor="black">錯分樣本可視化</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2手寫數(shù)字識別2.3

任務(wù)實施步驟2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']2手寫數(shù)字識別步驟3:篩選預(yù)測錯誤的圖片數(shù)據(jù)。err_images=X_test[y_test!=y_test_pred]err_y_hat=y_test_pred[y_test!=y_test_pred]err_y=y_test[y_test!=y_test_pred]2.3

任務(wù)實施步驟4:顯示預(yù)測錯誤的數(shù)字圖片。forindex,imageinenumerate(err_images):

image=image.reshape(8,8)

ifindex>=12:

#只顯示12張圖片

break

#在index+1位置顯示數(shù)字圖片

plt.subplot(3,4,index+1) plt.imshow(image,cmap=plt.cm.gray_r,interpolation='nearest')2手寫數(shù)字識別2.3

任務(wù)實施 plt.title('{}錯分為{}'.format(err_y[index],err_y_hat[index]))plt.tight_layout()接上2手寫數(shù)字識別運(yùn)行結(jié)果:從圖中看出,7錯分最常見,經(jīng)常錯分到5或9。本次數(shù)據(jù)為半導(dǎo)體制造工藝數(shù)據(jù)集,數(shù)據(jù)集包括3個文件:sensor_train.csv、sensor_test.csv、sensor_test_label.csv。訓(xùn)練文件(train.csv)

1253個樣本,每個樣本包含591個特征和1個標(biāo)簽(0:成功,1:失敗)。測試文件(sensor_test.csv)

314個樣本,每個樣本包含591個特征。3.1任務(wù)描述3

傳感器連通預(yù)測3.1任務(wù)描述應(yīng)用SVM技術(shù),訓(xùn)練一個可以智能監(jiān)測半導(dǎo)體制造過程的分類模型,評估傳感器內(nèi)部線測試是否順利通過(二值分類問題),并在測試數(shù)據(jù)集上嘗試獲得最優(yōu)結(jié)果。任務(wù)目標(biāo)測試標(biāo)簽文件(sensor_test_label.csv)314個分類標(biāo)簽,其中傳遞失敗記錄20個(labels為1)、傳遞成功記錄294個(labels為0),通過第1列的索引對應(yīng)測試文件(sensor_test.csv)的樣本特征。3

傳感器連通預(yù)測3.2

任務(wù)分解import方式引入依賴的模塊文件讀入到DataFrame對象在原有特征基礎(chǔ)上構(gòu)造統(tǒng)計特征依賴庫導(dǎo)入數(shù)據(jù)探查特征工程讀取文件到內(nèi)存后,在訓(xùn)練集上采用交叉驗證找到SVM模型的最優(yōu)參數(shù),訓(xùn)練最優(yōu)參數(shù)的分類模型,可視化模型在測試集上的AUC曲線。刪除任務(wù)無關(guān)或冗余的字段數(shù)據(jù)清洗3

傳感器連通預(yù)測3.2

任務(wù)分解數(shù)據(jù)集切分為訓(xùn)練集和測試集,實施標(biāo)準(zhǔn)化轉(zhuǎn)換、歸一化轉(zhuǎn)換和降維構(gòu)建SVM模型,然后在訓(xùn)練集上訓(xùn)練模型,在測試集上評估模型使用交叉驗證方法在參數(shù)子空間中找到模型最優(yōu)參數(shù)數(shù)據(jù)轉(zhuǎn)換模型訓(xùn)練參數(shù)查找接上重新在訓(xùn)練集上訓(xùn)練最優(yōu)模型,在測試集上評估模型,可視化ROC曲線最優(yōu)模型訓(xùn)練3

傳感器連通預(yù)測3.3

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

傳感器連通預(yù)測3.3

任務(wù)實施步驟2:導(dǎo)入依賴庫。importpandasaspdimportnumpyasnpfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimportGridSearchCVimportmatplotlib.pyplotaspltimportmatplotlibasmpl3

傳感器連通預(yù)測3.3

任務(wù)實施fromsklearn.preprocessingimportStandardScaler,Normalizerfromsklearn.decompositionimportPCAfromsklearn.metricsimportroc_auc_score,roc_curvefromscipy.statsimportmedian_abs_deviation接上3

傳感器連通預(yù)測3.3

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

傳感器連通預(yù)測3.3

任務(wù)實施步驟2:定義3級標(biāo)題。3

傳感器連通預(yù)測###<fontcolor="black">訓(xùn)練集</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟3:讀取訓(xùn)練集。train_df=pd.read_csv("../data/sensor_train.csv",index_col=0,parse_dates=['timestamp'])train_df.shape2.3

任務(wù)實施按“SHIFT+Enter”,運(yùn)行結(jié)果如下:2手寫數(shù)字識別步驟4:查看前5個樣本。train_df.head()運(yùn)行結(jié)果如下,其中列”timestamp”解析為datetime格式。3.3

任務(wù)實施步驟5:查看字段類型。3

傳感器連通預(yù)測train_()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:表明訓(xùn)練集有1253個樣本,592個字段,labels字段是標(biāo)簽。3.3

任務(wù)實施步驟6:定義3級標(biāo)題。3

傳感器連通預(yù)測###<fontcolor="black">測試集</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟7:讀取測試集。test_df=pd.read_csv("../data/sensor_test.csv",index_col=0,parse_dates=['timestamp'])test_df.shape3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟8:查看前5個樣本。test_df.head()運(yùn)行結(jié)果如下。測試集比訓(xùn)練集少了標(biāo)簽字段。3.3

任務(wù)實施步驟9:查看字段類型。3

傳感器連通預(yù)測test_()按“SHIFT+Enter”,運(yùn)行結(jié)果如下:表明測試集有314個樣本,591個字段。另外,測試集和訓(xùn)練集的索引唯一,合并后的索引用來關(guān)聯(lián)來源。3.3

任務(wù)實施3.3.3特征工程從原有特征構(gòu)造新特征。步驟1:定義2級標(biāo)題。##<fontcolor="black">特征工程</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3

傳感器連通預(yù)測3.3

任務(wù)實施步驟2:訓(xùn)練集刪除列"label"后與測試集按行合并。3

傳感器連通預(yù)測all_df=pd.concat([train_df.drop('labels',axis=1),test_df])all_df.shape按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟3:按照索引升序排列all_df。all_df=all_df.sort_index()all_df.head()3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟4:定義feature_engineering函數(shù)構(gòu)造新特征。deffeature_engineering(data):

new_data=pd.DataFrame()

new_data["count(x)"]=data.count(axis=1)#非NAN個數(shù)

new_data["sum(x)"]=data.iloc[:,1:].sum(axis=1)#和3.3

任務(wù)實施 new_data["mean(x)"]=data.iloc[:,1:].mean(axis=1)#均值 new_data["mad(x)"]=median_abs_deviation(data.iloc[:,1:],axis=1,nan_policy="omit")#中位絕對離差 new_data[“median(x)”]=data.iloc[:,1:].median(axis=1)#中位數(shù) new_data[“min(x)”]=data.iloc[:,1:].min(axis=1)#按行取最小值 new_data[“max(x)”]=data.iloc[:,1:].max(axis=1)#按行取最大值 new_data[“prod(x)”]=data.iloc[:,1:].prod(axis=1)#按行取乘積 new_data[“std(x)”]=data.iloc[:,1:].std(axis=1)#按行求標(biāo)準(zhǔn)差接上3

傳感器連通預(yù)測3.3

任務(wù)實施 new_data[“var(x)”]=data.iloc[:,1:].var(axis=1)#按行求無偏誤差 new_data[“skew(x)”]=data.iloc[:,1:].skew(axis=1)#按行求無偏偏度 new_data[“kurt(x)”]=data.iloc[:,1:].kurt(axis=1)#按行求無偏峰度 new_data["month(timestamp)"]=data["timestamp"].dt.month#月份 new_data["day(timestamp)"]=data["timestamp"].dt.day#日

new_data["hour(timestamp)"]=data["timestamp"].dt.hour#小時 new_data["weekday(timestamp)"]=data["timestamp"].dt.weekday#星期 returnnew_data接上3

傳感器連通預(yù)測3.3

任務(wù)實施3

傳感器連通預(yù)測new_features=feature_engineering(all_df)步驟5:新特征添加到數(shù)據(jù)集。print("原數(shù)據(jù)集形狀:{}".format(all_df.shape))features=pd.concat([all_df,new_features],axis=1)print("添加新特征后的數(shù)據(jù)集形狀:{}".format(features.shape))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

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

傳感器連通預(yù)測3.3

任務(wù)實施步驟3:用0填充空值。features=features.fillna(0)3

傳感器連通預(yù)測步驟2:month(timestamp)/day(timestamp)/hour(timestamp)/weekday(timestamp)包含”timestamp",刪除”timestamp”。features=features.drop('timestamp',axis=1)3.3

任務(wù)實施3.3.5數(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ù)實施3

傳感器連通預(yù)測步驟2:從新數(shù)據(jù)集中拆分成訓(xùn)練集和測試集,DataFrame.index對應(yīng)數(shù)據(jù)來源。X_train=features.iloc[train_df.index,:]X_test=features.iloc[test_df.index,:]X_train.shape,X_test.shape按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3

傳感器連通預(yù)測步驟3:標(biāo)準(zhǔn)化數(shù)據(jù)。scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)print("原數(shù)據(jù)為:\n",X_train.iloc[0,0:5])print("標(biāo)準(zhǔn)化后的數(shù)據(jù)為:\n",X_train_scaled[0][0:5])按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟4:正則化數(shù)據(jù)。normalizer=Normalizer()X_train_normalized=normalizer.fit_transform(X_train_scaled)X_test_normalized=normalizer.transform(X_test_scaled)print("正則化后的數(shù)據(jù)為:\n",X_train_normalized[0][0:5])3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟5:特征太多影響預(yù)測,降低維度到20。pca=PCA(n_components=20,random_state=0)X_train_decomposed=pca.fit_transform(X_train_normalized)X_test_decomposed=pca.transform(X_test_normalized)X_train_decomposed.shape,X_test_decomposed.shape按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

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

傳感器連通預(yù)測3.3

任務(wù)實施3

傳感器連通預(yù)測步驟2:讀入訓(xùn)練集和測試集標(biāo)簽。y_train=train_df.loc[:,"labels"].valuestest_label_data=pd.read_csv("../data/sensor_test_label.csv",index_col=0)y_test=test_label_data.loc[:,"labels"]步驟3:在訓(xùn)練集上訓(xùn)練SVM模型。model=SVC(kernel='rbf',random_state=0)model.fit(X_train_decomposed,y_train)3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟4:在測試集上評估模型。y_test_pred=model.predict(X_test_decomposed)test_score=accuracy_score(y_test,y_test_pred)"準(zhǔn)確率:{:.2f}".format(test_score*100)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3

傳感器連通預(yù)測步驟5:準(zhǔn)確率很高,但AUC未必。test_auc=roc_auc_score(y_test,y_test_pred)"AUC:{}".format(test_auc)按“SHIFT+Enter”,運(yùn)行結(jié)果如下:監(jiān)督學(xué)習(xí)性能指標(biāo)TP是預(yù)測值和真值都為1的樣本數(shù),F(xiàn)N是預(yù)測值為0但真值為1的樣本數(shù),F(xiàn)P是預(yù)測值為1但真值為0的樣本數(shù),TN是預(yù)測值和真值都為0的樣本數(shù)。常用的監(jiān)督學(xué)習(xí)性能評價指標(biāo)有:準(zhǔn)確率召回率ROC曲線精確率AUC監(jiān)督學(xué)習(xí)性能指標(biāo)

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

監(jiān)督學(xué)習(xí)性能指標(biāo)5.AUCAUC的全稱是“AreaundertheCurveofROC”,即為ROC曲線下的面積。當(dāng)樣本分布不平衡時,只用準(zhǔn)確率往往不能反映分類器的好壞。比如數(shù)據(jù)集有9個正類樣本(真值為0)、1個負(fù)類樣本(真值為1),最簡單的分類器就是把所有的樣本都預(yù)測為0,那么精度就是90%,顯然這樣的分類器沒有價值。如果我們用AUC評價這個最簡單的分類器就會發(fā)現(xiàn),ROC就是1條斜率為1的斜線,AUC是ROC曲線下的面積,即0.5。分類器只有大于0.5時才有價值,這就為我們提供了一個除精度以外的性能指標(biāo)。3.3

任務(wù)實施3.3.7參數(shù)查找接下來GridSearchCV搜索C和gamma的取值空間,找到模型AUC指標(biāo)最好的參數(shù)步驟1:定義2級標(biāo)題。##<fontcolor="black">參數(shù)查找</font>按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3

傳感器連通預(yù)測3.3

任務(wù)實施3

傳感器連通預(yù)測步驟2:查看樣本標(biāo)簽的分布。ir=np.sum(y_train==0)/np.sum(y_train==1)f"不平衡率:{ir:.2f}"結(jié)果表明正負(fù)類樣本嚴(yán)重不平衡,嘗試設(shè)置class_weight參數(shù)。按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3

傳感器連通預(yù)測步驟3:評估class_weight=14時模型的測試準(zhǔn)確率。model=SVC(kernel='rbf',class_weight={0:1,1:14},random_state=0)model.fit(X_train_decomposed,y_train)y_test_pred=model.predict(X_test_decomposed)print("準(zhǔn)確率:{:.2f}".format(test_score*100))test_auc=roc_auc_score(y_test,y_test_pred)print("AUC:{:.4f}".format(test_auc))按“SHIFT+Enter”,運(yùn)行結(jié)果如下:3.3

任務(wù)實施3

傳感器連通預(yù)測按“SHIFT+Enter”,運(yùn)行結(jié)果如下:步驟4:查找最優(yōu)C和gamma參數(shù)。params={"C":np.logspace(0,3,3),"gamma":np.logspace(-3,0,3)}gs=GridSearchCV(SVC(kernel='rbf',class_weight={0:1,1:14},random_state=0),param_grid=params,cv=5,scoring="roc_auc")gs.fit(X_train_decomposed,y_train)3.3

任務(wù)實施

溫馨提示

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

評論

0/150

提交評論