機器學習中的超引數調整
簡介
機器學習中的超引數調整是一種技術,我們透過調整或更改現有模型或演算法的預設引數來獲得更高的精度和更好的效能。有時,當我們使用演算法的預設引數時,它並不適合現有資料,因為資料會根據問題陳述而變化。在這種情況下,超引數調整成為增強模型效能的模型構建中必不可少的部分。
本文將討論演算法的超引數調整、優勢以及其他相關內容。這將幫助人們理解超引數調整的概念及其必要性,並幫助人們對任何型別的資料和模型進行超引數調整。
為什麼需要超引數調整?
在機器學習中,每個資料的行為和模式並非完全相同,我們正在處理的問題陳述也各不相同。幾乎所有機器學習演算法都有其預設引數,如果未選擇特定引數,則將應用這些預設引數。
在每種情況下或每個專案中,機器學習演算法的預設引數並非總是最合適的解決方案;該模型可能在預設引數下執行良好,但在某些情況下,仍然可以透過調整這些引數來提高效能和可靠性。
我們可以根據需要、資料型別、資料行為、資料模式以及我們希望從模型中獲得的目標來調整演算法的引數。
模型引數與超引數
你很可能聽說過模型引數和超引數這兩個術語,並且你可能認為它們是相同的;儘管這兩個術語的目的相同,但它們之間仍然略有不同。
模型引數是模型從資料訓練中得出的引數;在這裡,模型對資料進行訓練,觀察其模式,做出決策,並在訓練結束時,根據從資料中學習到的知識設定一些引數。例如,線性迴歸從資料中學習,並根據資料行為及其模式得出斜率和 y 截距的值。請注意,這些引數是由模型匯出的,我們無法控制它們。
而我們可以控制模型的超引數,並且我們可以在根據我們的需求定義模型時控制這些引數。
超引數空間
眾所周知,與機器學習模型相關的引數主要有兩種:一種是由模型本身匯出的,並在預測時使用;另一種是我們可以根據需要控制和更改的引數。
現在的工作是獲得最適合資料和模型的引數組合,以獲得一個非常精確的模型;眾所周知,有時可能會發生這種情況:在調整一個引數時,另一個引數的值並不適合模型,並影響模型的整體準確性,因此選擇最佳引數組合至關重要。
超引數空間是一個平臺,它幫助我們對模型進行超引數調整;在這裡,我們為它提供演算法的範圍和組合,它嘗試所有可能的指定引數組合,並返回最適合模型及其準確性的組合。
為了在超引數空間中搜索,主要有兩種型別的庫:GridSearchCV 和 RandomSearchCV。這裡的 Cv 代表交叉驗證,其中模型的準確性會被多次測量。
防止資料洩露
在模型的訓練和超引數調整過程中,需要注意的一點是,資料應分為三類:訓練集、測試集和驗證集。一般來說,我們將資料分成兩類,但在進行超引數調整時,建議將資料分成三類。
將資料再分成一類是為了防止資料洩露。如果在某些情況下發生資料洩露,那麼模型在訓練過程中將表現良好,但是當我們進入預測階段,並且當模型獲得即時資料進行預測時,它將失敗;因此,為了驗證資料和模型,將其分成三類是必不可少的。
使用 GridSearchCV
我們可以直接從 sklearn.model_selection 匯入 GridSearchCv 並使用它,它將迭代模型的所有指定引數。它將返回最適合資料和模型的條件。
示例
from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import GridSearchCV knnc = KNeighborsClassifier() knnc.fit(X_train, y_train) param_grid = {‘n_neighbors’: list(range(1,10)),’algorithm’: (‘auto’, ‘brute’) } gs = GridSearchCV(knnc,param_grid,cv=10) gs.fit(X_train, y_train) Gs.best_params_
正如我們在上面的程式碼中看到的,我們使用 KNN 分類器作為演算法,並且為網格搜尋 cv 提供了一個引數網格,在這裡,GridSearchCV 將應用所有引數網格,並在執行時返回模型引數的最佳組合。
使用 RandomSearchCV
有時,當使用 GridSearchCv 時,計算複雜度會變得非常高,因為它會嘗試模型引數的每種組合並進行計算。相反,RandomSearchCv 會隨機搜尋引數,並且模型會在隨機的超引數和組合上進行訓練。
from sklearn.model_selection import RandomizedSearchCV from sklearn.ensemble import RandomForestClassifier from scipy.stats import randint as sp_randint clf = RandomForestClassifier(n_estimators=100) param_dist = {"max_depth": [4, None], "max_features": sp_randint(1, 15), "min_samples_split": sp_randint(2, 11), "criterion": ["gini", "entropy"]} samples = 8 randomCV = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=samples,cv=5) randomCV.fit(X, y) print(randomCV.best_params_)
關鍵要點
超引數調整對於充分發揮模型的潛力至關重要。
我們可以將資料再分成一類稱為驗證集,以防止資料洩露。
GridSearchCV 比 RandomSearchCV 計算複雜度更高,因為它會在模型引數的每種組合上進行訓練。
如果想要更快地獲得具有最佳超引數組合的模型結果,可以使用 RandomSearchCV。
結論
在本文中,我們討論了機器學習模型的超引數調整,其必要性,模型引數和超引數之間的區別,以及如何使用 GridSearchCV 和 RandomSearchCV 來實現這一點。這將幫助人們更好地理解超引數調整的概念,並幫助人們將其應用於任何資料和模型。