相关模型
线性回归
决策树
决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。
决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数
据进行分类了。
GBDT
- CART回归树
GBDT是一个集成模型,可以看做是很多个基模型的线性相加,其中的基模型就是CART回归树。
CART树是一个决策树模型,与普通的ID3,C4.5相比,CART树的主要特征是,他是一颗二分树,每个节点特征取值为“是”和“不是”。
决策树是一种基本的分类与回归方法。决策树模型具有分类速度快,模型容易可视化的解释,但是同时是也有容易发生过拟合,虽然有剪枝,但也是差强人意。
提升方法(boosting)在分类问题中,它通过改变训练样本的权重(增加分错样本的权重,减小分队样本的的权重),学习多个分类器,并将这些分类器线性组合,提高分类器性能。boosting数学表示为:
其中w是权重,ϕ是弱分类器的集合,可以看出最终就是基函数的线性组合。
于是决策树与boosting结合产生许多算法,主要有提升树、GBDT等。
XGBoost
xgboost是一个监督模型,那么xgboost对应的模型是什么?
答案就是一堆CART树。
LightGBM
性能验证
交叉验证方法
在使用训练集对参数进行训练的时候,人们通常会将一整个训练集分为三个部分:训练集(train_set),验证集(valid_set),测试集(test_set)。这其实是为了保证训练效果而特意设置的。
在实际的训练中,训练的结果对于训练集的拟合程度通常还是挺好的(初始条件敏感),但是对于训练集之外的数据的拟合程度通常就不那么令人满意了。因此我们通常并不会把所有的数据集都拿来训练,而是分出一部分来(不参加训练)对训练集生成的参数进行测试,相对客观的判断这些参数对训练集之外的数据的符合程度。这种思想就称为交叉验证(Cross Validation)
- k折交叉验证
它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。 - 留一法
即当 k=m 即样本总数时,每次的测试集都只有一个样本,要进行 m 次训练和预测。
这个方法用于训练的数据只比整体数据集少了一个样本,因此最接近原始样本的分布。
但是训练复杂度增加了,因为模型的数量与原始数据样本数量相同。
一般在数据缺乏时使用。
样本数很多的话,这种方法开销很大。
嵌入式特征选择
- Lasso回归;
- Ridge回归;
- 决策树;
模型对比
模型调参
贪心调参
基本思路
- 建立数学模型来描述问题
- 把求解的问题分成若干个子问题
- 对每个子问题求解,得到子问题的局部最优解
- 把子问题的解局部最优解合成原来问题的一个解
问题
- 不能保证求得的最后解是最佳的
- 不能用来求最大值或最小值的问题
- 只能求满足某些约束条件的可行解的范围
贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
网格调参
当你算法模型效果不是很好时,可以通过该方法来调整参数,通过循环遍历,尝试每一种参数组合,返回最好的得分值的参数组合。
问题
原来的数据集分割为训练集和测试集之后,其中测试集起到的作用有两个,一个是用来调整参数,一个是用来评价模型的好坏,这样会导致评分值会比实际效果要好。
我们可以通过把数据集划分三份来解决这个问题同时用交叉验证防止过拟合。
网格调参能够使我们找到范围内最优的参数,param_grid参数越多,组合越多,计算的时间也需要越多,适用于小数据集。
贝叶斯调参
贝叶斯优化通过基于目标函数的过去评估结果建立替代函数(概率模型),来找到最小化目标函数的值。贝叶斯方法与随机或网格搜索的不同之处在于,它在尝试下一组超参数时,会参考之前的评估结果,因此可以省去很多无用功。
超参数的评估代价很大,因为它要求使用待评估的超参数训练一遍模型,而许多深度学习模型动则几个小时几天才能完成训练,并评估模型,因此耗费巨大。贝叶斯调参发使用不断更新的概率模型,通过推断过去的结果来“集中”有希望的超参数。
优化问题
- 目标函数:我们想要最小化的内容,在这里,目标函数是机器学习模型使用该组超参数在验证集上的损失。
- 域空间:要搜索的超参数的取值范围
- 优化算法:构造替代函数并选择下一个超参数值进行评估的方法。
- 结果历史记录:来自目标函数评估的存储结果,包括超参数和验证集上的损失。