機器學習 - 網格搜尋
在此頁面上,W3schools.com 與 紐約資料科學學院 合作,為我們的學生提供數字培訓內容。
網格搜尋
大多數機器學習模型都包含可以調整以改變模型學習方式的引數。例如,來自 sklearn
的邏輯迴歸模型有一個引數 C
,用於控制正則化,這會影響模型的複雜性。
我們如何為 C
選擇最佳值?最佳值取決於用於訓練模型的資料。
它是如何工作的?
一種方法是嘗試不同的值,然後選擇給出最佳分數的值。這種技術被稱為網格搜尋。如果我們要為兩個或更多引數選擇值,我們將評估所有值的組合,從而形成一個值網格。
在我們開始示例之前,最好先了解我們正在更改的引數的作用。C
值越高,表示模型認為訓練資料與真實世界資訊越相似,對訓練資料賦予更大的權重。而 C
值越低,則相反。
使用預設引數
首先,讓我們看看在不使用網格搜尋的情況下,僅使用基本引數能生成什麼樣的結果。
首先,我們必須載入將要使用的資料集。
來自 sklearn 的資料集
鳶尾花 = datasets.load_iris()
接下來,為了建立模型,我們必須有一組自變數 X 和一個因變數 y。
X = 鳶尾花['資料']
y = 鳶尾花['目標']
現在我們將載入邏輯模型來對鳶尾花進行分類。
來自 sklearn.linear_model 匯入 LogisticRegression
建立模型,將 max_iter 設定為更高的值以確保模型找到結果。
請記住,邏輯迴歸模型中 C
的預設值是 1
,我們稍後會進行比較。
在下面的示例中,我們檢視鳶尾花資料集,並嘗試使用邏輯迴歸中 C
的不同值來訓練模型。
邏輯迴歸 = LogisticRegression(max_iter = 10000)
建立模型後,我們必須將模型擬合到資料。
print(logit.fit(X,y))
為了評估模型,我們執行 score 方法。
print(logit.score(X,y))
示例
來自 sklearn 的資料集
來自 sklearn.linear_model 匯入 LogisticRegression
鳶尾花 = datasets.load_iris()
X = 鳶尾花['資料']
y = 鳶尾花['目標']
邏輯迴歸 = LogisticRegression(max_iter = 10000)
print(logit.fit(X,y))
print(logit.score(X,y))
執行示例 »
在 C = 1
的預設設定下,我們取得了 0.973
的分數。
讓我們看看透過使用不同值的網格搜尋是否能做得更好,目前的分數為 0.973。
廣告
實現網格搜尋
我們將遵循之前的相同步驟,但這次我們將為 C
設定一個值範圍。
知道為搜尋引數設定哪些值需要領域知識和實踐的結合。
由於 C
的預設值是 1
,我們將設定一個圍繞它的值範圍。
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
接下來,我們將建立一個 for 迴圈來替換 C
的值,並在每次更改時評估模型。
首先我們將建立一個空列表來儲存分數。
分數 = []
為了改變 C
的值,我們必須遍歷值的範圍,並在每次迭代中更新引數。
對於 C 中的每個選擇
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
將分數儲存在列表中後,我們可以評估 C
的最佳選擇。
print(scores)
示例
來自 sklearn 的資料集
來自 sklearn.linear_model 匯入 LogisticRegression
鳶尾花 = datasets.load_iris()
X = 鳶尾花['資料']
y = 鳶尾花['目標']
邏輯迴歸 = LogisticRegression(max_iter = 10000)
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
分數 = []
對於 C 中的每個選擇
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
print(scores)
執行示例 »
結果解釋
我們可以看到,較低的 C
值表現不如基準引數 1
。然而,當我們將 C
的值增加到 1.75
時,模型的準確性有所提高。
似乎將 C
增加到超過這個量並不能提高模型準確性。
關於最佳實踐的注意事項
我們使用訓練邏輯迴歸模型的資料對它進行了評分。如果模型與該資料過於吻合,它可能不擅長預測未見過的資料。這種統計誤差被稱為**過擬合**。
為了避免被訓練資料上的分數誤導,我們可以留出我們資料的一部分,專門用於測試模型。請參考關於訓練/測試分割的講座,以避免被誤導和過擬合。