日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

結(jié)機(jī)器學(xué)習(xí)的模型評估與調(diào)參大法 想學(xué)的快上車

人工智能與大數(shù)據(jù)技術(shù) ? 來源:人工智能與大數(shù)據(jù)技術(shù) ? 作者:人工智能與大數(shù)據(jù) ? 2020-09-25 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

由于文章較長,所以我還是先把目錄提前。

一、認(rèn)識(shí)管道流

1.1 數(shù)據(jù)導(dǎo)入

1.2 使用管道創(chuàng)建工作流

二、K折交叉驗(yàn)證

2.1 K折交叉驗(yàn)證原理

2.2 K折交叉驗(yàn)證實(shí)現(xiàn)

三、曲線調(diào)參

3.1 模型準(zhǔn)確度

3.2繪制學(xué)習(xí)曲線得到樣本數(shù)與準(zhǔn)確率的關(guān)系

3.3繪制驗(yàn)證曲線得到超參和準(zhǔn)確率關(guān)系

四、網(wǎng)格搜索

4.1兩層for循環(huán)暴力檢索

4.2構(gòu)建字典暴力檢索

五、嵌套交叉驗(yàn)證

六、相關(guān)評價(jià)指標(biāo)

6.1 混淆矩陣及其實(shí)現(xiàn)

6.2 相關(guān)評價(jià)指標(biāo)實(shí)現(xiàn)

6.3 ROC曲線及其實(shí)現(xiàn)

一、認(rèn)識(shí)管道流

今天先介紹一下管道工作流的操作。

“管道工作流”這個(gè)概念可能有點(diǎn)陌生,其實(shí)可以理解為一個(gè)容器,然后把我們需要進(jìn)行的操作都封裝在這個(gè)管道里面進(jìn)行操作,比如數(shù)據(jù)標(biāo)準(zhǔn)化、特征降維、主成分分析、模型預(yù)測等等,下面還是以一個(gè)實(shí)例來講解。

1.1 數(shù)據(jù)導(dǎo)入與預(yù)處理

本次我們導(dǎo)入一個(gè)二分類數(shù)據(jù)集 Breast Cancer Wisconsin,它包含569個(gè)樣本。首列為主鍵ID,第2列為類別值(M=惡性腫瘤,B=良性腫瘤),第3-32列是實(shí)數(shù)值的特征。

先導(dǎo)入數(shù)據(jù)集:

1#導(dǎo)入相關(guān)數(shù)據(jù)集 2importpandasaspd 3importurllib 4try: 5df=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases' 6'/breast-cancer-wisconsin/wdbc.data',header=None) 7excepturllib.error.URLError: 8df=pd.read_csv('https://raw.githubusercontent.com/rasbt/' 9'python-machine-learning-book/master/code/' 10'datasets/wdbc/wdbc.data',header=None) 11print('rows,columns:',df.shape) 12df.head()

使用我們學(xué)習(xí)過的LabelEncoder來轉(zhuǎn)化類別特征:

1fromsklearn.preprocessingimportLabelEncoder 2X=df.loc[:,2:].values 3y=df.loc[:,1].values 4le=LabelEncoder() 5#將目標(biāo)轉(zhuǎn)為0-1變量 6y=le.fit_transform(y) 7le.transform(['M','B'])

劃分訓(xùn)練驗(yàn)證集:

1##創(chuàng)建訓(xùn)練集和測試集 2fromsklearn.model_selectionimporttrain_test_split 3X_train,X_test,y_train,y_test= 4train_test_split(X,y,test_size=0.20,random_state=1)

1.2 使用管道創(chuàng)建工作流

很多機(jī)器學(xué)習(xí)算法要求特征取值范圍要相同,因此需要對特征做標(biāo)準(zhǔn)化處理。此外,我們還想將原始的30維度特征壓縮至更少維度,這就需要用到主成分分析,要用PCA來完成,再接著就可以進(jìn)行l(wèi)ogistic回歸預(yù)測了。

Pipeline對象接收元組構(gòu)成的列表作為輸入,每個(gè)元組第一個(gè)值作為變量名,元組第二個(gè)元素是sklearn中的transformer或Estimator。管道中間每一步由sklearn中的transformer構(gòu)成,最后一步是一個(gè)Estimator。

本次數(shù)據(jù)集中,管道包含兩個(gè)中間步驟:StandardScaler和PCA,其都屬于transformer,而邏輯斯蒂回歸分類器屬于Estimator。

本次實(shí)例,當(dāng)管道pipe_lr執(zhí)行fit方法時(shí):

1)StandardScaler執(zhí)行fit和transform方法;

2)將轉(zhuǎn)換后的數(shù)據(jù)輸入給PCA;

3)PCA同樣執(zhí)行fit和transform方法;

4)最后數(shù)據(jù)輸入給LogisticRegression,訓(xùn)練一個(gè)LR模型。

對于管道來說,中間有多少個(gè)transformer都可以。管道的工作方式可以用下圖來展示(一定要注意管道執(zhí)行fit方法,而transformer要執(zhí)行fit_transform):

上面的代碼實(shí)現(xiàn)如下:

