欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

貝葉斯全局優(yōu)化使用LightGBM調參

GridSearchCV調參-----------------太慢,效果也不好

十余年的廣昌網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整廣昌建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“廣昌網站設計”,“廣昌網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

這里結合Kaggle比賽的一個數(shù)據(jù)集,記錄一下使用貝葉斯全局優(yōu)化和高斯過程來尋找最佳參數(shù)的方法步驟。

1.安裝貝葉斯全局優(yōu)化庫

從pip安裝最新版本

pip install bayesian-optimization

2.加載數(shù)據(jù)集

import pandas as pd

import numpy as np

from sklearn.model_selection import StratifiedKFold

from scipy.stats import rankdata

from sklearn import metrics

import lightgbm as lgb

import warnings

import gc

pd.set_option('display.max_columns', 200)

train_df = pd.read_csv('../input/train.csv')

test_df = pd.read_csv('../input/test.csv')

目標變量的分布

target = 'target'

predictors = train_df.columns.values.tolist()[2:]

train_df.target.value_counts()

貝葉斯全局優(yōu)化 使用LightGBM調參

問題是不平衡。這里使用50%分層行作為保持行,以便驗證集獲得最佳參數(shù)。 稍后將在最終模型擬合中使用5折交叉驗證。

bayesian_tr_index, bayesian_val_index = list(StratifiedKFold(n_splits=2,

shuffle=True, random_state=1).split(train_df, train_df.target.values))[0]

這些bayesian_tr_index和bayesian_val_index索引將用于貝葉斯優(yōu)化,作為訓練和驗證數(shù)據(jù)集的索引。

3.黑盒函數(shù)優(yōu)化(LightGBM)

在加載數(shù)據(jù)時,為LightGBM創(chuàng)建黑盒函數(shù)以查找參數(shù)。

def LGB_bayesian(

num_leaves, # int

min_data_in_leaf, # int

learning_rate,

min_sum_hessian_in_leaf, # int

feature_fraction,

lambda_l1,

lambda_l2,

min_gain_to_split,

max_depth):

# LightGBM expects next three parameters need to be integer. So we make them integer

num_leaves = int(num_leaves)

min_data_in_leaf = int(min_data_in_leaf)

max_depth = int(max_depth)

assert type(num_leaves) == int

assert type(min_data_in_leaf) == int

assert type(max_depth) == int

param = {

'num_leaves': num_leaves,

'max_bin': 63,

'min_data_in_leaf': min_data_in_leaf,

'learning_rate': learning_rate,

'min_sum_hessian_in_leaf': min_sum_hessian_in_leaf,

'bagging_fraction': 1.0,

'bagging_freq': 5,

'feature_fraction': feature_fraction,

'lambda_l1': lambda_l1,

'lambda_l2': lambda_l2,

'min_gain_to_split': min_gain_to_split,

'max_depth': max_depth,

'save_binary': True,

'seed': 1337,

'feature_fraction_seed': 1337,

'bagging_seed': 1337,

'drop_seed': 1337,

'data_random_seed': 1337,

'objective': 'binary',

'boosting_type': 'gbdt',

'verbose': 1,

'metric': 'auc',

'is_unbalance': True,

'boost_from_average': False,

}

xg_train = lgb.Dataset(train_df.iloc[bayesian_tr_index][predictors].values,

label=train_df.iloc[bayesian_tr_index][target].values,

feature_name=predictors,

free_raw_data = False

)

xg_valid = lgb.Dataset(train_df.iloc[bayesian_val_index][predictors].values,

label=train_df.iloc[bayesian_val_index][target].values,

feature_name=predictors,

free_raw_data = False

)

num_round = 5000

clf = lgb.train(param, xg_train, num_round, valid_sets = [xg_valid], verbose_eval=250, early_stopping_rounds = 50)

predictions = clf.predict(train_df.iloc[bayesian_val_index][predictors].values, num_iteration=clf.best_iteration)

score = metrics.roc_auc_score(train_df.iloc[bayesian_val_index][target].values, predictions)

return score

上面的LGB_bayesian函數(shù)將作為貝葉斯優(yōu)化的黑盒函數(shù)。 我已經在LGB_bayesian函數(shù)中為LightGBM定義了trainng和validation數(shù)據(jù)集。

