1.組合排列函式
要呼叫的包:itertools
用法:import itertools
(1)product:笛卡爾積,有放回抽樣排列
用法:itertools.product('abcd',repeat=2)
(2)permutations:排列,不放回抽樣排列
用法:itertools.permutations('abcd',2)
(3)combinations:組合,沒有重複,不放回抽樣組合
用法:itertools.combinations('abcd',2)
(4)combinations_with_replacement:組合,有重複,有放回抽樣組合
用法:itertools.combinations_with_replacement('abcd',2)
2.gridsearchcv網格搜尋和交叉驗證。
網路搜尋:搜尋的是引數,即在指定的引數範圍內,按步長依次調整引數,利用調整的引數訓練學習器,從所有的引數中找到在驗證集上精度最高的引數,這其實是乙個訓練和比較的過程。k折交叉驗證將所有資料集分為k份,不重複的每次取其中乙份做測試集,用其餘k-1份做訓練集訓練模型,之後計算該模型在測試集上的得分,將k次的得分取平均得到最後的得分。
引數:klearn.model_selection.gridsearchcv(estimator, param_grid, *, scoring=none, n_jobs=none, iid='deprecated', refit=true, cv=none, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=false)
(1)estimator:選擇使用的分類器,並且傳入除需要確定最佳的引數之外的其他引數。每乙個分類器都需要乙個scoring引數,或者score方法:如
estimator = randomforestclassifier(min_sample_split=100,min_samples_leaf = 20,max_depth = 8,max_features = 'sqrt' , random_state =10)
(2)param_grid:是乙個列表,列表裡是演算法物件的超引數的取值,用字典儲存值為字典或者列表,例如:
param_grid = param_test1, param_test1 =
param_grid =knn_params,knn_params =
(3)scoring = none :模型評價標準,預設為none,這時需要使用score函式;或者如scoring = 'roc_auc',根據所選模型不同,評價準則不同,字串(函式名),或是可呼叫物件,需要其函式簽名,形如:scorer(estimator,x,y);如果是none,則使用estimator的誤差估計函式。
(4)n_jobs:使用電腦的cpu個數,-1代表全部使用,預設為1。
(5)refit = true :預設為true,程式將會以交叉驗證訓練集得到的最佳引數,重新對所有可能的訓練集與開發集進行,作為最終用於效能評估的最佳模型引數。即在搜尋引數結束後,用最佳引數結果再次fit一遍全部資料集(不用管即可)。
(6)cv = none:交叉驗證引數,預設none,使用五折交叉驗證。指定fold數量,預設為5(之前版本為3),也可以是yield訓練/測試資料的生成器。
(7)verbose:日誌冗長度,0:不輸出訓練過程,1:偶爾輸出,>1:對每個子模型都輸出。
3.from tensorflow.keras.callbacks import earlystopping進行模型訓練
一般來說機器學習的訓練次數會設定到很大,如果模型的表現沒有進一步提公升,那麼訓練可以停止了,繼續訓練很可能會導致過擬合tensorflow.keras.callbacks.earlystopping就是用來提前結束訓練的。
使用方法:
early_stopping=keras.callbacks.earlystopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=none, restore_best_weights=false) model.fit(callbacks = [early_stopping])
引數介紹:
monitor: 被監測的資料。
min_delta: 在被監測的資料中被認為是提公升的最小變化, 例如,小於 min_delta 的絕對變化會被認為沒有提公升。
patience: 沒有進步的訓練輪數,在這之後訓練就會被停止。
verbose: 詳細資訊模式。
mode: 其中之一。 在 min 模式中, 當被監測的資料停止下降,訓練就會停止;在 max 模式中,當被監測的資料停止上公升,訓練就會停止;在 auto 模式中,方向會自動從被監測的資料的名字中判斷出來。
baseline: 要監控的數量的基準值。 如果模型沒有顯示基準的改善,訓練將停止。
restore_best_weights: 是否從具有監測數量的最佳值的時期恢復模型權重。 如果為 false,則使用在訓練的最後一步獲得的模型權重。
4.model.fit()函式
引數說明:
x:輸入資料,若只有乙個輸入那麼型別為numpy
array:如果模型有多個輸入,那麼x的型別為lsit
y:標籤
batch_size:整數,梯度下降是每個batch包含的樣本數。訓練時乙個batch的樣本會被計算一次梯度下降,使目標函式優化一步
epochs:整數,訓練終止時的epoch值,訓練將在達到該epoch值時停止,當沒有設定initial_epoch時,它就是訓練的總輪數,否則訓練的總輪數為epochs - inital_epoch
verbose:日誌顯示,0為不在標準輸出流輸出日誌資訊,1為輸出進度條記錄,2為每個epoch輸出一行記錄
callbacks:keras.callbacks.earlystopping可定義,在適當時機呼叫
validation_split:0~1之間的浮點數,用來指定訓練集的一定比例資料作為驗證集。驗證集將不參與訓練,並在每個epoch結束後測試的模型的指標,如損失函式、精確度等。注意,validation_split的劃分在shuffle之前,因此如果你的資料本身是有序的,需要先手工打亂再指定validation_split,否則可能會出現驗證集樣本不均勻。
validation_data:形式為(x,y)的tuple,是指定的驗證集。此引數將覆蓋validation_spilt。
shuffle:布林值或字串,一般為布林值,表示是否在訓練過程中隨機打亂輸入樣本的順序。若為字串「batch」,則是用來處理hdf5資料的特殊情況,它將在batch內部將資料打亂。
class_weight:字典,將不同的類別對映為不同的權值,該引數用來在訓練過程中調整損失函式(只能用於訓練)
sample_weight:權值的numpy
array,用於在訓練時調整損失函式(僅用於訓練)。可以傳遞乙個1d的與樣本等長的向量用於對樣本進行1對1的加權,或者在面對時序資料時,傳遞乙個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權。這種情況下請確定在編譯模型時新增了sample_weight_mode=』temporal』。
initial_epoch: 從該引數指定的epoch開始訓練,在繼續之前的訓練時有用。
callbacks:list,其中的元素是keras.callbacks.callback的物件。這個list中的**函式將會在訓練過程中的適當時機被呼叫,參考**函式
validation_split:0~1之間的浮點數,用來指定訓練集的一定比例資料作為驗證集。驗證集將不參與訓練,並在每個epoch結束後測試的模型的指標,如損失函式、精確度等。注意,validation_split的劃分在shuffle之前,因此如果你的資料本身是有序的,需要先手工打亂再指定validation_split,否則可能會出現驗證集樣本不均勻。
validation_data:形式為(x,y)的tuple,是指定的驗證集。此引數將覆蓋validation_spilt。
shuffle:布林值或字串,一般為布林值,表示是否在訓練過程中隨機打亂輸入樣本的順序。若為字串「batch」,則是用來處理hdf5資料的特殊情況,它將在batch內部將資料打亂。
class_weight:字典,將不同的類別對映為不同的權值,該引數用來在訓練過程中調整損失函式(只能用於訓練)
sample_weight:權值的numpy
array,用於在訓練時調整損失函式(僅用於訓練)。可以傳遞乙個1d的與樣本等長的向量用於對樣本進行1對1的加權,或者在面對時序資料時,傳遞乙個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權。這種情況下請確定在編譯模型時新增了sample_weight_mode=』temporal』。
initial_epoch: 從該引數指定的epoch開始訓練,在繼續之前的訓練時有用。
fit函式返回乙個history的物件,其history.history屬性記錄了損失函式和其他指標的數值隨epoch變化的情況,如果有驗證集的話,也包含了驗證集的這些指標變化情況
Python函式學習筆記
自己學python的時候留下的一些筆記。函式的基礎知識 一.函式的引數 1.預設引數可以不用賦值,直接呼叫函式,但是要在定義的時候賦初值,2.收集引數,可以防止不知道需要多少個引數,例如 def test params print 引數長度是 len params print 第二個引數是 para...
部落格筆記 python函式學習
之前也學習過一段時間的python基礎知識,今天由於專案無法進行測試,閒來無事所以想重新溫故下。我天生對 不是很感冒才做的軟體測試,但是做久了感覺軟體行業是離不開 的,索性還是抽空涉獵點 相關的知識吧,畢竟一天在幹這行就要花心思去學習這行。今天簡單把python溫故的重點和以前覺得的難點在此記錄下 ...
python函式引數學習筆記
1 引數的傳遞是通過自動將物件賦值給本地變數名來實現的。函式引數 呼叫者傳送的 可能的 共享物件的引用值 所有的引數實際上都是通過指標進行傳遞的。作為引數被傳遞的物件從裡不自動拷貝。2 在函式內部的引數名的賦值不會影響呼叫者。在函式執行時,在函式頭部的引數名是乙個新的 本地變了,這個變數名時再函式的...