1fromsklearn.preprocessingimportStandardScaler#用于進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化 2fromsklearn.decompositionimportPCA#用于進(jìn)行特征降維 3fromsklearn.linear_modelimportLogisticRegression#用于模型預(yù)測 4fromsklearn.pipelineimportPipeline 5pipe_lr=Pipeline([('scl',StandardScaler()), 6('pca',PCA(n_components=2)), 7('clf',LogisticRegression(random_state=1))]) 8pipe_lr.fit(X_train,y_train) 9print('TestAccuracy:%.3f'%pipe_lr.score(X_test,y_test)) 10y_pred=pipe_lr.predict(X_test)

Test Accuracy: 0.947

二、K折交叉驗(yàn)證

為什么要評估模型的泛化能力,相信這個(gè)大家應(yīng)該沒有疑惑,一個(gè)模型如果性能不好,要么是因?yàn)槟P瓦^于復(fù)雜導(dǎo)致過擬合(高方差),要么是模型過于簡單導(dǎo)致導(dǎo)致欠擬合(高偏差)。如何評估它,用什么數(shù)據(jù)來評估它,成為了模型評估需要重點(diǎn)考慮的問題。

我們常規(guī)做法,就是將數(shù)據(jù)集劃分為3部分,分別是訓(xùn)練、測試和驗(yàn)證,彼此之間的數(shù)據(jù)不重疊。但,如果我們遇見了數(shù)據(jù)量不多的時(shí)候,這種操作就顯得不太現(xiàn)實(shí),這個(gè)時(shí)候k折交叉驗(yàn)證就發(fā)揮優(yōu)勢了。

2.1 K折交叉驗(yàn)證原理

先不多說,先貼一張?jiān)韴D(以10折交叉驗(yàn)證為例)。

k折交叉驗(yàn)證步驟:

Step 1:使用不重復(fù)抽樣將原始數(shù)據(jù)隨機(jī)分為k份;

Step2:其中k-1份數(shù)據(jù)用于模型訓(xùn)練,剩下的那1份數(shù)據(jù)用于測試模型;

Step 3:重復(fù)Step 2k次,得到k個(gè)模型和他的評估結(jié)果。

Step 4:計(jì)算k折交叉驗(yàn)證結(jié)果的平均值作為參數(shù)/模型的性能評估。

2.1 K折交叉驗(yàn)證實(shí)現(xiàn)

K折交叉驗(yàn)證,那么K的取值該如何確認(rèn)呢?一般我們默認(rèn)10折,但根據(jù)實(shí)際情況有所調(diào)整。我們要知道,當(dāng)K很大的時(shí)候,你需要訓(xùn)練的模型就會(huì)很多,這樣子對效率影響較大,而且每個(gè)模型的訓(xùn)練集都差不多,效果也差不多。我們常用的K值在5~12。

我們根據(jù)k折交叉驗(yàn)證的原理步驟,在sklearn中進(jìn)行10折交叉驗(yàn)證的代碼實(shí)現(xiàn):

1importnumpyasnp 2fromsklearn.model_selectionimportStratifiedKFold 3kfold=StratifiedKFold(n_splits=10, 4random_state=1).split(X_train,y_train) 5scores=[] 6fork,(train,test)inenumerate(kfold): 7pipe_lr.fit(X_train[train],y_train[train]) 8score=pipe_lr.score(X_train[test],y_train[test]) 9scores.append(score) 10print('Fold:%s,Classdist.:%s,Acc:%.3f'%(k+1, 11np.bincount(y_train[train]),score)) 12print(' CVaccuracy:%.3f+/-%.3f'%(np.mean(scores),np.std(scores)))

output:

當(dāng)然,實(shí)際使用的時(shí)候沒必要這樣子寫,sklearn已經(jīng)有現(xiàn)成封裝好的方法,直接調(diào)用即可。

1fromsklearn.model_selectionimportcross_val_score 2scores=cross_val_score(estimator=pipe_lr, 3X=X_train, 4y=y_train, 5cv=10, 6n_jobs=1) 7print('CVaccuracyscores:%s'%scores) 8print('CVaccuracy:%.3f+/-%.3f'%(np.mean(scores),np.std(scores)))

三、曲線調(diào)參

我們講到的曲線,具體指的是學(xué)習(xí)曲線(learning curve)和驗(yàn)證曲線(validation curve)。

3.1 模型準(zhǔn)確率(Accuracy)

模型準(zhǔn)確率反饋了模型的效果,大家看下圖:

1)左上角子的模型偏差很高。它的訓(xùn)練集和驗(yàn)證集準(zhǔn)確率都很低,很可能是欠擬合。解決欠擬合的方法就是增加模型參數(shù),比如,構(gòu)建更多的特征,減小正則項(xiàng)。

2)右上角子的模型方差很高,表現(xiàn)就是訓(xùn)練集和驗(yàn)證集準(zhǔn)確率相差太多。解決過擬合的方法有增大訓(xùn)練集或者降低模型復(fù)雜度,比如增大正則項(xiàng),或者通過特征選擇減少特征數(shù)。

3)右下角的模型就很好。

