xgboost和lightgbm学习
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
本文仅用于个人学习记录,照片来自于其他博主的博客
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
主要用于求解回归问题
提示:以下是本篇文章正文内容,下面案例可供参考
一、lightgbm参数
英文网站:https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMRegressor.html#lightgbm.LGBMRegressor
中文网站:
https://lightgbm.cn/docs/6/
lightgbm.LGBMRegressor(boosting_type=‘gbdt’, num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type=‘split’, **kwargs
学习速率,[0.01,0.15]之间
最大深度,[3, 25]
feature_fraction / colsample_bytree:[0.5, 1]
bagging_fraction / subsample:[0.5, 1]
lambda_l1:[0, 0.01~0.1, 1]
lambda_l2:[0, 0.1, 0.5, 1]
min_gain_to_split / min_split_gain:值越大越保守[0, 0.05 ~ 0.1, 0.3, 0.5, 0.7, 0.9, 1]
min_sum_hessian_in_leaf / min_child_weight:[1, 3, 5, 7]
二、XGBoost
网站:https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters
2.1 优势
正则化,并行处理,可以自定义优化目标和评价标准,内置处理缺失值的规则,具有贪心算法进行剪枝,
2.2 参数
learning_rate:学习速率,通过减少每一步的权重,提高模型的鲁棒性。典型值为0.01-0.2(待验证)。对于不同问题,学习速率在0.05到0.3之间波动。
min_child_weight:最小叶子节点样本权重和,功能等同于min_child_leaf。该参数避免过拟合,值大可以避免学习局部样本,但太大容易导致欠拟合。默认值为1.
max_depth:最大深度,该值也是避免过拟合。典型值:3-10。默认值为6。
gamma:在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。值越大,算法越保守。默认值为0.调节范围可以在0.1到0.2之间
subsample:随机采样的比例,值小,避免过拟合。典型值在:0.5-1。默认值为1.
colsample_bytree:控制每棵树采样的列数占比,典型值在:0.5-1。默认值为1
2.3 绘图
xgb.plot_importance(bst)#重要性
xgb.plot_tree(bst, num_trees=2)#树图
start=timeit.default_timer()
end=timeit.default_timer()
计算运行时间
三、SVR参数
网站:https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters
在优化超参数时,一开始优化的时C和gamma,优化后超参数求出的结果效果不明显。后来优化C和epslion,最后带入后的效果有明显的提升。
该博主详细讲解了svr的参数:https://blog.csdn.net/weixin_42279212/article/details/121550052?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166808020716782414958869%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=166808020716782414958869&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-121550052-null-null.142v63control,201v3add_ask,213v2t3_esquery_v2&utm_term=SVr%E8%B0%83%E5%8F%82&spm=1018.2226.3001.4187
四、随机森林
4.1 参数
Max_feathures:增加值会提高模型的性能,但会降低单个树的多样性。
n_estimators:建立子树的数量。值越高,会得到更优的性能。但计算速度会变慢。
min_sample_leaf:该值非常重要(据说),有人将该值设置为大于50以上。小型样本在1-50间,大样本在200-300间。
min_samples_split:该值范围在2-30间
对于随机森林来说,调参不会引起很大的波动,即使是默认的参数也会得到良好的结果。
三、贝叶斯优化(Tree-structured Parzen Estimator)
网站:1. https://optunity.readthedocs.io/en/latest/user/solvers/TPE.html#hyperopt
2. https://github.com/WillKoehrsen/hyperparameter optimization/blob/master/Introduction%20to%20Bayesian%20Optimization%20with%20Hyperopt.ipynb
定义参数空间可选择函数:
hp.pchoice(label,p_options)以一定的概率返回一个p_options的一个选项。这个选项使得函数在搜索过程中对每个选项的可能性不均匀。
hp.uniform(label,low,high)参数在low和high之间均匀分布。
hp.quniform(label,low,high,q),参数的取值round(uniform(low,high)/q)*q,适用于那些离散的取值。
hp.loguniform(label,low,high) 返回根据 exp(uniform(low,high)) 绘制的值,以便返回值的对数是均匀分布的。
优化时,该变量被限制在[exp(low),exp(high)]区间内。
hp.randint(label,upper) 返回一个在[0,upper)前闭后开的区间内的随机整数。
hp.normal(label, mu, sigma) where mu and sigma are the mean and standard deviation σ , respectively. 正态分布,返回值范围没法限制。
hp.qnormal(label, mu, sigma, q)
hp.lognormal(label, mu, sigma)
hp.qlognormal(label, mu, sigma, q)
随机搜索(hyperopt.rand.suggest)
模拟退火(hyperopt.anneal.suggest)
TPE算法(hyperopt.tpe.suggest,
1.引入库
onehot(未验证):
feature = feature.reshape(X.shape[0], 1)
onehot_encoder = OneHotEncoder(sparse=False)
feature = onehot_encoder.fit_transform(feature)
# encode string input values as integers
encoded_x = None
for i in range(0, X.shape[1]):
label_encoder = LabelEncoder()
feature = label_encoder.fit_transform(X[:,i])
feature = feature.reshape(X.shape[0], 1)
onehot_encoder = OneHotEncoder(sparse=False)
feature = onehot_encoder.fit_transform(feature)
if encoded_x is None:
encoded_x = feature
else:
encoded_x = numpy.concatenate((encoded_x, feature), axis=1)
print("X shape: : ", encoded_x.shape)
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。