排列組合演算法 交叉驗證和網格搜尋對K 臨近演算法調優

2021-10-12 09:14:33 字數 1085 閱讀 6729

交叉驗證的定義: 將拿到的訓練資料,分為訓練集,和驗證集,如果將資料分為4份,其中乙份作為驗證集,然後經過4組測試,每次都更換不同的驗證集,即得到4組模型的結果,取平均值作為最終結果,取平均值作為最終的結果,稱為4折交叉驗證。

網格搜尋(超引數搜尋):通常情況下有很多引數是需要手動指定的(例如k-臨近演算法的k值),這種叫做超引數,但是手動過程複雜,所以需要對模型**幾種超引數組合,每組超引數都採用交叉驗證來評估,最後選出最優的引數組合簡歷模型。

demo 1 : k-近鄰 k的取值。

如果有多個超引數,進行排列組合。假如有2個超引數,a[1,3,5,7] b[2,3,5,9]進行兩兩組合,有16中組合方式。

sklean.model_selection.grodsearchcv

引數列表

返回結果

from sklearn.neighbors import kneighborsclassifier

from sklearn.preprocessing import standardscaler

from sklearn.model_selection import train_test_split, gridsearchcv

.....

param =

gc = gridsearchcv(knn, param_grid=param, cv=10)

gc.fit(x_train, y_train)

# 在測試集上的準確率

print(gc.score(x_test, y_test))

print("在交叉驗證中最好的結果:", gc.best_score_)

print("在交叉驗證中最好的模型:", gc.best_params_)

print("每個超引數每次交叉驗證的結果:", gc.cv_results_)

排列組合演算法

在開發的過程中很難免會到排列組合,剛開始通過for迴圈來搞定。但是對於工作了近五年的我而已,不能像 新人那樣做了。如果所要組合的集合大於40,你不可能寫40個for迴圈吧!這裡使用了數學的演算法,到底是啥演算法,高人也沒說!不過我把它的思想提公升了一下。如下 ifndef combination h...

排列組合演算法

1.排列演算法 include define max num 100 void print int n,int num void swap int a,int b int arrange int i,int n,int num i return count int combination int u...

排列組合演算法

組合演算法的思路是開乙個陣列,其下標表示1到m個數,陣列元素的值為1表示其下標代表的數被選中,為0則沒選中。初始化,將陣列前n個元素置1,表示第乙個組合為前n個數。從左到右掃瞄陣列元素值的 10 組合,找到第乙個 10 組合後將其變為 01 組合,同時將其左邊的所有 1 全部移動到陣列的最左端。當第...