3.2 繪制學(xué)習(xí)曲線得到樣本數(shù)與準(zhǔn)確率的關(guān)系

直接上代碼:

1importmatplotlib.pyplotasplt 2fromsklearn.model_selectionimportlearning_curve 3pipe_lr=Pipeline([('scl',StandardScaler()), 4('clf',LogisticRegression(penalty='l2',random_state=0))]) 5train_sizes,train_scores,test_scores= 6learning_curve(estimator=pipe_lr, 7X=X_train, 8y=y_train, 9train_sizes=np.linspace(0.1,1.0,10),#在0.1和1間線性的取10個(gè)值 10cv=10, 11n_jobs=1) 12train_mean=np.mean(train_scores,axis=1) 13train_std=np.std(train_scores,axis=1) 14test_mean=np.mean(test_scores,axis=1) 15test_std=np.std(test_scores,axis=1) 16plt.plot(train_sizes,train_mean, 17color='blue',marker='o', 18markersize=5,label='trainingaccuracy') 19plt.fill_between(train_sizes, 20train_mean+train_std, 21train_mean-train_std, 22alpha=0.15,color='blue') 23plt.plot(train_sizes,test_mean, 24color='green',linestyle='--', 25marker='s',markersize=5, 26label='validationaccuracy') 27plt.fill_between(train_sizes, 28test_mean+test_std, 29test_mean-test_std, 30alpha=0.15,color='green') 31plt.grid() 32plt.xlabel('Numberoftrainingsamples') 33plt.ylabel('Accuracy') 34plt.legend(loc='lowerright') 35plt.ylim([0.8,1.0]) 36plt.tight_layout() 37plt.show()

Learning_curve中的train_sizes參數(shù)控制產(chǎn)生學(xué)習(xí)曲線的訓(xùn)練樣本的絕對/相對數(shù)量,此處,我們設(shè)置的train_sizes=np.linspace(0.1, 1.0, 10),將訓(xùn)練集大小劃分為10個(gè)相等的區(qū)間,在0.1和1之間線性的取10個(gè)值。learning_curve默認(rèn)使用分層k折交叉驗(yàn)證計(jì)算交叉驗(yàn)證的準(zhǔn)確率,我們通過cv設(shè)置k。

下圖可以看到,模型在測試集表現(xiàn)很好,不過訓(xùn)練集和測試集的準(zhǔn)確率還是有一段小間隔,可能是模型有點(diǎn)過擬合。

3.3 繪制驗(yàn)證曲線得到超參和準(zhǔn)確率關(guān)系

驗(yàn)證曲線是用來提高模型的性能,驗(yàn)證曲線和學(xué)習(xí)曲線很相近,不同的是這里畫出的是不同參數(shù)下模型的準(zhǔn)確率而不是不同訓(xùn)練集大小下的準(zhǔn)確率:

1fromsklearn.model_selectionimportvalidation_curve 2param_range=[0.001,0.01,0.1,1.0,10.0,100.0] 3train_scores,test_scores=validation_curve( 4estimator=pipe_lr, 5X=X_train, 6y=y_train, 7param_name='clf__C', 8param_range=param_range, 9cv=10) 10train_mean=np.mean(train_scores,axis=1) 11train_std=np.std(train_scores,axis=1) 12test_mean=np.mean(test_scores,axis=1) 13test_std=np.std(test_scores,axis=1) 14plt.plot(param_range,train_mean, 15color='blue',marker='o', 16markersize=5,label='trainingaccuracy') 17plt.fill_between(param_range,train_mean+train_std, 18train_mean-train_std,alpha=0.15, 19color='blue') 20plt.plot(param_range,test_mean, 21color='green',linestyle='--', 22marker='s',markersize=5, 23label='validationaccuracy') 24plt.fill_between(param_range, 25test_mean+test_std, 26test_mean-test_std, 27alpha=0.15,color='green') 28plt.grid() 29plt.xscale('log') 30plt.legend(loc='lowerright') 31plt.xlabel('ParameterC') 32plt.ylabel('Accuracy') 33plt.ylim([0.8,1.0]) 34plt.tight_layout() 35plt.show()

我們得到了參數(shù)C的驗(yàn)證曲線。和learning_curve方法很像,validation_curve方法使用采樣k折交叉驗(yàn)證來評估模型的性能。在validation_curve內(nèi)部,我們設(shè)定了用來評估的參數(shù)(這里我們設(shè)置C作為觀測)。

從下圖可以看出,最好的C值是0.1。

四、網(wǎng)格搜索

網(wǎng)格搜索(grid search),作為調(diào)參很常用的方法,這邊還是要簡單介紹一下。

在我們的機(jī)器學(xué)習(xí)算法中,有一類參數(shù),需要人工進(jìn)行設(shè)定,我們稱之為“超參”,也就是算法中的參數(shù),比如學(xué)習(xí)率、正則項(xiàng)系數(shù)或者決策樹的深度等。

網(wǎng)格搜索就是要找到一個(gè)最優(yōu)的參數(shù),從而使得模型的效果最佳,而它實(shí)現(xiàn)的原理其實(shí)就是暴力搜索;即我們事先為每個(gè)參數(shù)設(shè)定一組值,然后窮舉各種參數(shù)組合,找到最好的那一組。

4.1. 兩層for循環(huán)暴力檢索

網(wǎng)格搜索的結(jié)果獲得了指定的最優(yōu)參數(shù)值,c為100,gamma為0.001

1#naivegridsearchimplementation 2fromsklearn.datasetsimportload_iris 3fromsklearn.svmimportSVC 4fromsklearn.model_selectionimporttrain_test_split 5iris=load_iris() 6X_train,X_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=0) 7print("Sizeoftrainingset:%dsizeoftestset:%d"%(X_train.shape[0],X_test.shape[0])) 8best_score=0 9forgammain[0.001,0.01,0.1,1,10,100]: 10forCin[0.001,0.01,0.1,1,10,100]: 11#foreachcombinationofparameters 12#trainanSVC 13svm=SVC(gamma=gamma,C=C) 14svm.fit(X_train,y_train) 15#evaluatetheSVConthetestset 16score=svm.score(X_test,y_test) 17#ifwegotabetterscore,storethescoreandparameters 18ifscore>best_score: 19best_score=score 20best_parameters={'C':C,'gamma':gamma} 21print("bestscore:",best_score) 22print("bestparameters:",best_parameters)

output: Size of training set: 112 size of test set: 38 best score: 0.973684210526 best parameters: {'C': 100, 'gamma': 0.001}

4.2. 構(gòu)建字典暴力檢索

網(wǎng)格搜索的結(jié)果獲得了指定的最優(yōu)參數(shù)值,c為1

1fromsklearn.svmimportSVC 2fromsklearn.model_selectionimportGridSearchCV 3pipe_svc=Pipeline([('scl',StandardScaler()), 4('clf',SVC(random_state=1))]) 5param_range=[0.0001,0.001,0.01,0.1,1.0,10.0,100.0,1000.0] 6param_grid=[{'clf__C':param_range, 7'clf__kernel':['linear']}, 8{'clf__C':param_range, 9'clf__gamma':param_range, 10'clf__kernel':['rbf']}] 11gs=GridSearchCV(estimator=pipe_svc, 12param_grid=param_grid, 13scoring='accuracy', 14cv=10, 15n_jobs=-1) 16gs=gs.fit(X_train,y_train) 17print(gs.best_score_) 18print(gs.best_params_)

output: 0.978021978022 {'clf__C': 0.1, 'clf__kernel': 'linear'}

GridSearchCV中param_grid參數(shù)是字典構(gòu)成的列表。對于線性SVM,我們只評估參數(shù)C;對于RBF核SVM,我們評估C和gamma。最后, 我們通過best_parmas_得到最優(yōu)參數(shù)組合。

接著,我們直接利用最優(yōu)參數(shù)建模(best_estimator_):

1clf=gs.best_estimator_ 2clf.fit(X_train,y_train) 3print('Testaccuracy:%.3f'%clf.score(X_test,y_test))

網(wǎng)格搜索雖然不錯(cuò),但是窮舉過于耗時(shí),sklearn中還實(shí)現(xiàn)了隨機(jī)搜索,使用 RandomizedSearchCV類,隨機(jī)采樣出不同的參數(shù)組合。

五、嵌套交叉驗(yàn)證

嵌套交叉驗(yàn)證(nested cross validation)選擇算法(外循環(huán)通過k折等進(jìn)行參數(shù)優(yōu)化,內(nèi)循環(huán)使用交叉驗(yàn)證),對特定數(shù)據(jù)集進(jìn)行模型選擇。Varma和Simon在論文Bias in Error Estimation When Using Cross-validation for Model Selection中指出使用嵌套交叉驗(yàn)證得到的測試集誤差幾乎就是真實(shí)誤差。

嵌套交叉驗(yàn)證外部有一個(gè)k折交叉驗(yàn)證將數(shù)據(jù)分為訓(xùn)練集和測試集,內(nèi)部交叉驗(yàn)證用于選擇模型算法。

下圖演示了一個(gè)5折外層交叉沿則和2折內(nèi)部交叉驗(yàn)證組成的嵌套交叉驗(yàn)證,也被稱為5*2交叉驗(yàn)證:

我們還是用到之前的數(shù)據(jù)集,相關(guān)包的導(dǎo)入操作這里就省略了。

SVM分類器的預(yù)測準(zhǔn)確率代碼實(shí)現(xiàn):

1gs=GridSearchCV(estimator=pipe_svc, 2param_grid=param_grid, 3scoring='accuracy', 4cv=2) 5 6#Note:Optionally,youcouldusecv=2 7#intheGridSearchCVabovetoproduce 8#the5x2nestedCVthatisshowninthefigure. 9 10scores=cross_val_score(gs,X_train,y_train,scoring='accuracy',cv=5) 11print('CVaccuracy:%.3f+/-%.3f'%(np.mean(scores),np.std(scores)))

CV accuracy: 0.965 +/- 0.025

決策樹分類器的預(yù)測準(zhǔn)確率代碼實(shí)現(xiàn):

1fromsklearn.treeimportDecisionTreeClassifier 2 3gs=GridSearchCV(estimator=DecisionTreeClassifier(random_state=0), 4param_grid=[{'max_depth':[1,2,3,4,5,6,7,None]}], 5scoring='accuracy', 6cv=2) 7scores=cross_val_score(gs,X_train,y_train,scoring='accuracy',cv=5) 8print('CVaccuracy:%.3f+/-%.3f'%(np.mean(scores),np.std(scores)))

CV accuracy: 0.921 +/- 0.029

六、相關(guān)評價(jià)指標(biāo)

6.1 混淆矩陣及其實(shí)現(xiàn)

混淆矩陣,大家應(yīng)該都有聽說過,大致就是長下面這樣子的:

所以,有幾個(gè)概念需要先說明:

TP(True Positive): 真實(shí)為0,預(yù)測也為0

FN(False Negative): 真實(shí)為0,預(yù)測為1

FP(False Positive): 真實(shí)為1,預(yù)測為0

TN(True Negative): 真實(shí)為1,預(yù)測也為1

所以,衍生了幾個(gè)常用的指標(biāo):

: 分類模型總體判斷的準(zhǔn)確率(包括了所有class的總體準(zhǔn)確率)

: 預(yù)測為0的準(zhǔn)確率

: 真實(shí)為0的準(zhǔn)確率

: 真實(shí)為1的準(zhǔn)確率

: 預(yù)測為1的準(zhǔn)確率

:對于某個(gè)分類,綜合了Precision和Recall的一個(gè)判斷指標(biāo),F(xiàn)1-Score的值是從0到1的,1是最好,0是最差

: 另外一個(gè)綜合Precision和Recall的標(biāo)準(zhǔn),F(xiàn)1-Score的變形

再舉個(gè)例子:

混淆矩陣網(wǎng)絡(luò)上有很多文章,也不用說刻意地去背去記,需要的時(shí)候百度一下你就知道,混淆矩陣實(shí)現(xiàn)代碼:

1fromsklearn.metricsimportconfusion_matrix 2 3pipe_svc.fit(X_train,y_train) 4y_pred=pipe_svc.predict(X_test) 5confmat=confusion_matrix(y_true=y_test,y_pred=y_pred) 6print(confmat)

output: [[71 1] [ 2 40]]

1fig,ax=plt.subplots(figsize=(2.5,2.5)) 2ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3) 3foriinrange(confmat.shape[0]): 4forjinrange(confmat.shape[1]): 5ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center') 6 7plt.xlabel('predictedlabel') 8plt.ylabel('truelabel') 9 10plt.tight_layout() 11plt.show()