LGB_bayesian函數(shù)從貝葉斯優(yōu)化框架獲取num_leaves,min_data_in_leaf,learning_rate,min_sum_hessian_in_leaf,feature_fraction,lambda_l1,lambda_l2,min_gain_to_split,max_depth的值。 請記住,對于LightGBM,num_leaves,min_data_in_leaf和max_depth應該是整數(shù)。 但貝葉斯優(yōu)化會發(fā)送連續(xù)的函數(shù)。 所以我強制它們是整數(shù)。 我只會找到它們的最佳參數(shù)值。 讀者可以增加或減少要優(yōu)化的參數(shù)數(shù)量。

現(xiàn)在需要為這些參數(shù)提供邊界,以便貝葉斯優(yōu)化僅在邊界內搜索。

bounds_LGB = {

'num_leaves': (5, 20),

'min_data_in_leaf': (5, 20),

'learning_rate': (0.01, 0.3),

'min_sum_hessian_in_leaf': (0.00001, 0.01),

'feature_fraction': (0.05, 0.5),

'lambda_l1': (0, 5.0),

'lambda_l2': (0, 5.0),

'min_gain_to_split': (0, 1.0),

'max_depth':(3,15),

}

讓我們將它們全部放在BayesianOptimization對象中

from bayes_opt import BayesianOptimization

LGB_BO = BayesianOptimization(LGB_bayesian, bounds_LGB, random_state=13)

現(xiàn)在,讓我們來優(yōu)化key space (parameters):

print(LGB_BO.space.keys)

貝葉斯全局優(yōu)化 使用LightGBM調參

我創(chuàng)建了BayesianOptimization對象(LGB_BO),在調用maxime之前它不會工作。在調用之前,解釋一下貝葉斯優(yōu)化對象(LGB_BO)的兩個參數(shù),我們可以傳遞給它們進行最大化:

init_points:我們想要執(zhí)行的隨機探索的初始隨機運行次數(shù)。 在我們的例子中,LGB_bayesian將被運行n_iter次。

n_iter:運行init_points數(shù)后,我們要執(zhí)行多少次貝葉斯優(yōu)化運行。

現(xiàn)在,是時候從貝葉斯優(yōu)化框架調用函數(shù)來最大化。 我允許LGB_BO對象運行5個init_points和5個n_iter。

init_points = 5

n_iter = 5

print('-' * 130)

with warnings.catch_warnings():

warnings.filterwarnings('ignore')

LGB_BO.maximize(init_points=init_points, n_iter=n_iter, acq='ucb', xi=0.0, alpha=1e-6)

優(yōu)化完成后,讓我們看看我們得到的最大值是多少。

LGB_BO.max['target']

參數(shù)的驗證AUC是0.89, 讓我們看看參數(shù):

LGB_BO.max['params']

現(xiàn)在我們可以將這些參數(shù)用于我們的最終模型!

BayesianOptimization庫中還有一個很酷的選項。 你可以探測LGB_bayesian函數(shù),如果你對最佳參數(shù)有所了解,或者您從其他kernel獲取參數(shù)。 我將在此復制并粘貼其他內核中的參數(shù)。 你可以按照以下方式進行探測:

LGB_BO.probe(

params={'feature_fraction': 0.1403,

'lambda_l1': 4.218,

'lambda_l2': 1.734,

'learning_rate': 0.07,

'max_depth': 14,

'min_data_in_leaf': 17,

'min_gain_to_split': 0.1501,

'min_sum_hessian_in_leaf': 0.000446,

'num_leaves': 6},

lazy=True, #

)無錫看婦科好的醫(yī)院 http://www.csfk0731.com/

好的,默認情況下這些將被懶惰地探索(lazy = True),這意味著只有在你下次調用maxime時才會評估這些點。 讓我們對LGB_BO對象進行最大化調用。

LGB_BO.maximize(init_points=0, n_iter=0) # remember no init_points or n_iter

最后,通過屬性LGB_BO.res可以獲得探測的所有參數(shù)列表及其相應的目標值。

for i, res in enumerate(LGB_BO.res):

print("Iteration {}: \n\t{}".format(i, res))

我們在調查中獲得了更好的驗證分數(shù)!和以前一樣,我只運行LGB_BO 10次。在實踐中,我將它增加到100。

LGB_BO.max['target']

LGB_BO.max['params']

讓我們一起構建一個模型使用這些參數(shù)。

4.訓練LightGBM模型

