这个博文的内容:
1.k-Fold和StratifiedKFold的区别;
2.LightGBM的代码流程,不会讲LightGBM的内部原理。
3. 贝叶斯优化超参数:这个在之前的博文已经讲过了,链接:
贝叶斯优化(Bayesian Optimization)只需要看这一篇就够了,算法到python实现
K-Fold vs StratifiedKFold
这里就不说为什么要用K-Fold了,如果有人不清楚可以评论emm(估计是骗不到评论了哈哈)。
StratifiedKFold的Stratified就是社会分层的意思,就是假设按照4:1的比例划分训练集和验证集的时候,划分的训练集和验证集是等比例标签的。看个例子:
from sklearn.model_selection import StratifiedKFold,KFold
x_train = pd.DataFrame({
'x':[0,1,2,3,4,5,6,7,8,9],'y':[0,1,0,1,0,1,0,1,0,1]})
kf = StratifiedKFold(n_splits = 5, shuffle = True, random_state = 0)
for i in kf.split(x_train.x,x_train.y):
print(i)
运行结果:
我简单的构建了一个十个数据的数据集,然后标签类别有两类(奇数和偶数,不过这个不重要啦)。然后通过K-Fold把是个数据划分成五组训练集+验证集(也就是说我们会训练五个模型)。因为原始的十个数据中,有五个是奇数,五个是偶数,所以比例是1:1,没错吧。
所以StratifiedKFold就是保证验证机的不同类别的样本和原始数据的比例相同,可以看到五组数据中每一组的验证集和训练集的不同类别的样本数量比例就是1:1。
那么KFold就是随机划分,没有考虑这个保持比例相同的问题,可以看上面的例子,用KFold来实现(完全一样,就是StratifiedKFold变成了KFold):
from sklearn.model_selection import StratifiedKFold,KFold
x_train = pd.DataFrame({
'x':[0,1,2,3,4,5,6,7,8,9],'y':[0,1,0,