6.2 相關(guān)評價(jià)指標(biāo)實(shí)現(xiàn)

分別是準(zhǔn)確度、recall以及F1指標(biāo)的實(shí)現(xiàn)。

1fromsklearn.metricsimportprecision_score,recall_score,f1_score 2 3print('Precision:%.3f'%precision_score(y_true=y_test,y_pred=y_pred)) 4print('Recall:%.3f'%recall_score(y_true=y_test,y_pred=y_pred)) 5print('F1:%.3f'%f1_score(y_true=y_test,y_pred=y_pred))

Precision: 0.976 Recall: 0.952 F1: 0.964

指定評價(jià)指標(biāo)自動(dòng)選出最優(yōu)模型:

可以通過在make_scorer中設(shè)定參數(shù),確定需要用來評價(jià)的指標(biāo)(這里用了fl_score),這個(gè)函數(shù)可以直接輸出結(jié)果。

1fromsklearn.metricsimportmake_scorer 2 3scorer=make_scorer(f1_score,pos_label=0) 4 5c_gamma_range=[0.01,0.1,1.0,10.0] 6 7param_grid=[{'clf__C':c_gamma_range, 8'clf__kernel':['linear']}, 9{'clf__C':c_gamma_range, 10'clf__gamma':c_gamma_range, 11'clf__kernel':['rbf']}] 12 13gs=GridSearchCV(estimator=pipe_svc, 14param_grid=param_grid, 15scoring=scorer, 16cv=10, 17n_jobs=-1) 18gs=gs.fit(X_train,y_train) 19print(gs.best_score_) 20print(gs.best_params_)

