python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
算法
數據結構
機器學習筆記——模型調參利器 GridSearchCV(網格搜索)參數的說明
GridSearchCV,它存在的意義就是自動調參,只要把參數輸進去,就能給出最優化的結果和參數。但是這個方法適合于小數據集,一旦數據的量級上去了,很難得出結果。這個時候就是需要動腦筋了。數據量比較大的時候可以使用一個快速調優的方法——坐標下降。它其實是一種貪心算法:拿當前對模型影響最大的參數調優,直到最優化;再拿下一個影響最大的參數調優,如此下去,直到所有的參數調整完畢。這個方法的缺點就是可能會調到局部最優而不是全局最優,但是省時間省力,巨大的優勢面前,還是試一試吧,后續可以再拿bagging再優化。
通常算法不夠好,需要調試參數時必不可少。比如SVM的懲罰因子C,核函數kernel,gamma參數等,對于不同的數據使用不同的參數,結果效果可能差1-5個點,sklearn為我們提供專門調試參數的函數grid_search。
參數說明
class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, cv=None, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise’, return_train_score=’warn’)
(1)estimator
選擇使用的分類器,并且傳入除需要確定最佳的參數之外的其他參數。每一個分類器都需要一個scoring參數,或者score方法:estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10),
(2)param_grid
需要最優化的參數的取值,值為字典或者列表,例如:param_grid =param_test1,param_test1 = {'n_estimators':range(10,71,10)}。
(3)scoring=None
模型評價標準,默認None,這時需要使用score函數;或者如scoring='roc_auc',根據所選模型不同,評價準則不同。字符串(函數名),或是可調用對象,需要其函數簽名形如:scorer(estimator, X, y);如果是None,則使用estimator的誤差估計函數。
(4)fit_params=None
(5)n_jobs=1
n_jobs:?并行數,int:個數,-1:跟CPU核數一致, 1:默認值
(6)iid=True
iid:默認True,為True時,默認為各個樣本fold概率分布一致,誤差估計為所有樣本之和,而非各個fold的平均。
(7)refit=True
默認為True,程序將會以交叉驗證訓練集得到的最佳參數,重新對所有可用的訓練集與開發集進行,作為最終用于性能評估的最佳模型參數。即在搜索參數結束后,用最佳參數結果再次fit一遍全部數據集。
(8)cv=None
交叉驗證參數,默認None,使用三折交叉驗證。指定fold數量,默認為3,也可以是yield訓練/測試數據的生成器。
(9)verbose=0,?scoring=None
verbose:日志冗長度,int:冗長度,0:不輸出訓練過程,1:偶爾輸出,>1:對每個子模型都輸出。
(10)pre_dispatch=‘2*n_jobs’
指定總共分發的并行任務數。當n_jobs大于1時,數據將在每個運行點進行復制,這可能導致OOM,而設置pre_dispatch參數,則可以預先劃分總共的job數量,使數據最多被復制pre_dispatch次
(11)error_score=’raise’
(12)return_train_score=’warn’
如果“False”,cv_results_屬性將不包括訓練分數
回到sklearn里面的GridSearchCV,GridSearchCV用于系統地遍歷多種參數組合,通過交叉驗證確定最佳效果參數。
目的
通過訓練集的訓練求出所需模型的最佳參數。
代碼簡單實現
import pandas as pd
from sklearn.model_selection import GridSearchCV,train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score,recall_score,f1_score,roc_auc_score,roc_curve
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')#處理警告
data = pd.read_excel('文件路徑')
data = pd.DataFrame(data)
X = data.iloc[:,:-1]
Y = data.iloc[:,-1]
trainx,testx,trainy,testy = train_test_split(X,Y,test_size=1/3,random_state=3)#random_state相當于隨機種子
best_ting = {
'max_iter':[20,40,60,100],
'C':[0.01,0.1,1,10]
}
# 使用測試集對模型進行驗證,并利用GridSearchCV技術對邏輯回歸模型進行超參調優,
#網格搜索最優超參數
best_g = GridSearchCV(LogisticRegression(),best_ting,cv=5)
best_g.fit(trainx,trainy)
print(best_g.best_params_)#輸出最優參數
best_model = LogisticRegression(max_iter=20,C=10)
best_model.fit(trainx,trainy)
best_H = best_model.predict(testx)
best_yH = best_model.predict_proba(testx)
# 并輸出測試數據集的精確率、召回率、F1值、AUC值,畫出ROC曲線
print('精準率:',precision_score(testy,best_H))
print('召回率:',recall_score(testy,best_H))
print('F1率:',f1_score(testy,best_H))
print('AUC:',roc_auc_score(testy,best_yH[:,-1]))
fpr,tpr,theta = roc_curve(testy,best_yH[:,-1])
print('fpr=n',fpr)
print('tpr=n',tpr)
print('theta=n',theta)
#畫出ROC曲線
plt.plot(fpr,tpr)
plt.show()
關于sklearn.metrics.roc_curve()
主要用來計算ROC面積的
''
sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
輸入:其中y_true為真實標簽,y_score為預測概率,或稱為置信度。pos_label為正類樣本標簽,一般為1。
輸出:fpr(假正率、1-特效性)、tpr(真正率、靈敏度)、thresholds(閾值)
假正率 = 預測為正類的負樣本/所有負類樣本,越小越好。
真正率 = 預測為正類的正樣本/所有正類樣本,越大越好。
'''
#這個還有些不理解,在學習中..
修改于2019-07-1219:28:34
仝淵濤
內容來源于網絡,如有侵權請聯系客服刪除
總結
以上是生活随笔為你收集整理的python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql删除过程的命令是什么_一个删除表字
- 下一篇: python程序多线程_Python-多