這篇文章主要講解了“機(jī)器學(xué)習(xí)中超參數(shù)優(yōu)化的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“機(jī)器學(xué)習(xí)中超參數(shù)優(yōu)化的方法是什么”吧!
創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計,網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為成百上千服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!
機(jī)器學(xué)習(xí)模型由兩種不同類型的參數(shù)組成:
超參數(shù)=是用戶在開始訓(xùn)練之前可以任意設(shè)置的所有參數(shù)(例如,Random Forest中的估計量)。
取而代之的是在模型訓(xùn)練過程中學(xué)習(xí)模型參數(shù)(例如,神經(jīng)網(wǎng)絡(luò)中的權(quán)重,線性回歸)。
模型參數(shù)定義了如何使用輸入數(shù)據(jù)來獲得所需的輸出,并在訓(xùn)練時進(jìn)行學(xué)習(xí)。相反,超參數(shù)首先確定我們的模型的結(jié)構(gòu)。
機(jī)器學(xué)習(xí)模型調(diào)整是一種優(yōu)化問題。我們有一組超參數(shù),我們的目標(biāo)是找到它們的值的正確組合,這可以幫助我們找到函數(shù)的最小值(例如,損耗)或最大值(例如,精度)。
當(dāng)比較不同的機(jī)器學(xué)習(xí)模型如何對數(shù)據(jù)集執(zhí)行時,這尤其重要。實際上,例如將具有最佳超參數(shù)的SVM模型與尚未優(yōu)化的隨機(jī)森林模型進(jìn)行比較將是不公平的。
在這篇文章中,將說明以下超參數(shù)優(yōu)化方法:
手動搜尋
隨機(jī)搜尋
網(wǎng)格搜索
自動超參數(shù)調(diào)整(貝葉斯優(yōu)化,遺傳算法)
人工神經(jīng)網(wǎng)絡(luò)(ANN)調(diào)整
為了演示如何在Python中執(zhí)行超參數(shù)優(yōu)化,我決定對信用卡欺詐檢測Kaggle數(shù)據(jù)集執(zhí)行完整的數(shù)據(jù)分析 。本文的目的是正確分類哪些信用卡交易應(yīng)標(biāo)記為欺詐或真實(二進(jìn)制分類)。該數(shù)據(jù)集在分發(fā)前已被匿名化,因此,大多數(shù)功能的含義尚未公開。
在這種情況下,我決定僅使用數(shù)據(jù)集的一個子集,以加快訓(xùn)練時間并確保在兩個不同的類之間實現(xiàn)完美的平衡。此外,僅使用了少量功能就使優(yōu)化任務(wù)更具挑戰(zhàn)性。最終數(shù)據(jù)集如下圖所示(圖2)。
首先,我們需要將數(shù)據(jù)集分為訓(xùn)練集和測試集。
在本文中,我們將使用隨機(jī)森林分類器作為模型進(jìn)行優(yōu)化。
隨機(jī)森林模型由大量不相關(guān)的決策樹形成,這些決策樹共同構(gòu)成一個整體。在隨機(jī)森林中,每個決策樹都進(jìn)行自己的預(yù)測,并且將整體模型輸出選擇為最常出現(xiàn)的預(yù)測。
現(xiàn)在,我們可以從計算基本模型的準(zhǔn)確性開始。
將隨機(jī)森林分類器與默認(rèn)的scikit-learn參數(shù)一起使用可獲得95%的整體準(zhǔn)確性?,F(xiàn)在讓我們看看是否應(yīng)用一些優(yōu)化技術(shù)可以提高精度。
使用“手動搜索”時,我們會根據(jù)我們的判斷/經(jīng)驗選擇一些模型超參數(shù)。然后,我們訓(xùn)練模型,評估模型的準(zhǔn)確性并重新開始該過程。重復(fù)該循環(huán),直到獲得滿意的準(zhǔn)確性為止。
隨機(jī)森林分類器使用的主要參數(shù)是:
標(biāo)準(zhǔn) =用于評估分割質(zhì)量的函數(shù)。
max_depth =每棵樹中允許的最大級別數(shù)。
max_features =拆分節(jié)點(diǎn)時考慮的最大特征數(shù)。
min_samples_leaf =可以存儲在樹葉中的最小樣本數(shù)。
min_samples_split =節(jié)點(diǎn)中導(dǎo)致節(jié)點(diǎn)分裂所需的最小樣本數(shù)。
n_estimators =集成樹的數(shù)量。
可以在scikit-learn 文檔中找到有關(guān)隨機(jī)森林參數(shù)的更多信息。
作為手動搜索的示例,我嘗試指定模型中的估計量。不幸的是,這并沒有導(dǎo)致準(zhǔn)確性的提高。
在隨機(jī)搜索中,我們創(chuàng)建超參數(shù)網(wǎng)格,并僅基于這些超參數(shù)的某些隨機(jī)組合來訓(xùn)練/測試模型。在此示例中,我另外決定對訓(xùn)練集執(zhí)行交叉驗證。
在執(zhí)行機(jī)器學(xué)習(xí)任務(wù)時,我們通常將數(shù)據(jù)集分為訓(xùn)練集和測試集。這樣做是為了在訓(xùn)練模型后測試我們的模型(通過這種方式,我們可以在處理看不見的數(shù)據(jù)時檢查其性能)。使用交叉驗證時,我們將訓(xùn)練集劃分為其他N個分區(qū),以確保我們的模型不會過度擬合我們的數(shù)據(jù)。
最常用的交叉驗證方法之一是K折驗證。在K-Fold中,我們將訓(xùn)練集劃分為N個分區(qū),然后使用N-1個分區(qū)迭代地訓(xùn)練模型,并使用剩余的分區(qū)進(jìn)行測試(在每次迭代中,我們都會更改剩余的分區(qū))。一旦對模型進(jìn)行了N次訓(xùn)練,我們就可以平均每次迭代獲得的訓(xùn)練結(jié)果,從而獲得整體訓(xùn)練效果結(jié)果。
在實現(xiàn)超參數(shù)優(yōu)化時使用交叉驗證非常重要。這樣,我們可能會避免使用一些對訓(xùn)練數(shù)據(jù)非常有效但對測試數(shù)據(jù)卻不太好的超參數(shù)。
現(xiàn)在,我們可以通過首先定義一個超參數(shù)網(wǎng)格來開始實現(xiàn)隨機(jī)搜索,在調(diào)用RandomizedSearchCV()時將隨機(jī)采樣該超參數(shù)網(wǎng)格 。對于此示例,我決定將訓(xùn)練集劃分為4折(cv = 4),并選擇80作為要采樣的組合數(shù)(n_iter = 80)。然后,使用scikit-learn best_estimator_ 屬性,可以檢索在訓(xùn)練過程中表現(xiàn)最佳的超參數(shù)集,以測試我們的模型。
訓(xùn)練完模型后,我們可以可視化更改其某些超參數(shù)如何影響整體模型的準(zhǔn)確性(圖4)。在這種情況下,我決定觀察改變估計量和準(zhǔn)則的數(shù)量如何影響我們的隨機(jī)森林準(zhǔn)確性。
然后,我們可以使可視化更具交互性,從而使這一步驟更進(jìn)一步。在下面的圖表中,我們可以檢查(使用滑塊)在模型中考慮估計的min_split和min_leaf參數(shù)時,改變估算器數(shù)量如何影響模型的整體準(zhǔn)確性。
現(xiàn)在,我們可以使用隨機(jī)搜索評估模型的性能。在這種情況下,與我們的基本模型相比,使用隨機(jī)搜索會導(dǎo)致準(zhǔn)確性不斷提高。
在網(wǎng)格搜索中,我們建立了一個超參數(shù)網(wǎng)格,并在每種可能的組合上訓(xùn)練/測試我們的模型。
為了選擇在Grid Search中使用的參數(shù),我們現(xiàn)在可以查看哪些參數(shù)與Random Search一起使用效果最好,并根據(jù)這些參數(shù)形成網(wǎng)格,以查看是否可以找到更好的組合。
可以使用scikit-learn GridSearchCV() 函數(shù)在Python中實現(xiàn)網(wǎng)格搜索 。同樣在這種情況下,我決定將訓(xùn)練集劃分為4折(cv = 4)。
使用網(wǎng)格搜索時,將嘗試網(wǎng)格中所有可能的參數(shù)組合。在這種情況下,訓(xùn)練期間將使用128000個組合(2×10×4×4×4×10)。相反,在前面的“網(wǎng)格搜索”示例中,僅使用了80種組合。
與隨機(jī)搜索相比,網(wǎng)格搜索速度較慢,但由于它可以遍歷整個搜索空間,因此總體上更有效。取而代之的是,隨機(jī)搜索可以更快更快,但是可能會錯過搜索空間中的一些重要點(diǎn)。
使用自動超參數(shù)調(diào)整時,將使用以下技術(shù)來標(biāo)識要使用的模型超參數(shù):貝葉斯優(yōu)化,梯度下降和進(jìn)化算法。
貝葉斯優(yōu)化可以使用Hyperopt庫在Python中執(zhí)行。貝葉斯優(yōu)化使用概率來找到函數(shù)的最小值。最終目的是找到函數(shù)的輸入值,該函數(shù)可以為我們提供盡可能低的輸出值。
貝葉斯優(yōu)化已被證明比隨機(jī),網(wǎng)格或手動搜索更有效。因此,貝葉斯優(yōu)化可以在測試階段帶來更好的性能,并減少優(yōu)化時間。
在Hyperopt中,可以實現(xiàn)貝葉斯優(yōu)化,為函數(shù)fmin()提供3個三個主要參數(shù) 。
目標(biāo)函數(shù) =定義要最小化的損失函數(shù)。
域空間 =定義要測試的輸入值的范圍(在貝葉斯優(yōu)化中,該空間為每個使用的超參數(shù)創(chuàng)建概率分布)。
優(yōu)化算法 =定義用于選擇最佳輸入值以在每次新迭代中使用的搜索算法。
此外,還可以在fmin()中定義 要執(zhí)行的最大評估數(shù)。
貝葉斯優(yōu)化可以通過考慮過去的結(jié)果來選擇輸入值,從而減少搜索迭代的次數(shù)。這樣,我們可以從一開始就將搜索集中在更接近所需輸出的值上。
現(xiàn)在,我們可以使用fmin() 函數(shù)運(yùn)行貝葉斯優(yōu)化器 。 首先創(chuàng)建一個 Trials()對象,以便稍后可視化fmin() 函數(shù)運(yùn)行時正在發(fā)生的事情 (例如,loss函數(shù)的變化方式以及Hyperparameters的使用方式變化)。
現(xiàn)在,我們可以檢索識別出的最佳參數(shù)集,并使用 在訓(xùn)練過程中創(chuàng)建的最佳字典來測試模型 。一些參數(shù)已 使用索引以數(shù)字方式存儲在 最佳字典中,因此,我們需要先將它們轉(zhuǎn)換回字符串,然后再將其輸入到隨機(jī)森林中。
使用貝葉斯優(yōu)化的分類報告如下所示。
遺傳算法試圖將自然選擇機(jī)制應(yīng)用于機(jī)器學(xué)習(xí)環(huán)境。它們受到達(dá)爾文自然選擇過程的啟發(fā),因此通常也稱為進(jìn)化算法。
假設(shè)我們創(chuàng)建了具有一些預(yù)定義超參數(shù)的N個機(jī)器學(xué)習(xí)模型。然后,我們可以計算每個模型的準(zhǔn)確性,并決定只保留一半模型(性能最好的模型)?,F(xiàn)在,我們可以生成具有與最佳模型相似的超參數(shù)的后代,以便再次獲得N個模型的種群。在這一點(diǎn)上,我們可以再次計算每個模型的準(zhǔn)確性,并在定義的世代中重復(fù)該循環(huán)。這樣,只有最佳模型才能在流程結(jié)束時生存下來。
為了在Python中實現(xiàn)遺傳算法,我們可以使用 TPOT自動機(jī)器學(xué)習(xí)庫。TPOT建立在scikit-learn庫上,可用于回歸或分類任務(wù)。
以下代碼片段顯示了使用遺傳算法確定的培訓(xùn)報告和最佳參數(shù)。
我們的隨機(jī)森林遺傳算法優(yōu)化模型的整體準(zhǔn)確性如下所示。
使用KerasClassifier包裝器,可以像使用scikit-learn機(jī)器學(xué)習(xí)模型時一樣,對深度學(xué)習(xí)模型應(yīng)用網(wǎng)格搜索和隨機(jī)搜索。在以下示例中,我們將嘗試優(yōu)化一些ANN參數(shù),例如:在每個層中使用多少個神經(jīng)元,以及使用哪個激活函數(shù)和優(yōu)化器。此處提供了更多深度學(xué)習(xí)超參數(shù)優(yōu)化的示例 。
使用我們的人工神經(jīng)網(wǎng)絡(luò)(ANN)評分的總體準(zhǔn)確性可以在下面看到。
現(xiàn)在,我們可以比較在此給定練習(xí)中所有不同優(yōu)化技術(shù)的執(zhí)行情況??傮w而言,隨機(jī)搜索和進(jìn)化算法的效果最佳。
獲得的結(jié)果高度依賴于所選的網(wǎng)格空間和所使用的數(shù)據(jù)集。因此,在不同情況下,不同的優(yōu)化技術(shù)將比其他技術(shù)表現(xiàn)更好。
感謝各位的閱讀,以上就是“機(jī)器學(xué)習(xí)中超參數(shù)優(yōu)化的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對機(jī)器學(xué)習(xí)中超參數(shù)優(yōu)化的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!