param_lgb = {

'num_leaves': int(LGB_BO.max['params']['num_leaves']), # remember to int here

'max_bin': 63,

'min_data_in_leaf': int(LGB_BO.max['params']['min_data_in_leaf']), # remember to int here

'learning_rate': LGB_BO.max['params']['learning_rate'],

'min_sum_hessian_in_leaf': LGB_BO.max['params']['min_sum_hessian_in_leaf'],

'bagging_fraction': 1.0,

'bagging_freq': 5,

'feature_fraction': LGB_BO.max['params']['feature_fraction'],

'lambda_l1': LGB_BO.max['params']['lambda_l1'],

'lambda_l2': LGB_BO.max['params']['lambda_l2'],

'min_gain_to_split': LGB_BO.max['params']['min_gain_to_split'],

'max_depth': int(LGB_BO.max['params']['max_depth']), # remember to int here

'save_binary': True,

'seed': 1337,

'feature_fraction_seed': 1337,

'bagging_seed': 1337,

'drop_seed': 1337,

'data_random_seed': 1337,

'objective': 'binary',

'boosting_type': 'gbdt',

'verbose': 1,

'metric': 'auc',

'is_unbalance': True,

'boost_from_average': False,

}

如您所見,我將LGB_BO的最佳參數(shù)保存到param_lgb字典中,它們將用于訓練5折的模型。

Kfolds數(shù)量:

nfold = 5

gc.collect()

skf = StratifiedKFold(n_splits=nfold, shuffle=True, random_state=2019)

oof = np.zeros(len(train_df))

predictions = np.zeros((len(test_df),nfold))

i = 1

for train_index, valid_index in skf.split(train_df, train_df.target.values):

print("\nfold {}".format(i))

xg_train = lgb.Dataset(train_df.iloc[train_index][predictors].values,

label=train_df.iloc[train_index][target].values,

feature_name=predictors,

free_raw_data = False

)

xg_valid = lgb.Dataset(train_df.iloc[valid_index][predictors].values,

label=train_df.iloc[valid_index][target].values,

feature_name=predictors,

free_raw_data = False

)

clf = lgb.train(param_lgb, xg_train, 5000, valid_sets = [xg_valid], verbose_eval=250, early_stopping_rounds = 50)

oof[valid_index] = clf.predict(train_df.iloc[valid_index][predictors].values, num_iteration=clf.best_iteration)

predictions[:,i-1] += clf.predict(test_df[predictors], num_iteration=clf.best_iteration)

i = i + 1

print("\n\nCV AUC: {:<0.2f}".format(metrics.roc_auc_score(train_df.target.values, oof)))

所以我們在5折交叉驗證中獲得了0.90 AUC。

讓我們對5折預測進行排名平均。

5.排名平均值

print("Rank averaging on", nfold, "fold predictions")

rank_predictions = np.zeros((predictions.shape[0],1))

for i in range(nfold):

rank_predictions[:, 0] = np.add(rank_predictions[:, 0], rankdata(predictions[:, i].reshape(-1,1))/rank_predictions.shape[0])

rank_predictions /= nfold

6.提交

sub_df = pd.DataFrame({"ID_code": test_df.ID_code.values})

sub_df["target"] = rank_predictions

sub_df.to_csv("Customer_Transaction_rank_predictions.csv", index=False)

網頁題目:貝葉斯全局優(yōu)化使用LightGBM調參
當前網址:http://aaarwkj.com/article28/ispejp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、品牌網站設計、面包屑導航網站營銷、全網營銷推廣、建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
粉嫩欧美一区二区三区| 亚洲乱码中文字幕在线观看| 日本精品在线不卡视频| 丰满人妻毛片一区二区三区| 日本国产一区二区在线观看| 亚洲视频精品一区二区三区| 国产一区二区三区精品久| 国产饥渴熟女在线三区| 日韩电影中文字幕一区| 99在线视频午夜福利| 亚洲av乱码一区二区三| 国产麻豆三级在线观看| 人人狠狠综合久久亚洲| 精品欧美激情精品一区| 亚洲全乱码精品一区二区| 久草福利视频免费播放| 欧美激情一区二区亚洲专区| 国产伦理免费精品中文字幕| 国产传媒剧情剧资源网站| 西西美女掰开阴让你看| 国产欧美日本综合一区| 青青草手机在线视频免费观看| 国产高清精品在线一区| 91超碰在线观看中文| 国产极品嫩模在线观看91| 国产又粗又长在线视频| 婷婷中文字幕在线不卡视频| 色91精品在线观看剧情| 综合久久99中文综合久久| av在线免费播放观看| 亚洲第一狼人天堂在线| 亚洲欧美一区二区三区日本| 国产超碰久久久久久精品| 日本亚洲一级中文字幕| 亚洲午夜一区二区三区精品影院| 亚洲精品一区二区牛仔裤| 日韩在线视频 一区二区三区| 亚洲美女国产精选999| 日本美女激情在线观看| 日韩精品一区二区av在线| 好吊妞在线新免费视频|