1、引入头文件
from lightgbm.sklearn import LGBMClassifier from sklearn.model_selection import cross_val_score, train_test_split, GridSearchCV from sklearn.metrics import mean_absolute_error, make_scorer, accuracy_score
2、创建分类器
lgbm_clf = LGBMClassifier( # **params random_state=626, n_estimators=800, learning_rate=0.1, max_depth = -1, num_leaves = 127, colsample_bytree = 0.8, subsample = 0.8, lambda_l1= 0.1, # 0.1 lambda_l2=0.2, # 0.2 device='gpu', # gpu_platform_id=1, gpu_device_id=0 )
3、贝叶斯调参
from bayes_opt import BayesianOptimization #定义优化参数 def rf_cv(max_depth, subsample,num_leaves,colsample_bytree): val = cross_val_score(LGBMClassifier( n_estimators=300, learning_rate= 0.1, max_depth = int(max_depth), subsample = min(subsample,0.999), num_leaves = int(num_leaves), colsample_bytree = min(colsample_bytree,0.99), # lambda_l1= 0.1, # 0.1 # lambda_l2=0.2, # 0.2 random_state = 626, device='gpu', #gpu_platform_id=1, gpu_device_id=0,), train_x,train_y,scoring="accuracy",cv=5).mean() return val #贝叶斯优化 rf_bo = BayesianOptimization(rf_cv, { # "n_estimators":(100,300), # 'learning_rate':(0.08,0.2), "colsample_bytree":(0.7,0.9), "subsample":(0.7,0.9), "max_depth":(5,11), 'num_leaves':(31,150), # 'lambda_l1':(0.1,0.3), # 'lambda_l2':(0.1,0.3), }) #开始优化 print(LGB_BO.max['params']) num_iter = 25 init_points = 4 rf_bo.maximize(init_points=init_points,n_iter=num_iter)
#显示优化结果 rf_bo.res["max"]
4、验证结果
lgb_clf=LGBMClassifier( n_jobs=-1, device_type='gpu', n_estimators=400, learning_rate=0.1, max_depth=5, num_leaves=31, colsample_bytree=0.51, subsample=0.6, # max_bins=127, ) scores = cross_val_score(lgb_clf, X=train_x, y=train_y, verbose=1, cv = 5, scoring=make_scorer(accuracy_score), n_jobs=-1) scores.mean()
5、拟合预测
x_train,x_test,y_train, y_test =train_test_split(train_x,train_y,test_size=0.2,random_state=20) lgb_clf.fit(x_train,y_train) pred=lgb_clf.predict(x_test) print("lgb_clf:",np.mean(pred==y_test))