版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章模型評(píng)估及改進(jìn)6.1交叉驗(yàn)證6.2網(wǎng)格搜索6.3評(píng)估指標(biāo)6.4小結(jié)6.1交叉驗(yàn)證
對(duì)于給定的數(shù)據(jù)來(lái)說(shuō),我們無(wú)法知道哪些數(shù)據(jù)是正確的,哪些數(shù)據(jù)是錯(cuò)誤的。對(duì)于一個(gè)數(shù)據(jù)集來(lái)說(shuō),假定其中有40%的錯(cuò)誤數(shù)據(jù),那么當(dāng)我們隨機(jī)劃分?jǐn)?shù)據(jù)的時(shí)候,如果70%的訓(xùn)練數(shù)據(jù)中有40%的錯(cuò)誤數(shù)據(jù)和30%的數(shù)據(jù),可以肯等的是,這個(gè)模型的得分一定不會(huì)太高,但你不能因此就認(rèn)為你根據(jù)某個(gè)算法所構(gòu)建的模型不適合這個(gè)數(shù)據(jù),進(jìn)而更改其他不適太完美的算法。所以這時(shí)我們就應(yīng)該對(duì)模型進(jìn)行交叉驗(yàn)證。
交叉驗(yàn)證(CrossValidation)又稱循環(huán)估計(jì)是統(tǒng)計(jì)學(xué)上將數(shù)據(jù)樣本切割成K小子集,利用不同的數(shù)據(jù)來(lái)訓(xùn)練多個(gè)同一模型,每一次訓(xùn)練時(shí),選取大部分?jǐn)?shù)據(jù)進(jìn)行建模,保留小部分?jǐn)?shù)據(jù)來(lái)進(jìn)行評(píng)估。它比用train-test-split方法單次劃分?jǐn)?shù)據(jù)更加穩(wěn)定、全面。K折交叉驗(yàn)證
K折交叉驗(yàn)證是交叉驗(yàn)證中常用的一種方法,其原理是現(xiàn)將數(shù)據(jù)劃分成K段,每一段稱之為這個(gè)數(shù)據(jù)的折,這樣我們就得到了K個(gè)分段數(shù)據(jù),接下來(lái)則進(jìn)行K輪建模訓(xùn)練。第一輪訓(xùn)練以第2~K個(gè)數(shù)據(jù)為訓(xùn)練集,用第1個(gè)數(shù)據(jù)作為測(cè)試集,第二輪訓(xùn)練以第1和第3~K個(gè)數(shù)據(jù)為訓(xùn)練集,第2個(gè)數(shù)據(jù)為測(cè)試集,然后以此類推進(jìn)行K輪訓(xùn)練,并記錄下來(lái)每輪的得分情況,從而幫助我們對(duì)我們所構(gòu)建的模型進(jìn)行跟為全面的分析。這張圖便是出交叉驗(yàn)證的原理K折交叉驗(yàn)證,其實(shí)現(xiàn)方法是sklearn.model_selection中的cross_val_score方法通常情況下我們基本上只用前三個(gè)參數(shù)和cv參數(shù),estimate是你評(píng)估這個(gè)模型的算法也是你構(gòu)建模型的算法,cv的作用是將數(shù)據(jù)化分成幾段去進(jìn)行交叉驗(yàn)證。下面我們以sklearn中的wine數(shù)據(jù)集為例,進(jìn)行交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.datasetsimportload_winefromsklearn.linear_modelimportLogisticRegressionwine=load_wine()lgr=LogisticRegression()score=cross_val_score(lgr,wine.data,wine.target)print(score)print(score.mean())輸出:[0.888888890.944444440.944444441.1.]0.9555555555555555
這里cross_val_score中的cv參數(shù)默認(rèn)等于5,我們可以通過(guò)更改cv的值來(lái)選擇我們將數(shù)據(jù)劃分為多少折。分層K折交叉檢驗(yàn)
上面一節(jié)我們學(xué)習(xí)了用K折交叉驗(yàn)證這種更為全面高效的方法去進(jìn)行模型檢驗(yàn),那么請(qǐng)讀者來(lái)思考這樣一個(gè)問(wèn)題:使用K折交叉檢驗(yàn)還會(huì)不會(huì)出現(xiàn)類似train-test-split一樣糟糕的情況?答案是會(huì)的,使用K折交叉檢驗(yàn)依然會(huì)出現(xiàn)這種情況。就以wine數(shù)據(jù)集為例,讓我們來(lái)看看wine的target[0000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222]
我們可以看到,wine的target是根據(jù)紅酒的品質(zhì)來(lái)排列的,品質(zhì)為“0”的酒有48個(gè),品質(zhì)為“1”的酒有71個(gè),剩下的59個(gè)是品質(zhì)為“2”的酒?,F(xiàn)在我們剔除品質(zhì)為“1”的酒,在運(yùn)行一遍K折交叉檢驗(yàn)。scores=cross_val_score(lgr,x,y)輸出:scores:[1.1.1.1.1.]score.mean=1.0
我們可以看到這樣一個(gè)有趣的現(xiàn)象,接下來(lái)請(qǐng)讀者自行思考一遍為什么會(huì)出現(xiàn)這樣的原因。對(duì),沒錯(cuò),正如你所想,剔除品質(zhì)為“1”的酒后,樣本總數(shù)只剩下107個(gè)且品質(zhì)“0”:“2”≈“1”:“1”,假如我們忽略剩下的七個(gè),進(jìn)行五等分,那么每個(gè)五等分后每個(gè)小段對(duì)應(yīng)的酒的品質(zhì)都是相同的。
下面我們來(lái)模擬交叉訓(xùn)練的第一輪,以第一個(gè)折為測(cè)試集(全為品質(zhì)為“0”的酒),以2~5個(gè)折為訓(xùn)練集(品質(zhì)“0”:品質(zhì)“2”≈“3”:“5”),所以用這種數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練和檢測(cè),實(shí)質(zhì)上就等同于用訓(xùn)練集訓(xùn)練,再用訓(xùn)練集進(jìn)行打分。所以會(huì)出現(xiàn)上述的結(jié)果。那么,該如何避免這種情況呢?
這時(shí)我們可以用分層K折交叉檢驗(yàn)。分層K折交叉檢驗(yàn)的原理和K折交叉檢驗(yàn)的原理相同,只不過(guò)在取測(cè)試集和訓(xùn)練集的地方稍有不同。不再是選擇一整個(gè)折作為測(cè)試集,剩下的折作為訓(xùn)練集,而是在每個(gè)折中選取前A%的數(shù)據(jù)作為測(cè)試集,每個(gè)折剩下的(1-A%)作為訓(xùn)練集,這樣就能盡量的避免上述的情況出現(xiàn)。下面我們來(lái)看實(shí)現(xiàn)數(shù)據(jù):剔除了品質(zhì)為“1”的酒的wine.data和wine.target數(shù)據(jù)x=[]y=[]fori,valueinenumerate(wine.target):if(value!=1):x.append(wine.data[i])y.append(wine.target[i])x=np.array(x)y=np.array(y)scores=cross_val_score(lgr,x,y)print("scores:{}".format(scores))print("score.mean={}".format(scores.mean()))fromsklearn.model_selectionimportKFoldscores=cross_val_score(lgr,x,y,cv=KFold())print(scores)print(scores.mean())輸出:[1.1.0.952380950.952380951.]0.980952380952381我們可以看到,盡管還是會(huì)出現(xiàn)scores=1的情況,但是出現(xiàn)的次數(shù)比之前少了兩個(gè),因?yàn)檫@是必然的,我們的樣本數(shù)據(jù)太少(只有107個(gè)),但是如果數(shù)據(jù)足夠多,出現(xiàn)這種情況的概率就會(huì)大大降低。這里我們導(dǎo)入了sklearn中的KFold分離器類,作用是將數(shù)據(jù)按層分離,可以通過(guò)n_split去控制分成幾折。留一交叉驗(yàn)證和打亂劃分和分組交叉驗(yàn)證
留一交叉驗(yàn)證(Leave-One-Out)也是交叉驗(yàn)證中比較常用的一個(gè)方法,其原理是將數(shù)據(jù)劃分成K折,在單獨(dú)的一個(gè)折將單個(gè)數(shù)據(jù)點(diǎn)作為測(cè)試集進(jìn)行打分。對(duì)于小數(shù)據(jù)來(lái)說(shuō)這種方法可能比前兩種方法還要好,但是對(duì)于大數(shù)據(jù)來(lái)說(shuō),這種方法則非常耗時(shí)。下面我們還是以wine數(shù)據(jù)集來(lái)看其實(shí)現(xiàn):fromsklearn.model_selectionimportLeaveOneOutloo=LeaveOneOut()scores=cross_val_score(lgr,wine.data,wine.target,cv=loo)print("scores_numbers:{}".format(len(scores)))print("score.mean={}".format(scores.mean()))輸出:scores_numbers:178score.mean=0.9606741573033708
由于留一交叉驗(yàn)證是對(duì)單個(gè)數(shù)據(jù)點(diǎn)進(jìn)行交叉驗(yàn)證的,所以這里我們就不展示單個(gè)數(shù)據(jù)點(diǎn)的打分情況(正確為1,錯(cuò)誤為零),可以看到留一交叉驗(yàn)證對(duì)每個(gè)數(shù)據(jù)點(diǎn)都進(jìn)行了打分,且大部分的數(shù)據(jù)都是正確的,說(shuō)明LogisticRegression可以用在我們的模型上對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)。打亂劃分交叉驗(yàn)證
打亂劃分交叉驗(yàn)證也是交叉驗(yàn)證中的一種方法,其原理是對(duì)于一整個(gè)數(shù)據(jù)集,每次選取train_size%的數(shù)據(jù)作為訓(xùn)練集,test_size%的數(shù)據(jù)作為測(cè)試集進(jìn)行訓(xùn)練并打分,訓(xùn)練集和測(cè)試集選取的地方并不交叉,共進(jìn)行n次。
train_size和test_size可以是整數(shù)也可以是浮點(diǎn)數(shù),整數(shù)表示選擇多少個(gè)數(shù)據(jù)點(diǎn)作為訓(xùn)練集和數(shù)據(jù)集,但不應(yīng)超過(guò)整個(gè)數(shù)據(jù)集的規(guī)模。浮點(diǎn)數(shù)表示選取數(shù)據(jù)集的K%作為訓(xùn)練集和測(cè)試集,同樣訓(xùn)練集和測(cè)試集加和不應(yīng)超過(guò)1。下面我們還是以wine數(shù)據(jù)集來(lái)看其實(shí)現(xiàn)train_size和test_size取整數(shù):fromsklearn.model_selectionimportShuffleSplitshusffle_split=ShuffleSplit(n_splits=5,test_size=25,train_size=125,random_state=0)scores=cross_val_score(lgr,wine.data,wine.target,cv=shusffle_split)print("scores:{}".format(scores))print("score.mean={}".format(scores.mean()))輸出:scores:[0.920.840.960.960.92]score.mean=0.9199999999999999train_size和test_size取浮點(diǎn)數(shù):輸出:scores:[0.933333330.888888890.933333330.977777780.93333333]score.mean=0.93333333333333336.2網(wǎng)格搜索
在上一節(jié)我們學(xué)習(xí)到了如何對(duì)一個(gè)模型的泛化能力進(jìn)行全面的評(píng)估,但是請(qǐng)讀者思考一個(gè)問(wèn)題:一個(gè)模型的泛化能力弱是不是說(shuō)明你所構(gòu)建的模型的核心算法不對(duì)?
答案肯定是否定的,一個(gè)模型的泛化能力弱可能有多個(gè)影響因素,例如數(shù)據(jù)樣本的大小、數(shù)據(jù)的準(zhǔn)確性、算法的參數(shù)等問(wèn)題。如果模型交叉驗(yàn)證的得分較低,先不要著急否定你的模型,嘗試著去找出問(wèn)題的所在。下面我們來(lái)學(xué)習(xí)如何通過(guò)改變模型的參數(shù)來(lái)提高模型的泛化能力。通過(guò)改變參數(shù)來(lái)提升模型的泛化能力,我們最常用的方法就是網(wǎng)格搜索。那么什么是網(wǎng)格搜索呢?我們以一個(gè)簡(jiǎn)單的網(wǎng)格搜索為例,假設(shè)一個(gè)模型中存在參數(shù)A
和參數(shù)B
,那么參數(shù)的取值就有100*100中可能。所以我們就可以把參數(shù)A和參數(shù)B以100*100的網(wǎng)格來(lái)列出來(lái)(如下圖),不斷的去進(jìn)行嘗試,最終求出最佳的參數(shù)使得模型的泛化能力最強(qiáng)。Python實(shí)現(xiàn)就是通過(guò)兩個(gè)for循環(huán)不斷的進(jìn)行建模打分求出最優(yōu)參數(shù),而這就是一個(gè)簡(jiǎn)單的網(wǎng)格搜索。下面我們以sklearn中的iris數(shù)據(jù)集和具有RBF核的核SVM為例,介紹網(wǎng)格搜索的實(shí)現(xiàn)。fromsklearn.svmimportSVCfromsklearn.model_selectionimportcross_val_score,KFoldfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitiris=load_iris()train_x,test_x,train_y,test_y=train_test_split(iris.data,iris.target,random_state=0)best_score=0best_C=0best_gamma=0Gamma=[x/100forxinrange(1,100)]C=GammaforgammainGamma:forcinC:svm=SVC(gamma=gamma,C=c)svm.fit(train_x,train_y)score=svm.score(test_x,test_y)ifscore>best_score:best_score=scorebest_C=cbest_gamma=gammaprint(best_score)print("best_C:{0}\nbest_gamma:{1}".format(best_C,best_gamma))輸出:0.9736842105263158best_C:0.76best_gamma:0.02我們可以將數(shù)據(jù)可視化們可以發(fā)現(xiàn),gamma的值越小、C的值越大,那么score的值就越大。所以,接下來(lái)我們可以縮小范圍,增大參數(shù)精度,再次進(jìn)行建模。Gamma=[x/10000forxinrange(100,300)]C=[x/1000forxinrange(700,800)]我們將gamma的范圍縮小至[0.01,0.03],將C的范圍縮小至[0.7,0.8],再次進(jìn)行建模。0.9736842105263158best_C:0.799best_gamma:0.019此時(shí),我們可以看到參數(shù)gamma的變化不大,只有0.001,而參數(shù)C則變化了0.0399,所以我們大致就可以認(rèn)為C=0.76,gamma=0.02,就是這個(gè)模型的最佳參數(shù)。我們可以再次將數(shù)據(jù)可視化
可以看到,gamma和C的微小變動(dòng)對(duì)score的影響不是很大。
兩次用SVM構(gòu)建的模型得平均分是97分,確實(shí),不進(jìn)行交叉驗(yàn)證之前這確實(shí)是一個(gè)非常好的模型。所以,接下來(lái)我們對(duì)模型進(jìn)行交叉驗(yàn)證scores=cross_val_score(SVC(C=best_C,gamma=best_gamma),iris.data,iris.target,cv=KFold())print(scores)print(scores.mean())這里我們使用了分層K折交叉驗(yàn)證來(lái)對(duì)模型進(jìn)行評(píng)估,我想讀者一定可以猜到這個(gè)模型的得分并不是那么理想,讓我們來(lái)看一下結(jié)果。[1.0.966666670.333333330.866666670.3]0.6933333333333334沒錯(cuò)!平均得分只有0.69,這說(shuō)明了我們利用網(wǎng)格搜索所得出的參數(shù)構(gòu)建的模型存在過(guò)擬合現(xiàn)象。從交叉驗(yàn)證每一折的得分中我們可以看出,由我們找到的最佳參數(shù)構(gòu)建的模型過(guò)度依賴于一部分?jǐn)?shù)據(jù)(居然有0.96的得分),并且對(duì)大部分?jǐn)?shù)據(jù)并不敏感,有兩段數(shù)據(jù)的得分只有0.3。那么如何避免模型存在過(guò)擬合的現(xiàn)象呢?我們可以使用同時(shí)使用網(wǎng)格搜索和交叉檢驗(yàn),這樣就可以避免模型存在過(guò)擬合的現(xiàn)象從而找出最佳參數(shù)fromsklearn.svmimportSVCfromsklearn.model_selectionimportcross_val_score,KFoldfromsklearn.datasetsimportload_irisiris=load_iris()best_score=0best_C=0best_gamma=0best_score_part=[]Gamma=[x/100forxinrange(1,100)]C=GammaforgammainGamma:forcinC:score=cross_val_score(SVC(C=c,gamma=gamma),iris.data,iris.target,cv=KFold())ifscore.mean()>best_score:best_score_part=scorebest_score=score.mean()best_C=cbest_gamma=gammaprint(best_score)print("best_C:{0}\nbest_gamma:{1}\nbest_score_part:{2}".format(best_C,best_gamma,best_score_part))輸出:0.9333333333333333best_C:0.96best_gamma:0.17best_score_part:[1.1.0.866666670.966666670.83333333]我們?cè)俅螌?shù)據(jù)可視化
由于在(0.17,0.96,0.93)旁邊的數(shù)據(jù)點(diǎn)較多,所以在這張圖中我們看不太清楚最佳參數(shù)點(diǎn)的位置,但是據(jù)圖分析,在交叉驗(yàn)證的輔助下,我們可以發(fā)現(xiàn)參數(shù)C越靠近0.96,score的值就越大,gamma越靠近0,score的值越大平均得分為0.93,雖然比0.97低了一點(diǎn),但是我們可以對(duì)比兩次模型選擇的參數(shù),可以看到兩次選擇的參數(shù)相差很大但是卻降低模型過(guò)擬合的風(fēng)險(xiǎn)。所以我們?cè)俅握{(diào)整參數(shù)的取值范圍,參數(shù)gamma取值為[0.01,0.4],參數(shù)C的取值為[0.9,2.0],再次進(jìn)行建模Gamma=[x/100forxinrange(1,40)]C=[x/100forxinrange(90,200)]此時(shí)我們可以看到:0.9333333333333333best_C:1.98best_gamma:0.08best_score_part:[1.1.0.866666670.966666670.83333333]我們?cè)俅螌?shù)據(jù)可視化這時(shí)我們可以看到,模型的平均得分并沒有改變,改變的只有參數(shù)gamma和參數(shù)C的取值。隨著C的增大,gamma有著縮小的趨勢(shì),所以我們?cè)俅螖U(kuò)大C的取值。C=[x/100forxinrange(300,1000)]結(jié)果:0.9400000000000001best_C:9.23best_gamma:0.05best_score_part:[1.1.0.866666670.966666670.86666667]但是當(dāng)我們將C增大到一定程度的時(shí)候,乎沒有什么變化,所以我們就可以選擇C=9.23,gamma=0.05為最佳參數(shù)。
當(dāng)然我們還可以使用另一種方法去選擇最佳參數(shù),sklearn庫(kù)中為我們提供了GridSearchCV類,我們可以使用GridSearchCV來(lái)獲取最佳參數(shù)。GridSearchCV可以為指定參數(shù)在給定的數(shù)值范圍內(nèi)自動(dòng)選取最佳的參數(shù),通常情況下我們指定參數(shù)都是構(gòu)建一個(gè)帶有我們想要選取最佳參數(shù)的參數(shù)名稱和參數(shù)值的字典6.3評(píng)估指標(biāo)在前面的兩節(jié)中,我們討論了如何用精度來(lái)評(píng)價(jià)一個(gè)解決分類問(wèn)題的模型以及如何利用網(wǎng)格搜索找到最佳參數(shù)。但一個(gè)模型僅僅靠精度這一個(gè)指標(biāo)是遠(yuǎn)遠(yuǎn)不夠的,例如我們構(gòu)建了一個(gè)可以診斷人類是否患有胃癌的模型并且精度達(dá)到了99.99%,那么如果你是前來(lái)檢測(cè)的人,你是否相信模型診斷出的結(jié)果
不要忘了,我們構(gòu)建的模型最終目的是用來(lái)解決問(wèn)題的,如果只靠精度只一個(gè)評(píng)價(jià)指標(biāo)就認(rèn)定這個(gè)模型是一個(gè)可以在現(xiàn)實(shí)生活中可以被用來(lái)解決實(shí)際問(wèn)題的模型是非常不理智的。所以在下面的章節(jié)中,我們來(lái)學(xué)習(xí)更多的可以用來(lái)評(píng)價(jià)模型的指標(biāo)先讓我們先了解一下對(duì)于不同問(wèn)題所對(duì)應(yīng)的評(píng)價(jià)指標(biāo)
根據(jù)問(wèn)題的不同,我們也將評(píng)估指標(biāo)分為兩大類,分類評(píng)估指標(biāo)和回歸評(píng)估指標(biāo)。分類評(píng)估指標(biāo)又分為Accuracy、Precision、Recall、F值、P-R曲線、POC曲線和AUC,回歸評(píng)估指標(biāo)又分為可釋平方差得分、平均誤差得分、均方誤差、均方根差、交叉熵和R2值分類評(píng)估指標(biāo)
對(duì)于一個(gè)分類問(wèn)題,我們常見的主要分為二分類問(wèn)題和多分類問(wèn)題,接下來(lái)本節(jié)也是按照這兩種類別分別進(jìn)行討論二分類評(píng)估指標(biāo)二分類問(wèn)題是機(jī)器學(xué)習(xí)中最常見也是最簡(jiǎn)單的問(wèn)題,相信讀者對(duì)二分類問(wèn)題都不陌生了吧。通常,我們所說(shuō)的二分類分為正類和反類。正類和反類沒有什么特殊的規(guī)定,可以自己劃定正類(positiveclass)和反類(negativeclass)。一般我們把我們心中想要的答案視為正類也叫真正例(truepositive,TP),與我們想要的答案背道而馳的視為反類也叫真反例(truenegative,TN),例如我們要檢測(cè)一種食品是否合格,那么我們就可以將食品合格視為正類,不合格視為反類。但是也會(huì)有一些特殊的情況,如果一個(gè)合格的食品被錯(cuò)誤的檢驗(yàn)為合格,那么這種情況我們稱之為假反例(falsenegative,F(xiàn)N)。如果一個(gè)不合格的食品被錯(cuò)誤的檢驗(yàn)成合格食品,那么這種情況我們稱之為假正例(falsepositive,F(xiàn)P)
在現(xiàn)實(shí)生活中,我們希望我們構(gòu)建的模型出現(xiàn)FN和FP的次數(shù)越小越好,而單純的看模型的精度而不去考慮FN和FP,那么這樣的模型即使精度高達(dá)100%也沒有什么現(xiàn)實(shí)意義,不能用來(lái)解決問(wèn)題
那么在進(jìn)行評(píng)估之前,如何查看二分類的結(jié)果呢?這里我們介紹一種常用的方法——混淆矩陣(confusionmatrix)。通過(guò)利用sklearn.metrics中的confusion_matrix方法,我們可以查看通過(guò)模型預(yù)測(cè)的預(yù)測(cè)值和真實(shí)值之間的差異,也就是觀察TP、TN、FP和TN的個(gè)數(shù),且由于我們討論的只有兩個(gè)類別,所以confusion_matrix返回的是一個(gè)二維矩陣下面我們以sklearn中的breast-cancer(乳腺癌)數(shù)據(jù)集為例fromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.datasetsimportload_breast_cancerfromsklearn.metricsimportconfusion_matrixcancer=load_breast_cancer()train_x,test_x,train_y,test_y=train_test_split(cancer.data,cancer.target,random_state=0)log=LogisticRegression()log.fit(train_x,train_y)pred=log.predict(test_x)c_matrix=confusion_matrix(test_y,pred)print("confusion_matrix:\n{}".format(c_matrix))輸出:confusion_matrix:[[512][684]]
上圖是confusion_matrix返回的二維矩陣所表示的意義,通過(guò)觀察混淆矩陣,我們便可以直觀的觀察到我們的模型是否能得到我們想要的結(jié)果。下面我們用混淆矩陣來(lái)比較決策樹、支持核向量機(jī)和Logistic回歸在cancer數(shù)據(jù)集上的效果log=LogisticRegression()log.fit(train_x,train_y)pred_log=log.predict(test_x)c_matrix_log=confusion_matrix(test_y,pred_log)print("confusion_matrix_log:\n{}".format(c_matrix_log))d_tree=DecisionTreeClassifier()d_tree.fit(train_x,train_y)pred_tree=d_tree.predict(test_x)c_matrix_tree=confusion_matrix(test_y,pred_tree)print("confusion_matrix_tree:\n{}".format(c_matrix_tree))svm=SVC()svm.fit(train_x,train_y)pred_svm=svm.predict(test_x)c_matrix_svm=confusion_matrix(test_y,pred_svm)print("confusion_matrix_svm:\n{}".format(c_matrix_svm))輸出:confusion_matrix_log:[[512][684]]confusion_matrix_tree:[[503][1476]]confusion_matrix_svm:[[458][189]]
通過(guò)觀察這三個(gè)混淆矩陣,我們通過(guò)FN和FP的數(shù)量來(lái)直觀判斷出logistic回歸效果最好,決策樹的效果最差。Logistic回歸和支持核向量機(jī)在各方面表現(xiàn)得都要比決策樹要好,但logistic回歸預(yù)測(cè)出的TP和TN更少,所以從結(jié)果上來(lái)看,logistic回歸構(gòu)建的模型要比支持核向量機(jī)和決策樹構(gòu)建的模型預(yù)測(cè)效果更好精度(Accuracy)剛剛我們了解了用混淆矩陣來(lái)分析二分類的結(jié)果,其實(shí)有些讀者可能也猜到了,上文這種分析混淆矩陣的結(jié)果就是我們前兩節(jié)所講的精度也叫精確率(Accuracy)。計(jì)算公式:即預(yù)測(cè)樣本的正確數(shù)量除以樣本總數(shù)=精度。計(jì)算精度的方法可以使用混淆矩陣也可以使用accuracy_score方法,但其實(shí)accuracy_score方法本質(zhì)上還是利用混淆矩陣計(jì)算,只不過(guò)使用起來(lái)比混淆矩陣更為簡(jiǎn)單、方便準(zhǔn)確率(Precision)下面我們來(lái)介紹另一種評(píng)估指標(biāo),準(zhǔn)確度(precision)也叫陽(yáng)性預(yù)測(cè)值(positivepredictionvalue,PPV)即預(yù)測(cè)正確的樣本中有多少是真正例TP。準(zhǔn)確率和精確率看上去很難區(qū)分,但準(zhǔn)確率表示的是對(duì)正確樣本中預(yù)測(cè)的準(zhǔn)度,而精確率則表示的是整個(gè)樣本中對(duì)預(yù)測(cè)正確樣本的準(zhǔn)度,預(yù)測(cè)正確的樣本中既包含TP也包含TN。計(jì)算公式:召回率(Recall)召回率(Recall)也叫靈敏度(sensitivity)、命中率(hitrate)和真正例率(truepositiverate,TRR)指在所有正確的樣本中有多少真正例TP。召回率適用于避免假反例FN的情況,例如網(wǎng)貸中區(qū)分信用良好的客戶中的不良信用的用戶、找到患病病人中的健康人等等。召回率越高,那么假反例FN被預(yù)測(cè)出來(lái)的概率就越高。計(jì)算公式:f-分?jǐn)?shù)F-分?jǐn)?shù)(f-score)也叫f-度量(f-measure),f-分?jǐn)?shù)是準(zhǔn)確率和召回率的平均調(diào)和函數(shù),使用f-分?jǐn)?shù)能夠很好地展現(xiàn)出準(zhǔn)確率和召回率之間的關(guān)系。計(jì)算公式:通常情況下我們一般取
,這一變體我們稱之為也叫f1分?jǐn)?shù)。f1分?jǐn)?shù)作為二分類的評(píng)估指標(biāo)普遍的比精度作為二分類的評(píng)估指標(biāo)要好得多。計(jì)算公式:準(zhǔn)確率-召回率曲線(P-R曲線)對(duì)于分類模型而言,我們通??梢哉{(diào)節(jié)做出分類決策的閾值來(lái)提高模型的準(zhǔn)確率、召回率和f1-score等指標(biāo),但是我們?cè)谶M(jìn)行初次建模的時(shí)候,我們想要這個(gè)模型能夠在某一個(gè)閾值上識(shí)別出80%的惡性腫瘤,可是不知道最佳的閾值,所以一般我們可以把所有可能取到的閾值先列出來(lái),每一個(gè)閾值分別對(duì)應(yīng)一個(gè)準(zhǔn)確率和召回率,這樣我們就可以將準(zhǔn)確率和召回率繪制出一條曲線,以便于我們選擇合適的閾值,這樣的曲線就叫做準(zhǔn)確率-召回率曲線(P-R曲線),能夠滿足我們需求的閾值我們也叫工作點(diǎn)根據(jù)這張圖,我們可以看到越是靠近右上角,Precision和Recall的值就越高,而此時(shí)的閾值就是我們想要的閾值受試者工作特征曲線(POC曲線)受試者工作特征曲線(ReceiverOperatingCharacteristicsCurve,POC曲線),它顯示的是真正率(TruePositiveRate,TPR)和假正率(FalsePositiveRate,F(xiàn)PR)之間的關(guān)系。ROC曲線和P-R曲線類似,都考慮的是所有可能取到的閾值。AUC
曲線下面積(AreaUndertheCurve),曲線指的是ROC曲線,AUC一般被用來(lái)計(jì)算ROC曲線的積分(即曲線于橫坐標(biāo)軸圍成的面積),和平均準(zhǔn)確率一樣,AUC也是總結(jié)ROC曲線的一種方法。多分類評(píng)估指標(biāo)多分類評(píng)估問(wèn)題,說(shuō)白了就是許多二分類問(wèn)題組成的一個(gè)大的分類問(wèn)題,我們前面討論了許多關(guān)于二分類問(wèn)題的評(píng)估指標(biāo),其實(shí)多分類問(wèn)題對(duì)于這些指標(biāo)也適用。例如可以表達(dá)分類結(jié)果的混淆矩陣confusion_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廠房租賃保證金退還協(xié)議4篇
- 2025年度智能設(shè)備價(jià)格信息保密及市場(chǎng)推廣協(xié)議4篇
- 2025年度廠房租賃合同附帶員工宿舍租賃條款4篇
- 二零二四唐山骨瓷品牌創(chuàng)新設(shè)計(jì)研發(fā)合作協(xié)議3篇
- 2025年度企業(yè)品牌策劃合同范本(十)4篇
- 2024年04月江蘇上海浦發(fā)銀行南京分行在線視頻筆試歷年參考題庫(kù)附帶答案詳解
- 2024美容美發(fā)店加盟合同
- 2025年茶葉出口基地承包經(jīng)營(yíng)合同范本4篇
- 專項(xiàng)工程承攬協(xié)議樣本(2024年版)版B版
- 2024年03月浙江中國(guó)農(nóng)業(yè)銀行浙江省分行春季招考筆試歷年參考題庫(kù)附帶答案詳解
- 地理2024-2025學(xué)年人教版七年級(jí)上冊(cè)地理知識(shí)點(diǎn)
- 2024 消化內(nèi)科專業(yè) 藥物臨床試驗(yàn)GCP管理制度操作規(guī)程設(shè)計(jì)規(guī)范應(yīng)急預(yù)案
- 2024-2030年中國(guó)電子郵箱行業(yè)市場(chǎng)運(yùn)營(yíng)模式及投資前景預(yù)測(cè)報(bào)告
- 基礎(chǔ)設(shè)施零星維修 投標(biāo)方案(技術(shù)方案)
- 人力資源 -人效評(píng)估指導(dǎo)手冊(cè)
- 大疆80分鐘在線測(cè)評(píng)題
- 2024屆廣東省廣州市高三上學(xué)期調(diào)研測(cè)試英語(yǔ)試題及答案
- 中煤平朔集團(tuán)有限公司招聘筆試題庫(kù)2024
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 不付租金解除合同通知書
- 區(qū)域合作伙伴合作協(xié)議書范本
評(píng)論
0/150
提交評(píng)論