0.982798668208 {'clf__C': 0.1, 'clf__kernel': 'linear'}

6.3 ROC曲線及其實(shí)現(xiàn)

如果需要理解ROC曲線,那你就需要先了解一下混淆矩陣了,具體的內(nèi)容可以查看一下之前的文章,這里重點(diǎn)引入2個(gè)概念:

真正率(true positive rate,TPR),指的是被模型正確預(yù)測的正樣本的比例:

假正率(false positive rate,FPR) ,指的是被模型錯(cuò)誤預(yù)測的正樣本的比例:

ROC曲線概念:

ROC(receiver operating characteristic)接受者操作特征,其顯示的是分類器的真正率和假正率之間的關(guān)系,如下圖所示:

ROC曲線有助于比較不同分類器的相對性能,其曲線下方的面積為AUC(area under curve),其面積越大則分類的性能越好,理想的分類器auc=1。

ROC曲線繪制:

對于一個(gè)特定的分類器和測試數(shù)據(jù)集,顯然只能得到一個(gè)分類結(jié)果,即一組FPR和TPR結(jié)果,而要得到一個(gè)曲線,我們實(shí)際上需要一系列FPR和TPR的值。

那么如何處理?很簡單,我們可以根據(jù)模型預(yù)測的概率值,并且設(shè)置不同的閾值來獲得不同的預(yù)測結(jié)果。什么意思?

