# -*- coding: utf-8 -*-
"""演算法調參.ipynb
automatically generated by colaboratory.
original file is located at
### 超引數優化
這是機器學習模型解決問題的最後乙個步驟,並不是整個解決方案的最後一步。不會調參就不能說會機器學習。引數分為了兩種:
- 影響模型在訓練集上的準確度,防止模型過擬合的引數
- 與準確度和過擬合無關的引數
其中調參調的是第一類引數。
這裡介紹兩類演算法:
- 網格搜尋
- 隨機搜尋
#### 網格搜尋
通過遍歷已定義的引數列表,來評估演算法的引數,從而找到最優引數。使用方法是`gridsearchcv`,實現對引數的跟蹤,調整和評估,最終找到最優引數。**網格搜尋適用於三四個超引數或者更少的情況,否則計算量會非常大,此時要轉成隨機搜尋。**
"""# 網格搜尋**
from pandas import read_csv
from sklearn.linear_model import ridge
from sklearn.model_selection import gridsearchcv
# 匯入資料
filename =
''names =
['preg'
,'plas'
,'pres'
,'skin'
,'test'
,'mass'
,'pedi'
,'age'
,'class'
]data = read_csv(filename, names=names)
# 資料劃分
array = data.values
x = array[:,
0:8]
y = array[:,
8]model = ridge(
)# 設定要遍歷的引數
param_grid =
# 網格搜尋
grid = gridsearchcv(estimator=model, param_grid=param_grid)
grid.fit(x,y)
print
('最高得分:%.3f'
% grid.best_score_)
print
('最優引數:%s'
% grid.best_estimator_.alpha)
"""其中,`param_grid`是 乙個字典物件,演算法需要的引數名是`key`,需要遍歷的引數值列表為`value`。可以設定多個`key-value`對,同時查詢多個最優引數值。
### 隨機搜尋優化
這個需要牽涉到隨機的方法,即取樣的方法。
"""from pandas import read_csv
from sklearn.linear_model import ridge
from sklearn.model_selection import randomizedsearchcv
from scipy.stats import uniform
# 匯入資料
filename =
''names =
['preg'
,'plas'
,'pres'
,'skin'
,'test'
,'mass'
,'pedi'
,'age'
,'class'
]data = read_csv(filename, names=names)
# 資料劃分
array = data.values
x = array[:,
0:8]
y = array[:,
8]model = ridge(
)# 設定要遍歷的引數
param_grid =
# 網格搜尋
grid = randomizedsearchcv(estimator=model, param_distributions=param_grid, n_iter=
100, random_state=7)
grid.fit(x,y)
print
('最高得分:%.3f'
% grid.best_score_)
print
('最優引數:%s'
% grid.best_estimator_.alpha)
end.
參考:《機器學習python實踐》
機器學習 調參
在實際調整引數之前,我們先要搞清楚兩個事情 1.調參的目的是什麼?2.調參調的東西具體是什麼?第乙個問題 調參的目的是什麼?調參的最終目的是要使訓練之後的模型檢測物體更精確,向程式的方向更靠近一步的話,就是使得損失函式 例如ssd中的loss 盡量小 因為利用訓練集訓練出來的模型質量在訓練過程中只能...
機器學習 關於調參
關於引數 feature scaling 機器學習中對於引數的理解不是數學中的數字,而是代表的是一種邏輯的趨勢的數字,這種邏輯是人類對場景的邏輯,也可以看作是人思想上對場景與數字引數的經驗,所以機器學習中的運算,不是數字的運算,而是邏輯的運算,如何設計出符合人類邏輯規律的運算,才能更好的 趨勢,這種...
機器學習調參方法
網格搜尋交叉驗證 通常是在全量資料上做的,會自動切分成幾折 有時候會注意做分層抽樣去保證資料分布 參考的kaggle kernel early stopping 這個通常需要切分訓練集和驗證集,我們會根據驗證集去確定最佳的輪次,但是除掉迭代輪次以外其他的引數需要通過經驗或者gridsearch敲定。...