機(jī)器學(xué)習(xí)的模型都是參數(shù)化的,可以通過調(diào)參來提高模型的準(zhǔn)確度。
模型有很多參數(shù),如何找到最佳的參數(shù)組合,可以把它當(dāng)作一個查詢問題來處理,但是調(diào)整參數(shù)到何時為止呢?應(yīng)該遵循偏差和方差協(xié)調(diào)的原則。
接下來將介紹在 scikit-learn 中設(shè)置機(jī)器學(xué)習(xí)模型最佳參數(shù)的方法。
1. 調(diào)整參數(shù)對機(jī)器學(xué)習(xí)算法的重要性。
2. 如何使用網(wǎng)格搜索優(yōu)化參數(shù)?
3. 如何使用隨機(jī)搜索優(yōu)化參數(shù)?
機(jī)器學(xué)習(xí)算法調(diào)參
調(diào)整算法參數(shù)是采用機(jī)器學(xué)習(xí)解決問題的最后一個步驟,有時也被稱為超參數(shù)優(yōu)化。學(xué)會調(diào)參是進(jìn)行機(jī)器學(xué)習(xí)項目的前提,但第一次遇到這些算法和模型時,肯定會被其大量的參數(shù)嚇到。其實,參數(shù)可分為兩種:一種是影響模型在訓(xùn)練集上的準(zhǔn)確度或防止過擬合能力的參數(shù);另一種是不影響這兩者的參數(shù)。模型在樣本總體上的準(zhǔn)確度由其在訓(xùn)練集上的準(zhǔn)確度及其防止過擬合的能力共同決定,所以在調(diào)參時主要針對第一種參數(shù)進(jìn)行調(diào)整,最終達(dá)到的效果是:模型在訓(xùn)練集上的準(zhǔn)確度和防止過擬合能力的大和諧。
下面將介紹兩種自動尋找最優(yōu)化參數(shù)的算法:
· 網(wǎng)格搜索優(yōu)化參數(shù)。
· 隨機(jī)搜索優(yōu)化參數(shù)。
網(wǎng)格搜索優(yōu)化參數(shù)
網(wǎng)格搜索優(yōu)化參數(shù)是一種算法參數(shù)優(yōu)化的方法。它是通過遍歷已定義參數(shù)的列表,來評估算法的參數(shù),從而找到最優(yōu)參數(shù)。在scikit-learn中使用GridSearchCV來實現(xiàn)對參數(shù)的跟蹤、調(diào)整與評估,從而找到最優(yōu)參數(shù)。網(wǎng)格搜索優(yōu)化參數(shù)適用于三四個(或更少)的超參數(shù)(當(dāng)超參數(shù)的數(shù)量增加時,網(wǎng)格搜索的計算復(fù)雜度會呈現(xiàn)指數(shù)型增長,這時要換用隨機(jī)搜索),由用戶列出一個較小的超參數(shù)值域,這些超參數(shù)值域的笛卡爾集(排列組合)為一組組超參數(shù)。網(wǎng)格搜索算法使用每組超參數(shù)訓(xùn)練模型,并挑選驗證集誤差最小的超參數(shù)組合。下面的例子是展示如何使用 GridSearchCV 來調(diào)整脊回歸(Ridge)的參數(shù)。GridSearchCV使用字典對象來指定需要調(diào)參的參數(shù),可以同時對一個或多個參數(shù)進(jìn)行調(diào)參。
代碼如下:
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#打印標(biāo)簽名稱
print(data.columns)
#將數(shù)據(jù)轉(zhuǎn)成數(shù)組
array = data.values
#分割數(shù)據(jù),去掉最后一個標(biāo)簽
X = array[:, 0:8]
Y = array[:, 8]
model = Ridge()
#設(shè)置參數(shù),進(jìn)行網(wǎng)格搜索,尋找最優(yōu)參數(shù),這里只設(shè)置了一個參數(shù),實際中可以設(shè)置多個參數(shù),如下
param_grid = {'alpha': [1, 0.1, 0.01, 0.001, 0.0001]}
#網(wǎng)格搜索,找到最優(yōu)參數(shù),這里使用了10折交叉驗證,可以自己設(shè)置,如5折交叉驗證,這里使用了全部的數(shù)據(jù),也可以自己設(shè)置
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid.fit(X, Y)
print("最優(yōu)分?jǐn)?shù):%.3f" % grid.best_score_)
print("最優(yōu)參數(shù):", grid.best_estimator_.alpha)
param_grid是一個字典對象,以算法的參數(shù)名為key,需要遍歷的參數(shù)值列表為value。在驗證算法最優(yōu)參數(shù)的網(wǎng)格搜索算法中,可以設(shè)定多個key:value對,同時查詢多個參數(shù)的最優(yōu)參數(shù)值。
執(zhí)行結(jié)果如下:
最優(yōu)分?jǐn)?shù):0.276
最優(yōu)參數(shù): 1
隨機(jī)搜索優(yōu)化參數(shù)
隨機(jī)搜索優(yōu)化參數(shù)是另一種對算法參數(shù)優(yōu)化的方法。隨機(jī)搜索優(yōu)化參數(shù)通過固定次數(shù)的迭代,采用隨機(jī)采樣分布的方式搜索合適的參數(shù)。與網(wǎng)格搜索優(yōu)化參數(shù)相比,隨機(jī)搜索優(yōu)化參數(shù)提供了一種更高效的解決方法(特別是在參數(shù)數(shù)量多的情況下),隨機(jī)搜索優(yōu)化參數(shù)為每個參數(shù)定義了一個分布函數(shù),并在該空間中采樣。在 scikit-learn 中通過RandomizedSearchCV類實現(xiàn)。
下面的例子是通過RandomizedSearchCV對脊回歸算法的參數(shù)進(jìn)行100次迭代,并從中選擇最優(yōu)的參數(shù)。
SciPy中的uniform是一個均勻隨機(jī)采樣函數(shù),默認(rèn)生成0與1之間的隨機(jī)采樣數(shù)值。在這里利用uniform對參數(shù)進(jìn)行隨機(jī)采樣。
代碼如下:
import pandas as pd
from scipy.stats import uniform
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#打印標(biāo)簽名稱
print(data.columns)
#將數(shù)據(jù)轉(zhuǎn)成數(shù)組
array = data.values
#分割數(shù)據(jù),去掉最后一個標(biāo)簽
X = array[:, 0:8]
Y = array[:, 8]
model = Ridge()
param_grid = {'alpha': uniform()}
grid = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100, random_state=7)
grid.fit(X, Y)
print("最高得分:%.3f" % grid.best_score_)
print("最優(yōu)參數(shù):", grid.best_estimator_.alpha)
執(zhí)行結(jié)果如下:
最高得分:0.276
最優(yōu)參數(shù): 0.9779895119966027
調(diào)參是算法模型生成之前很重要的一步,上面介紹了兩種選擇最優(yōu)參數(shù)的方法:網(wǎng)格搜索優(yōu)化參數(shù)和隨機(jī)搜索優(yōu)化參數(shù)。
如果算法的參數(shù)少于三個,推薦使用網(wǎng)格搜索優(yōu)化參數(shù);如果需要優(yōu)化的參數(shù)超過三個,推薦使用隨機(jī)搜索優(yōu)化參數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-689067.html
下一節(jié)將介紹如何生成模型,以及如何保存和載入已生成的模型。文章來源地址http://www.zghlxwxcb.cn/news/detail-689067.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)基礎(chǔ)14-算法調(diào)參(基于印第安糖尿病Pima數(shù)據(jù)集)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!