比如說:

5個(gè)樣本,真實(shí)的target(目標(biāo)標(biāo)簽)是y=c(1,1,0,0,1)

模型分類器將預(yù)測樣本為1的概率p=c(0.5,0.6,0.55,0.4,0.7)

我們需要選定閾值才能把概率轉(zhuǎn)化為類別,

如果我們選定閾值為0.1,那么5個(gè)樣本被分進(jìn)1的類別

如果選定0.3,結(jié)果仍然一樣

如果選了0.45作為閾值,那么只有樣本4被分進(jìn)0

之后把所有得到的所有分類結(jié)果計(jì)算FTR,PTR,并繪制成線,就可以得到ROC曲線了,當(dāng)threshold(閾值)取值越多,ROC曲線越平滑。

ROC曲線代碼實(shí)現(xiàn):

1fromsklearn.metricsimportroc_curve,auc 2fromscipyimportinterp 3 4pipe_lr=Pipeline([('scl',StandardScaler()), 5('pca',PCA(n_components=2)), 6('clf',LogisticRegression(penalty='l2', 7random_state=0, 8C=100.0))]) 9 10X_train2=X_train[:,[4,14]] 11 # 因?yàn)槿刻卣鱽G進(jìn)去的話,預(yù)測效果太好,畫ROC曲線不好看哈哈哈,所以只是取了2個(gè)特征 12 13 14cv=list(StratifiedKFold(n_splits=3, 15random_state=1).split(X_train,y_train)) 16 17fig=plt.figure(figsize=(7,5)) 18 19mean_tpr=0.0 20mean_fpr=np.linspace(0,1,100) 21all_tpr=[] 22 23fori,(train,test)inenumerate(cv): 24probas=pipe_lr.fit(X_train2[train], 25y_train[train]).predict_proba(X_train2[test]) 26 27fpr,tpr,thresholds=roc_curve(y_train[test], 28probas[:,1], 29pos_label=1) 30mean_tpr+=interp(mean_fpr,fpr,tpr) 31mean_tpr[0]=0.0 32roc_auc=auc(fpr,tpr) 33plt.plot(fpr, 34tpr, 35lw=1, 36label='ROCfold%d(area=%0.2f)' 37%(i+1,roc_auc)) 38 39plt.plot([0,1], 40[0,1], 41linestyle='--', 42color=(0.6,0.6,0.6), 43label='randomguessing') 44 45mean_tpr/=len(cv) 46mean_tpr[-1]=1.0 47mean_auc=auc(mean_fpr,mean_tpr) 48plt.plot(mean_fpr,mean_tpr,'k--', 49label='meanROC(area=%0.2f)'%mean_auc,lw=2) 50plt.plot([0,0,1], 51[0,1,1], 52lw=2, 53linestyle=':', 54color='black', 55label='perfectperformance') 56 57plt.xlim([-0.05,1.05]) 58plt.ylim([-0.05,1.05]) 59plt.xlabel('falsepositiverate') 60plt.ylabel('truepositiverate') 61plt.title('ReceiverOperatorCharacteristic') 62plt.legend(loc="lowerright") 63 64plt.tight_layout() 65plt.show()

查看下AUC和準(zhǔn)確率的結(jié)果:

1pipe_lr=pipe_lr.fit(X_train2,y_train) 2y_labels=pipe_lr.predict(X_test[:,[4,14]]) 3y_probas=pipe_lr.predict_proba(X_test[:,[4,14]])[:,1] 4#notethatweuseprobabilitiesforroc_auc 5#the`[:,1]`selectsthepositiveclasslabelonly

1fromsklearn.metricsimportroc_auc_score,accuracy_score 2print('ROCAUC:%.3f'%roc_auc_score(y_true=y_test,y_score=y_probas)) 3print('Accuracy:%.3f'%accuracy_score(y_true=y_test,y_pred=y_labels))

ROC AUC: 0.752 Accuracy: 0.711

責(zé)任編輯:xj

原文標(biāo)題:萬字長文總結(jié)機(jī)器學(xué)習(xí)的模型評估與調(diào)參,附代碼下載

文章出處:【微信公眾號(hào):人工智能與大數(shù)據(jù)技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    67

    文章

    8567

    瀏覽量

    137256
  • 嵌套
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8173

原文標(biāo)題:萬字長文總結(jié)機(jī)器學(xué)習(xí)的模型評估與調(diào)參,附代碼下載

