回归问题心得

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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 57
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值