文章出處:【微信號(hào):TheBigData1024,微信公眾號(hào):人工智能與大數(shù)據(jù)技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Momenta R7強(qiáng)化學(xué)習(xí)世界模型助力上汽大眾ID. ERA 9X正式上市

    2026年4月25日,上汽大眾全新旗艦SUV ID. ERA 9X于2026北京國際汽車展覽會(huì)期間正式上市,并將全球首發(fā)搭載Momenta R7強(qiáng)化學(xué)習(xí)世界模型。這意味著Momenta R7率先在全球強(qiáng)化學(xué)習(xí)+世界
    的頭像 發(fā)表于 04-29 15:42 ?647次閱讀

    Edge Impulse 喚醒詞模型訓(xùn)練 | 技術(shù)集結(jié)

    Edgi-Talk開始使用邊緣機(jī)器學(xué)習(xí)!目錄EdgeImpulse簡介創(chuàng)建賬號(hào)錄制數(shù)據(jù)集數(shù)據(jù)上傳數(shù)據(jù)分割模型訓(xùn)練模型評估
    的頭像 發(fā)表于 04-20 10:05 ?1254次閱讀
    Edge Impulse 喚醒詞<b class='flag-5'>模型</b>訓(xùn)練 | 技術(shù)集結(jié)

    Momenta R6強(qiáng)化學(xué)習(xí)模型上車東風(fēng)日產(chǎn)NX8

    3月20日,東風(fēng)日產(chǎn)NX8技術(shù)暨預(yù)售發(fā)布會(huì)在廣州舉辦,官宣Momenta R6強(qiáng)化學(xué)習(xí)模型正式上車東風(fēng)日產(chǎn)新能源SUV——NX8。以全球頂級(jí)大廠合力,融合先鋒科技力量,打造更適配全家出行的智能SUV,開啟合資品牌智能化全新賽道
    的頭像 發(fā)表于 03-24 09:08 ?892次閱讀

    強(qiáng)化學(xué)習(xí)會(huì)讓自動(dòng)駕駛模型學(xué)習(xí)更快嗎?

    是一種讓機(jī)器通過“試錯(cuò)”學(xué)會(huì)決策的辦法。與監(jiān)督學(xué)習(xí)不同,監(jiān)督學(xué)習(xí)是有人提供示范答案,讓模型去模仿;而強(qiáng)化學(xué)習(xí)不會(huì)把每一步的“正確答案”都告訴
    的頭像 發(fā)表于 01-31 09:34 ?853次閱讀
    強(qiáng)化<b class='flag-5'>學(xué)習(xí)</b>會(huì)讓自動(dòng)駕駛<b class='flag-5'>模型</b><b class='flag-5'>學(xué)習(xí)</b>更快嗎?

    機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見錯(cuò)誤與局限性

    無論你是剛?cè)腴T還是已經(jīng)從事人工智能模型相關(guān)工作一段時(shí)間,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中都存在一些我們需要時(shí)刻關(guān)注并銘記的常見錯(cuò)誤。如果對這些錯(cuò)誤置之不理,日后可能會(huì)引發(fā)諸多麻煩!只要我們密切關(guān)注
    的頭像 發(fā)表于 01-07 15:37 ?367次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>和深度<b class='flag-5'>學(xué)習(xí)</b>中需避免的 7 個(gè)常見錯(cuò)誤與局限性

    華為榮獲算力服務(wù)商互聯(lián)能力成熟度模型編證書

    在2025算力互聯(lián)網(wǎng)大會(huì)期間,算力互聯(lián)網(wǎng)服務(wù)論壇在成都成功舉辦。論壇現(xiàn)場舉行了《算力服務(wù)商互聯(lián)能力成熟度模型編證書頒發(fā)儀式,華為憑借在算力互聯(lián)領(lǐng)域深厚的技術(shù)積累與豐富實(shí)踐經(jīng)驗(yàn),作為核心編單位獲頒證書,充分彰顯其在行業(yè)標(biāo)準(zhǔn)制
    的頭像 發(fā)表于 12-31 11:50 ?849次閱讀

    基于ETAS嵌入式AI工具鏈將機(jī)器學(xué)習(xí)模型部署到量產(chǎn)ECU

    AI在汽車行業(yè)的應(yīng)用日益深化,如何將機(jī)器學(xué)習(xí)領(lǐng)域的先進(jìn)模型(如虛擬傳感器)集成到ECU軟件中,已成為業(yè)界面臨的核心挑戰(zhàn)。
    的頭像 發(fā)表于 12-24 10:55 ?6414次閱讀
    基于ETAS嵌入式AI工具鏈將<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>模型</b>部署到量產(chǎn)ECU

    PSoC? Edge E84 評估套件:開啟下一代機(jī)器學(xué)習(xí)邊緣設(shè)備設(shè)計(jì)之旅

    PSoC? Edge E84 評估套件:開啟下一代機(jī)器學(xué)習(xí)邊緣設(shè)備設(shè)計(jì)之旅 在電子工程師不斷追求創(chuàng)新與高效的今天,一款優(yōu)秀的評估套件能夠極大地加速產(chǎn)品的設(shè)計(jì)與開發(fā)進(jìn)程。英飛凌的 PSo
    的頭像 發(fā)表于 12-18 14:40 ?807次閱讀

    PID調(diào)實(shí)用方法

    ) 周圍抖動(dòng) 在講了PI和PD系統(tǒng)的調(diào)節(jié)方式后,下面分享一下PID系統(tǒng)的調(diào)節(jié)方式,首先我們先按照PI系統(tǒng)進(jìn)行調(diào)節(jié),先調(diào)P在調(diào)I,讓系統(tǒng)有一定的過沖后達(dá)到穩(wěn)定. 在出現(xiàn)了上面的 PI 波形之后,下面就開始調(diào)節(jié)D,慢慢增加D,將過沖補(bǔ)償?shù)簦钡较到y(tǒng)穩(wěn)定,最終效果如下圖,PID系統(tǒng)就基本調(diào)節(jié)完成了
    發(fā)表于 11-28 07:17

    安信可雷達(dá)模組如何快速配網(wǎng)和調(diào)?

    安信可配網(wǎng)助手app介紹 安信可配網(wǎng)助手app是由安信可開發(fā)的一款 可拿來對安信可模組進(jìn)行配網(wǎng)以及對雷達(dá)模組進(jìn)行調(diào)的APP 。 下面將對APP搭配安信可雷達(dá)模組Rd-01、Rd-03_V2
    的頭像 發(fā)表于 10-31 08:59 ?1018次閱讀
    安信可雷達(dá)模組如何快速配網(wǎng)和<b class='flag-5'>調(diào)</b><b class='flag-5'>參</b>?

    超小型Neuton機(jī)器學(xué)習(xí)模型, 在任何系統(tǒng)級(jí)芯片(SoC)上解鎖邊緣人工智能應(yīng)用.

    Neuton 是一家邊緣AI 公司,致力于讓機(jī)器 學(xué)習(xí)模型更易于使用。它創(chuàng)建的模型比競爭對手的框架小10 倍,速度也快10 倍,甚至可以在最先進(jìn)的邊緣設(shè)備上進(jìn)行人工智能處理。在這篇博文
    發(fā)表于 07-31 11:38

    FPGA在機(jī)器學(xué)習(xí)中的具體應(yīng)用

    隨著機(jī)器學(xué)習(xí)和人工智能技術(shù)的迅猛發(fā)展,傳統(tǒng)的中央處理單元(CPU)和圖形處理單元(GPU)已經(jīng)無法滿足高效處理大規(guī)模數(shù)據(jù)和復(fù)雜模型的需求。FPGA(現(xiàn)場可編程門陣列)作為一種靈活且高效的硬件加速平臺(tái)
    的頭像 發(fā)表于 07-16 15:34 ?3115次閱讀

    通過NVIDIA Cosmos模型增強(qiáng)機(jī)器人學(xué)習(xí)

    通用機(jī)器人的時(shí)代已經(jīng)到來,這得益于機(jī)械電子技術(shù)和機(jī)器人 AI 基礎(chǔ)模型的進(jìn)步。但目前機(jī)器人技術(shù)的發(fā)展仍面臨一個(gè)關(guān)鍵挑戰(zhàn):機(jī)器人需要大量的訓(xùn)練
    的頭像 發(fā)表于 07-14 11:49 ?1331次閱讀
    通過NVIDIA Cosmos<b class='flag-5'>模型</b>增強(qiáng)<b class='flag-5'>機(jī)器人學(xué)習(xí)</b>

    模型在半導(dǎo)體行業(yè)的應(yīng)用可行性分析

    的應(yīng)用,比如使用機(jī)器學(xué)習(xí)分析數(shù)據(jù),提升良率。 這一些大模型是否真的有幫助 能夠在解決工程師的知識(shí)斷層問題 本人純小白,不知道如何涉足這方面 應(yīng)該問什么大模型比較好,或者是看什么視頻能夠
    發(fā)表于 06-24 15:10

    邊緣計(jì)算中的機(jī)器學(xué)習(xí):基于 Linux 系統(tǒng)的實(shí)時(shí)推理模型部署與工業(yè)集成!

    你好,旅行者!歡迎來到Medium的這一角落。在本文中,我們將把一個(gè)機(jī)器學(xué)習(xí)模型(神經(jīng)網(wǎng)絡(luò))部署到邊緣設(shè)備上,利用從ModbusTCP寄存器獲取的實(shí)時(shí)數(shù)據(jù)來預(yù)測一臺(tái)復(fù)古音頻放大器的當(dāng)前健康狀況。你將
    的頭像 發(fā)表于 06-11 17:22 ?1170次閱讀
    邊緣計(jì)算中的<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>:基于 Linux 系統(tǒng)的實(shí)時(shí)推理<b class='flag-5'>模型</b>部署與工業(yè)集成!
    嘉义市| 钟祥市| 邯郸市| 东乡县| 抚远县| 汉沽区| 深州市| 高要市| 北海市| 宁强县| 平阳县| 乌拉特中旗| 乃东县| 周口市| 甘洛县| 潮州市| 西畴县| 汨罗市| 竹溪县| 丰镇市| 恩平市| 邵武市| 利辛县| 呈贡县| 娱乐| 绥宁县| 苏尼特右旗| 收藏| 富民县| 苍山县| 商南县| 安图县| 斗六市| 兰考县| 乌拉特中旗| 富平县| 阳西县| 英德市| 康保县| 崇文区| 盈江县|